telepathy-rakia-0.8.0/0000755000175000017500000000000012223050362011577 500000000000000telepathy-rakia-0.8.0/configure0000755000175000017500000163310512223050266013442 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for telepathy-rakia 0.8.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 IFS=$as_save_IFS ;; 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='telepathy-rakia' PACKAGE_TARNAME='telepathy-rakia' PACKAGE_VERSION='0.8.0' PACKAGE_STRING='telepathy-rakia 0.8.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WANT_TWISTED_TESTS_FALSE WANT_TWISTED_TESTS_TRUE pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON XSLTPROC IPHB_LIBS IPHB_CFLAGS TELEPATHY_GLIB_LIBS TELEPATHY_GLIB_CFLAGS SOFIA_SIP_UA_LIBS SOFIA_SIP_UA_CFLAGS DBUS_LIBS DBUS_CFLAGS GLIB_GENMARSHAL GLIB_LIBS GLIB_CFLAGS GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE GTKDOC_DEPS_LIBS GTKDOC_DEPS_CFLAGS HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG ENABLE_DEBUG_FALSE ENABLE_DEBUG_TRUE ERROR_CFLAGS CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM VERSION PACKAGE TELEPATHY_SIP_VERSION_NANO TELEPATHY_SIP_VERSION_MICRO TELEPATHY_SIP_VERSION_MINOR TELEPATHY_SIP_VERSION_MAJOR TELEPATHY_SIP_VERSION_RELEASE TELEPATHY_SIP_VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_shared enable_dependency_tracking enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_compiler_optimisations enable_compiler_coverage enable_fatal_warnings enable_Werror enable_debug with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf with_iphb ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS GLIB_CFLAGS GLIB_LIBS DBUS_CFLAGS DBUS_LIBS SOFIA_SIP_UA_CFLAGS SOFIA_SIP_UA_LIBS TELEPATHY_GLIB_CFLAGS TELEPATHY_GLIB_LIBS IPHB_CFLAGS IPHB_LIBS PYTHON' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures telepathy-rakia 0.8.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/telepathy-rakia] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of telepathy-rakia 0.8.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=no] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-compiler-optimisations Disable compiler optimisations --enable-compiler-coverage Enable generation of coverage data --enable-fatal-warnings make various warnings fatal --disable-fatal-warnings make various warnings non-fatal --disable-Werror compile without -Werror (normally enabled in development builds) --disable-debug omit debug code --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-html-dir=PATH path to installed docs --with-iphb use IP heartbeat support in Maemo Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTKDOC_DEPS_CFLAGS C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config DBUS_LIBS linker flags for DBUS, overriding pkg-config SOFIA_SIP_UA_CFLAGS C compiler flags for SOFIA_SIP_UA, overriding pkg-config SOFIA_SIP_UA_LIBS linker flags for SOFIA_SIP_UA, overriding pkg-config TELEPATHY_GLIB_CFLAGS C compiler flags for TELEPATHY_GLIB, overriding pkg-config TELEPATHY_GLIB_LIBS linker flags for TELEPATHY_GLIB, overriding pkg-config IPHB_CFLAGS C compiler flags for IPHB, overriding pkg-config IPHB_LIBS linker flags for IPHB, overriding pkg-config PYTHON the Python interpreter Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF telepathy-rakia configure 0.8.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by telepathy-rakia $as_me 0.8.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` 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 || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu PACKAGE=telepathy-rakia TELEPATHY_SIP_VERSION_MAJOR=0 TELEPATHY_SIP_VERSION_MINOR=8 TELEPATHY_SIP_VERSION_MICRO=0 NANO=0 TELEPATHY_SIP_VERSION_NANO=$NANO if test "x$NANO" = "x" || test "x$NANO" = "x0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: configuring telepathy-rakia for release" >&5 $as_echo "$as_me: configuring telepathy-rakia for release" >&6;} VERSION=0.8.0 TELEPATHY_SIP_VERSION_RELEASE=1 IS_RELEASE="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: configuring telepathy-rakia for development with nano $NANO" >&5 $as_echo "$as_me: configuring telepathy-rakia for development with nano $NANO" >&6;} VERSION=0.8.0.$NANO TELEPATHY_SIP_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S` IS_RELEASE="no" fi TELEPATHY_SIP_VERSION=$VERSION cat >>confdefs.h <<_ACEOF #define TELEPATHY_SIP_VERSION "$TELEPATHY_SIP_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define TELEPATHY_SIP_VERSION_RELEASE "$TELEPATHY_SIP_VERSION_RELEASE" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF am__api_version='1.14' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='telepathy-rakia' VERSION='0.8.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi ac_config_headers="$ac_config_headers config.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi case $ac_cv_prog_cc_stdc in #( no) : ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if ${ac_cv_prog_cc_stdc+:} false; then : $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in #( no) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; #( '') : { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Check whether --enable-compiler-optimisations was given. if test "${enable_compiler_optimisations+set}" = set; then : enableval=$enable_compiler_optimisations; if test "x$enable_compiler_optimisations" = "xno"; then CFLAGS=`echo "$CFLAGS" | sed -e "s/ -O[1-9]*\b/ -O0/g"` fi fi # Check whether --enable-compiler-coverage was given. if test "${enable_compiler_coverage+set}" = set; then : enableval=$enable_compiler_coverage; if test "x$enable_compiler_coverage" = "xyes"; then if test "x$GCC" = "xyes"; then CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" fi fi fi if test "x$IS_RELEASE" = xyes; then : # version x.y.z - "official release", # disable extra checks by default # Check whether --enable-fatal-warnings was given. if test "${enable_fatal_warnings+set}" = set; then : enableval=$enable_fatal_warnings; else enable_fatal_warnings=no fi else # tp-glib is version x.y.z.1 - development snapshot, # enable extra checks by default # Check whether --enable-fatal-warnings was given. if test "${enable_fatal_warnings+set}" = set; then : enableval=$enable_fatal_warnings; else enable_fatal_warnings=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands " >&5 $as_echo_n "checking to see if compiler understands ... " >&6; } save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS " CXXFLAGS="$CXXFLAGS " cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" if test "X$flag_ok" = Xyes ; then true else true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } tp_warnings="" for tp_flag in all \ extra \ declaration-after-statement \ shadow \ missing-prototypes \ nested-externs \ pointer-arith \ sign-compare \ strict-prototypes \ format-security \ init-self; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -W$tp_flag" >&5 $as_echo_n "checking to see if compiler understands -W$tp_flag... " >&6; } save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS -W$tp_flag" CXXFLAGS="$CXXFLAGS -W$tp_flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" if test "X$flag_ok" = Xyes ; then tp_warnings="$tp_warnings -W$tp_flag" true else true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } done tp_error_flags="-Werror" { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Werror" >&5 $as_echo_n "checking to see if compiler understands -Werror... " >&6; } save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS -Werror" CXXFLAGS="$CXXFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" if test "X$flag_ok" = Xyes ; then tp_werror=yes true else tp_werror=no true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } for tp_flag in missing-field-initializers \ unused-parameter \ deprecated-declarations; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wno-$tp_flag" >&5 $as_echo_n "checking to see if compiler understands -Wno-$tp_flag... " >&6; } save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS -Wno-$tp_flag" CXXFLAGS="$CXXFLAGS -Wno-$tp_flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" if test "X$flag_ok" = Xyes ; then tp_warnings="$tp_warnings -Wno-$tp_flag" true else true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wno-error=$tp_flag" >&5 $as_echo_n "checking to see if compiler understands -Wno-error=$tp_flag... " >&6; } save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS -Wno-error=$tp_flag" CXXFLAGS="$CXXFLAGS -Wno-error=$tp_flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" if test "X$flag_ok" = Xyes ; then tp_error_flags="$tp_error_flags -Wno-error=$tp_flag" true else tp_werror=no true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } done # Check whether --enable-Werror was given. if test "${enable_Werror+set}" = set; then : enableval=$enable_Werror; tp_werror=$enableval else : fi if test "x$tp_werror" = xyes && test "x$enable_fatal_warnings" = xyes; then ERROR_CFLAGS="$tp_error_flags $tp_warnings" else ERROR_CFLAGS="$tp_warnings" fi # these aren't really error flags but they serve a similar purpose for us - # making the toolchain stricter if test "x$enable_fatal_warnings" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler/linker understand -Wl,--no-copy-dt-needed-entries" >&5 $as_echo_n "checking to see if compiler/linker understand -Wl,--no-copy-dt-needed-entries... " >&6; } save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--no-copy-dt-needed-entries" if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext LDFLAGS="$save_LDFLAGS" if test "X$flag_ok" = Xyes ; then ERROR_LDFLAGS="$ERROR_LDFLAGS -Wl,--no-copy-dt-needed-entries" true else true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=$enableval else enable_debug=yes fi if test x$enable_debug = xyes; then $as_echo "#define ENABLE_DEBUG /**/" >>confdefs.h fi if test "x$enable_debug" = xyes; then ENABLE_DEBUG_TRUE= ENABLE_DEBUG_FALSE='#' else ENABLE_DEBUG_TRUE='#' ENABLE_DEBUG_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_CHECK+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_REBASE+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi if test x$enable_gtk_doc = xyes; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-doc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "gtk-doc not installed and --enable-gtk-doc requested" "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 $as_echo_n "checking for GTKDOC_DEPS... " >&6; } if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKDOC_DEPS_LIBS"; then pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` else GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 : elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 $as_echo_n "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 >= 2.30, gio-2.0 >= 2.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 >= 2.30, gio-2.0 >= 2.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 >= 2.30, gio-2.0 >= 2.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 >= 2.30, gio-2.0 >= 2.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 >= 2.30, gio-2.0 >= 2.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "gobject-2.0 >= 2.30, gio-2.0 >= 2.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gobject-2.0 >= 2.30, gio-2.0 >= 2.30" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gobject-2.0 >= 2.30, gio-2.0 >= 2.30" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gobject-2.0 >= 2.30, gio-2.0 >= 2.30) were not met: $GLIB_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLIB_CFLAGS and GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` $as_echo "#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_30" >>confdefs.h $as_echo "#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_30" >>confdefs.h pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5 $as_echo_n "checking for DBUS... " >&6; } if test -n "$DBUS_CFLAGS"; then pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.60, dbus-glib-1 >= 0.60\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.60, dbus-glib-1 >= 0.60") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 0.60, dbus-glib-1 >= 0.60" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$DBUS_LIBS"; then pkg_cv_DBUS_LIBS="$DBUS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.60, dbus-glib-1 >= 0.60\""; } >&5 ($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.60, dbus-glib-1 >= 0.60") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 0.60, dbus-glib-1 >= 0.60" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "dbus-1 >= 0.60, dbus-glib-1 >= 0.60" 2>&1` else DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "dbus-1 >= 0.60, dbus-glib-1 >= 0.60" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$DBUS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (dbus-1 >= 0.60, dbus-glib-1 >= 0.60) were not met: $DBUS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables DBUS_CFLAGS and DBUS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables DBUS_CFLAGS and DBUS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else DBUS_CFLAGS=$pkg_cv_DBUS_CFLAGS DBUS_LIBS=$pkg_cv_DBUS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SOFIA_SIP_UA" >&5 $as_echo_n "checking for SOFIA_SIP_UA... " >&6; } if test -n "$SOFIA_SIP_UA_CFLAGS"; then pkg_cv_SOFIA_SIP_UA_CFLAGS="$SOFIA_SIP_UA_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sofia-sip-ua-glib >= 1.12.11\""; } >&5 ($PKG_CONFIG --exists --print-errors "sofia-sip-ua-glib >= 1.12.11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SOFIA_SIP_UA_CFLAGS=`$PKG_CONFIG --cflags "sofia-sip-ua-glib >= 1.12.11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SOFIA_SIP_UA_LIBS"; then pkg_cv_SOFIA_SIP_UA_LIBS="$SOFIA_SIP_UA_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sofia-sip-ua-glib >= 1.12.11\""; } >&5 ($PKG_CONFIG --exists --print-errors "sofia-sip-ua-glib >= 1.12.11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SOFIA_SIP_UA_LIBS=`$PKG_CONFIG --libs "sofia-sip-ua-glib >= 1.12.11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SOFIA_SIP_UA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sofia-sip-ua-glib >= 1.12.11" 2>&1` else SOFIA_SIP_UA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sofia-sip-ua-glib >= 1.12.11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SOFIA_SIP_UA_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sofia-sip-ua-glib >= 1.12.11) were not met: $SOFIA_SIP_UA_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SOFIA_SIP_UA_CFLAGS and SOFIA_SIP_UA_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables SOFIA_SIP_UA_CFLAGS and SOFIA_SIP_UA_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else SOFIA_SIP_UA_CFLAGS=$pkg_cv_SOFIA_SIP_UA_CFLAGS SOFIA_SIP_UA_LIBS=$pkg_cv_SOFIA_SIP_UA_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TELEPATHY_GLIB" >&5 $as_echo_n "checking for TELEPATHY_GLIB... " >&6; } if test -n "$TELEPATHY_GLIB_CFLAGS"; then pkg_cv_TELEPATHY_GLIB_CFLAGS="$TELEPATHY_GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"telepathy-glib >= 0.17.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "telepathy-glib >= 0.17.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_TELEPATHY_GLIB_CFLAGS=`$PKG_CONFIG --cflags "telepathy-glib >= 0.17.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$TELEPATHY_GLIB_LIBS"; then pkg_cv_TELEPATHY_GLIB_LIBS="$TELEPATHY_GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"telepathy-glib >= 0.17.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "telepathy-glib >= 0.17.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_TELEPATHY_GLIB_LIBS=`$PKG_CONFIG --libs "telepathy-glib >= 0.17.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then TELEPATHY_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "telepathy-glib >= 0.17.7" 2>&1` else TELEPATHY_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "telepathy-glib >= 0.17.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$TELEPATHY_GLIB_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (telepathy-glib >= 0.17.7) were not met: $TELEPATHY_GLIB_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables TELEPATHY_GLIB_CFLAGS and TELEPATHY_GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables TELEPATHY_GLIB_CFLAGS and TELEPATHY_GLIB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else TELEPATHY_GLIB_CFLAGS=$pkg_cv_TELEPATHY_GLIB_CFLAGS TELEPATHY_GLIB_LIBS=$pkg_cv_TELEPATHY_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Check whether --with-iphb was given. if test "${with_iphb+set}" = set; then : withval=$with_iphb; else with_iphb=no fi if test "x$with_iphb" != xno; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPHB" >&5 $as_echo_n "checking for IPHB... " >&6; } if test -n "$IPHB_CFLAGS"; then pkg_cv_IPHB_CFLAGS="$IPHB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libiphb >= 0.61.31\""; } >&5 ($PKG_CONFIG --exists --print-errors "libiphb >= 0.61.31") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_IPHB_CFLAGS=`$PKG_CONFIG --cflags "libiphb >= 0.61.31" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$IPHB_LIBS"; then pkg_cv_IPHB_LIBS="$IPHB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libiphb >= 0.61.31\""; } >&5 ($PKG_CONFIG --exists --print-errors "libiphb >= 0.61.31") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_IPHB_LIBS=`$PKG_CONFIG --libs "libiphb >= 0.61.31" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then IPHB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libiphb >= 0.61.31" 2>&1` else IPHB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libiphb >= 0.61.31" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$IPHB_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libiphb >= 0.61.31) were not met: $IPHB_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables IPHB_CFLAGS and IPHB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables IPHB_CFLAGS and IPHB_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else IPHB_CFLAGS=$pkg_cv_IPHB_CFLAGS IPHB_LIBS=$pkg_cv_IPHB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBIPHB /**/" >>confdefs.h fi else IPHB_CFLAGS= IPHB_LIBS= fi XSLTPROC= for ac_prog in xsltproc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$XSLTPROC"; then ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_XSLTPROC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi XSLTPROC=$ac_cv_prog_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$XSLTPROC" && break done if test -z "$XSLTPROC"; then as_fn_error $? "xsltproc (from the libxslt source package) is required" "$LINENO" 5 fi if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.3" >&5 $as_echo_n "checking whether $PYTHON version is >= 2.3... " >&6; } prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Python interpreter is too old" "$LINENO" 5 fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.3" >&5 $as_echo_n "checking for a Python interpreter with version >= 2.3... " >&6; } if ${am_cv_pathless_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do test "$am_cv_pathless_PYTHON" = none && break prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 $as_echo "$am_cv_pathless_PYTHON" >&6; } # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. set dummy $am_cv_pathless_PYTHON; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then as_fn_error $? "Python is required to compile this package" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if ${am_cv_python_platform+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[:3] == '2.7': can_use_sysconfig = 0 except ImportError: pass" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TwistedPython with SIP protocol support" >&5 $as_echo_n "checking for TwistedPython with SIP protocol support... " >&6; } if $PYTHON -c "import twisted.protocols.sip, twisted.internet.reactor" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if true; then WANT_TWISTED_TESTS_TRUE= WANT_TWISTED_TESTS_FALSE='#' else WANT_TWISTED_TESTS_TRUE='#' WANT_TWISTED_TESTS_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if false; then WANT_TWISTED_TESTS_TRUE= WANT_TWISTED_TESTS_FALSE='#' else WANT_TWISTED_TESTS_TRUE='#' WANT_TWISTED_TESTS_FALSE= fi fi ac_config_files="$ac_config_files Makefile rakia/Makefile extensions/Makefile src/Makefile m4/Makefile data/Makefile tests/Makefile tests/twisted/Makefile tests/twisted/tools/Makefile tools/Makefile docs/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DEBUG_TRUE}" && test -z "${ENABLE_DEBUG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_TWISTED_TESTS_TRUE}" && test -z "${WANT_TWISTED_TESTS_FALSE}"; then as_fn_error $? "conditional \"WANT_TWISTED_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_TWISTED_TESTS_TRUE}" && test -z "${WANT_TWISTED_TESTS_FALSE}"; then as_fn_error $? "conditional \"WANT_TWISTED_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # 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-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 IFS=$as_save_IFS ;; 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by telepathy-rakia $as_me 0.8.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent 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 Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ telepathy-rakia config.status 0.8.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; 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 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "rakia/Makefile") CONFIG_FILES="$CONFIG_FILES rakia/Makefile" ;; "extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/twisted/Makefile") CONFIG_FILES="$CONFIG_FILES tests/twisted/Makefile" ;; "tests/twisted/tools/Makefile") CONFIG_FILES="$CONFIG_FILES tests/twisted/tools/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; 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 test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # 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. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi telepathy-rakia-0.8.0/src/0000755000175000017500000000000012223050362012366 500000000000000telepathy-rakia-0.8.0/src/protocol.h0000644000175000017500000000427712223047264014341 00000000000000/* * protocol.h - header for RakiaProtocol * Copyright (C) 2007-2010 Collabora Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef RAKIA_PROTOCOL_H #define RAKIA_PROTOCOL_H #include #include #include #include G_BEGIN_DECLS typedef struct _RakiaProtocol RakiaProtocol; typedef struct _RakiaProtocolPrivate RakiaProtocolPrivate; typedef struct _RakiaProtocolClass RakiaProtocolClass; typedef struct _RakiaProtocolClassPrivate RakiaProtocolClassPrivate; struct _RakiaProtocolClass { TpBaseProtocolClass parent_class; RakiaProtocolClassPrivate *priv; }; struct _RakiaProtocol { TpBaseProtocol parent; RakiaProtocolPrivate *priv; }; GType rakia_protocol_get_type (void); #define RAKIA_TYPE_PROTOCOL \ (rakia_protocol_get_type ()) #define RAKIA_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ RAKIA_TYPE_PROTOCOL, \ RakiaProtocol)) #define RAKIA_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), \ RAKIA_TYPE_PROTOCOL, \ RakiaProtocolClass)) #define RAKIA_IS_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), \ RAKIA_TYPE_PROTOCOL)) #define RAKIA_PROTOCOL_GET_CLASS(klass) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ RAKIA_TYPE_PROTOCOL, \ RakiaProtocolClass)) gchar *rakia_protocol_normalize_contact (const gchar *id, GError **error); TpBaseProtocol *rakia_protocol_new (su_root_t *sofia_root); G_END_DECLS #endif telepathy-rakia-0.8.0/src/write-mgr-file.c0000644000175000017500000002500312223047264015313 00000000000000/* * write_mgr_file.c - utility to produce manager files. Derived from Gabble. * Copyright (C) 2006-2010 Collabora Ltd. * Copyright (C) 2006-2010 Nokia Corporation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include "protocol.h" #define WRITE_STR(prop, key) \ { \ const gchar *val = tp_asv_get_string (props, prop); \ g_assert (!tp_str_empty (val)); \ g_key_file_set_string (f, section_name, key, val); \ } static void write_parameters (GKeyFile *f, gchar *section_name, TpBaseProtocol *protocol) { const TpCMParamSpec *parameters = tp_base_protocol_get_parameters (protocol); const TpCMParamSpec *row; for (row = parameters; row->name; row++) { gchar *param_name = g_strdup_printf ("param-%s", row->name); gchar *param_value = g_strdup_printf ("%s%s%s%s", row->dtype, (row->flags & TP_CONN_MGR_PARAM_FLAG_REQUIRED ? " required" : ""), (row->flags & TP_CONN_MGR_PARAM_FLAG_REGISTER ? " register" : ""), (row->flags & TP_CONN_MGR_PARAM_FLAG_SECRET ? " secret" : "")); g_key_file_set_string (f, section_name, param_name, param_value); g_free (param_value); g_free (param_name); } for (row = parameters; row->name; row++) { if (row->flags & TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT) { gchar *default_name = g_strdup_printf ("default-%s", row->name); switch (row->gtype) { case G_TYPE_STRING: g_key_file_set_string (f, section_name, default_name, row->def); break; case G_TYPE_INT: case G_TYPE_UINT: g_key_file_set_integer (f, section_name, default_name, GPOINTER_TO_INT(row->def)); break; case G_TYPE_BOOLEAN: g_key_file_set_boolean (f, section_name, default_name, GPOINTER_TO_INT(row->def) ? 1 : 0); break; default: /* can't be in the case because G_TYPE_STRV is actually a * function */ if (row->gtype == G_TYPE_STRV) { g_key_file_set_string_list (f, section_name, default_name, (const gchar **) row->def, g_strv_length ((gchar **) row->def)); } } g_free (default_name); } } } static void write_rcc_property (GKeyFile *keyfile, const gchar *group_name, const gchar *key, GValue *val) { switch (G_VALUE_TYPE (val)) { case G_TYPE_BOOLEAN: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_BOOLEAN_AS_STRING, NULL); g_key_file_set_boolean (keyfile, group_name, kf_key, g_value_get_boolean (val)); g_free (kf_key); break; } case G_TYPE_STRING: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_STRING_AS_STRING, NULL); g_key_file_set_string (keyfile, group_name, kf_key, g_value_get_string (val)); g_free (kf_key); break; } case G_TYPE_UINT: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_UINT32_AS_STRING, NULL); gchar *kf_val = g_strdup_printf ("%u", g_value_get_uint (val)); g_key_file_set_value (keyfile, group_name, kf_key, kf_val); g_free (kf_key); g_free (kf_val); break; } /* FIXME: when we depend on Glib 2.26, we can use * g_key_file_set_[u]int64 (g.o #614864). */ case G_TYPE_UINT64: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_UINT64_AS_STRING, NULL); gchar *kf_val = g_strdup_printf ("%" G_GUINT64_FORMAT, g_value_get_uint64 (val)); g_key_file_set_value (keyfile, group_name, kf_key, kf_val); g_free (kf_key); g_free (kf_val); break; } case G_TYPE_INT: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_INT32_AS_STRING, NULL); g_key_file_set_integer (keyfile, group_name, kf_key, g_value_get_int (val)); g_free (kf_key); break; } case G_TYPE_INT64: { gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_UINT64_AS_STRING, NULL); gchar *kf_val = g_strdup_printf ("%" G_GINT64_FORMAT, g_value_get_int64 (val)); g_key_file_set_value (keyfile, group_name, kf_key, kf_val); g_free (kf_key); g_free (kf_val); break; } default: { if (G_VALUE_TYPE (val) == G_TYPE_STRV) { gchar **list = g_value_get_boxed (val); gchar *kf_key = g_strconcat (key, " " DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING, NULL); g_key_file_set_string_list (keyfile, group_name, kf_key, (const gchar **) list, g_strv_length (list)); g_free (kf_key); break; } /* we'd rather crash than forget to write required rcc property */ g_assert_not_reached (); } } } static gchar * generate_group_name (GHashTable *props) { static guint counter = 0; gchar *retval; gchar *chan_type = g_ascii_strdown (tp_asv_get_string (props, TP_PROP_CHANNEL_CHANNEL_TYPE), -1); gchar *chan_type_suffix; gchar *handle_type_name; guint handle_type = tp_asv_get_uint32 (props, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL); g_assert (chan_type != NULL); chan_type_suffix = strrchr (chan_type, '.'); g_assert (chan_type_suffix != NULL); chan_type_suffix++; switch (handle_type) { case TP_HANDLE_TYPE_CONTACT: handle_type_name = "-1on1"; break; case TP_HANDLE_TYPE_ROOM: handle_type_name = "-multi"; break; case TP_HANDLE_TYPE_GROUP: handle_type_name = "-group"; break; case TP_HANDLE_TYPE_LIST: handle_type_name = "-list"; break; default: handle_type_name = ""; } retval = g_strdup_printf ("%s%s-%d", chan_type_suffix, handle_type_name, ++counter); g_free (chan_type); return retval; } static void write_rccs (GKeyFile *f, const gchar *section_name, GHashTable *props) { GPtrArray *rcc_list = tp_asv_get_boxed (props, TP_PROP_PROTOCOL_REQUESTABLE_CHANNEL_CLASSES, TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST); guint i; gchar **group_names = g_new0 (gchar *, rcc_list->len + 1); for (i = 0; i < rcc_list->len; i++) { gchar **allowed; gchar *group_name; GHashTable *fixed; GHashTableIter iter; gpointer k, v; tp_value_array_unpack (g_ptr_array_index (rcc_list, i), 2, &fixed, &allowed); group_name = generate_group_name (fixed); g_hash_table_iter_init (&iter, fixed); while (g_hash_table_iter_next (&iter, &k, &v)) { const gchar *key = k; GValue *val = v; write_rcc_property (f, group_name, key, val); } /* takes ownership */ group_names[i] = group_name; g_key_file_set_string_list (f, group_name, "allowed", (const gchar **) allowed, g_strv_length (allowed)); } g_key_file_set_string_list (f, section_name, "RequestableChannelClasses", (const gchar **) group_names, rcc_list->len); g_strfreev (group_names); } static gchar * mgr_file_contents (const char *busname, const char *objpath, GSList *protocols, GError **error) { GKeyFile *f = g_key_file_new (); gchar *file_data; g_key_file_set_string (f, "ConnectionManager", "BusName", busname); g_key_file_set_string (f, "ConnectionManager", "ObjectPath", objpath); /* there are no CM interfaces defined yet, so we cheat */ g_key_file_set_string (f, "ConnectionManager", "Interfaces", ""); while (protocols != NULL) { TpBaseProtocol *protocol = protocols->data; GHashTable *props = tp_base_protocol_get_immutable_properties (protocol); gchar *section_name = g_strdup_printf ("Protocol %s", tp_base_protocol_get_name (protocol)); const gchar * const *ifaces = tp_asv_get_strv (props, TP_PROP_PROTOCOL_INTERFACES); const gchar * const *c_ifaces = tp_asv_get_strv (props, TP_PROP_PROTOCOL_CONNECTION_INTERFACES); write_parameters (f, section_name, protocol); write_rccs (f, section_name, props); g_key_file_set_string_list (f, section_name, "Interfaces", ifaces, g_strv_length ((gchar **) ifaces)); g_key_file_set_string_list (f, section_name, "ConnectionInterfaces", c_ifaces, g_strv_length ((gchar **) c_ifaces)); WRITE_STR (TP_PROP_PROTOCOL_VCARD_FIELD, "VCardField"); WRITE_STR (TP_PROP_PROTOCOL_ENGLISH_NAME, "EnglishName"); WRITE_STR (TP_PROP_PROTOCOL_ICON, "Icon"); g_free (section_name); g_hash_table_unref (props); protocols = protocols->next; } file_data = g_key_file_to_data (f, NULL, error); g_key_file_free (f); return file_data; } int main (void) { GError *error = NULL; gchar *s; GSList *protocols = NULL; g_type_init (); dbus_g_type_specialized_init (); protocols = g_slist_prepend (protocols, rakia_protocol_new (NULL)); s = mgr_file_contents (TP_CM_BUS_NAME_BASE "sofiasip", TP_CM_OBJECT_PATH_BASE "sofiasip", protocols, &error); g_object_unref (protocols->data); g_slist_free (protocols); if (!s) { fprintf (stderr, "%s", error->message); g_error_free (error); return 1; } printf ("%s", s); g_free (s); return 0; } telepathy-rakia-0.8.0/src/sip-connection-manager.h0000644000175000017500000000453112223047264017031 00000000000000/* * sip-connection-manager.h - Header for RakiaConnectionManager * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2005-2008 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CONNECTION_MANAGER_H__ #define __RAKIA_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _RakiaConnectionManager RakiaConnectionManager; typedef struct _RakiaConnectionManagerClass RakiaConnectionManagerClass; typedef struct _RakiaConnectionManagerPrivate RakiaConnectionManagerPrivate; struct _RakiaConnectionManagerClass { TpBaseConnectionManagerClass parent_class; }; struct _RakiaConnectionManager { TpBaseConnectionManager parent; RakiaConnectionManagerPrivate *priv; }; GType rakia_connection_manager_get_type(void); /* TYPE MACROS */ #define RAKIA_TYPE_CONNECTION_MANAGER \ (rakia_connection_manager_get_type()) #define RAKIA_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_CONNECTION_MANAGER, RakiaConnectionManager)) #define RAKIA_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_CONNECTION_MANAGER, RakiaConnectionManagerClass)) #define RAKIA_IS_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_CONNECTION_MANAGER)) #define RAKIA_IS_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_CONNECTION_MANAGER)) #define RAKIA_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_CONNECTION_MANAGER, RakiaConnectionManagerClass)) extern const TpCMProtocolSpec rakia_protocols[]; G_END_DECLS #endif /* #ifndef __RAKIA_CONNECTION_MANAGER_H__*/ telepathy-rakia-0.8.0/src/Makefile.in0000644000175000017500000007070512223050267014370 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile.am for telepathy-rakia/src # # Copyright (C) 2006-2009 Nokia Corporation # Contact: Mikhail Zabaluev # Licensed under LGPL. See file COPYING. # # ---------------------------------------------------------------------- # Automake options VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ libexec_PROGRAMS = telepathy-rakia$(EXEEXT) noinst_PROGRAMS = write-mgr-file$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) librakia_convenience_la_DEPENDENCIES = \ $(top_builddir)/rakia/librakia.la \ $(top_builddir)/extensions/librakia-extensions.la am_librakia_convenience_la_OBJECTS = sip-connection.lo \ sip-connection-manager.lo protocol.lo \ sip-connection-helpers.lo am__objects_1 = sip-connection-enumtypes.lo nodist_librakia_convenience_la_OBJECTS = $(am__objects_1) librakia_convenience_la_OBJECTS = \ $(am_librakia_convenience_la_OBJECTS) \ $(nodist_librakia_convenience_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(managerdir)" PROGRAMS = $(libexec_PROGRAMS) $(noinst_PROGRAMS) am_telepathy_rakia_OBJECTS = telepathy-rakia.$(OBJEXT) telepathy_rakia_OBJECTS = $(am_telepathy_rakia_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) telepathy_rakia_DEPENDENCIES = librakia-convenience.la \ $(am__DEPENDENCIES_2) am_write_mgr_file_OBJECTS = write-mgr-file.$(OBJEXT) write_mgr_file_OBJECTS = $(am_write_mgr_file_OBJECTS) write_mgr_file_DEPENDENCIES = librakia-convenience.la \ $(am__DEPENDENCIES_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(librakia_convenience_la_SOURCES) \ $(nodist_librakia_convenience_la_SOURCES) \ $(telepathy_rakia_SOURCES) $(write_mgr_file_SOURCES) DIST_SOURCES = $(librakia_convenience_la_SOURCES) \ $(telepathy_rakia_SOURCES) $(write_mgr_file_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(manager_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ managerdir = $(datadir)/telepathy/managers # ---------------------------------------------------------------------- # Headers and libraries AM_CPPFLAGS = $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(SOFIA_SIP_UA_CFLAGS) \ $(TELEPATHY_GLIB_CFLAGS) $(IPHB_CFLAGS) \ -I$(top_builddir) -I$(top_srcdir) \ -DG_LOG_DOMAIN=\"rakia\" AM_CFLAGS = $(ERROR_CFLAGS) $(COVERAGE_CFLAGS) AM_LDFLAGS = $(ERROR_LDFLAGS) ALL_LIBS = $(DBUS_LIBS) $(GLIB_LIBS) $(SOFIA_SIP_UA_LIBS) \ $(TELEPATHY_GLIB_LIBS) $(IPHB_LIBS) manager_DATA = rakia.manager noinst_LTLIBRARIES = librakia-convenience.la BUILT_SOURCES = \ sip-connection-enumtypes.h \ sip-connection-enumtypes.c librakia_convenience_la_SOURCES = \ sip-connection.h \ sip-connection.c \ sip-connection-manager.h \ sip-connection-manager.c \ protocol.h \ protocol.c \ sip-connection-helpers.h \ sip-connection-helpers.c \ sip-connection-private.h nodist_librakia_convenience_la_SOURCES = \ $(BUILT_SOURCES) librakia_convenience_la_LIBADD = \ $(top_builddir)/rakia/librakia.la \ $(top_builddir)/extensions/librakia-extensions.la telepathy_rakia_SOURCES = \ telepathy-rakia.c telepathy_rakia_LDADD = librakia-convenience.la $(ALL_LIBS) write_mgr_file_SOURCES = \ write-mgr-file.c write_mgr_file_LDADD = librakia-convenience.la $(ALL_LIBS) # ---------------------------------------------------------------------- # Install and distribution rules # Correctly clean the generated headers, but keep the xml description CLEANFILES = $(BUILT_SOURCES) $(manager_DATA) *.gcda *.gcno all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } librakia-convenience.la: $(librakia_convenience_la_OBJECTS) $(librakia_convenience_la_DEPENDENCIES) $(EXTRA_librakia_convenience_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(librakia_convenience_la_OBJECTS) $(librakia_convenience_la_LIBADD) $(LIBS) install-libexecPROGRAMS: $(libexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-libexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files clean-libexecPROGRAMS: @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list telepathy-rakia$(EXEEXT): $(telepathy_rakia_OBJECTS) $(telepathy_rakia_DEPENDENCIES) $(EXTRA_telepathy_rakia_DEPENDENCIES) @rm -f telepathy-rakia$(EXEEXT) $(AM_V_CCLD)$(LINK) $(telepathy_rakia_OBJECTS) $(telepathy_rakia_LDADD) $(LIBS) write-mgr-file$(EXEEXT): $(write_mgr_file_OBJECTS) $(write_mgr_file_DEPENDENCIES) $(EXTRA_write_mgr_file_DEPENDENCIES) @rm -f write-mgr-file$(EXEEXT) $(AM_V_CCLD)$(LINK) $(write_mgr_file_OBJECTS) $(write_mgr_file_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protocol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sip-connection-enumtypes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sip-connection-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sip-connection-manager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sip-connection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/telepathy-rakia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write-mgr-file.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-managerDATA: $(manager_DATA) @$(NORMAL_INSTALL) @list='$(manager_DATA)'; test -n "$(managerdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(managerdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(managerdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(managerdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(managerdir)" || exit $$?; \ done uninstall-managerDATA: @$(NORMAL_UNINSTALL) @list='$(manager_DATA)'; test -n "$(managerdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(managerdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(managerdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \ clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-managerDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libexecPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libexecPROGRAMS uninstall-managerDATA .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libexecPROGRAMS install-man install-managerDATA \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libexecPROGRAMS uninstall-managerDATA # ---------------------------------------------------------------------- # Tests # ---------------------------------------------------------------------- # Rules for building the targets # rules for makeing the glib enum objects %-enumtypes.h: %.h glib-mkenums \ --fhead "#ifndef __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__\n#define __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__\n\n#include \n\nG_BEGIN_DECLS\n" \ --fprod "/* enumerations from \"@filename@\" */\n" \ --vhead "GType @enum_name@_get_type (void);\n#define RAKIA_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ --ftail "G_END_DECLS\n\n#endif /* __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__ */" \ $< > $@ || rm -f $@ %-enumtypes.c: %.h glib-mkenums \ --fhead "#include <$*-enumtypes.h>\n#include <$*.h>" \ --fprod "\n/* enumerations from \"@filename@\" */" \ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ $< > $@ || rm -f $@ rakia.manager: write-mgr-file if ./write-mgr-file > $@.tmp; then \ mv -f $@.tmp $@;\ else \ rm -f $@.tmp; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/src/sip-connection-private.h0000644000175000017500000000454012223047264017071 00000000000000/* * sip-connection-private.h - Private structures for RakiaConnection * Copyright (C) 2005-2007 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CONNECTION_PRIVATE_H__ #define __RAKIA_CONNECTION_PRIVATE_H__ #include "config.h" #include #include #include #include #ifdef HAVE_LIBIPHB #include #endif struct _RakiaConnectionPrivate { nua_t *sofia_nua; su_home_t *sofia_home; nua_handle_t *register_op; sres_resolver_t *sofia_resolver; const url_t *account_url; url_t *proxy_url; url_t *registrar_url; #ifdef HAVE_LIBIPHB iphb_t heartbeat; su_wait_t heartbeat_wait[1]; int heartbeat_wait_id; #endif gchar *registrar_realm; RakiaMediaManager *media_manager; TpSimplePasswordManager *password_manager; gchar *address; gchar *auth_user; gchar *password; gchar *alias; gchar *transport; RakiaConnectionKeepaliveMechanism keepalive_mechanism; guint keepalive_interval; gboolean discover_stun; gchar *stun_host; guint stun_port; gchar *local_ip_address; guint local_port; gchar *extra_auth_user; gchar *extra_auth_password; gboolean loose_routing; gboolean discover_binding; gboolean immutable_streams; gboolean ignore_tls_errors; gboolean keepalive_interval_specified; gboolean dispose_has_run; }; /* #define RAKIA_PROTOCOL_STRING "sip" */ #define RAKIA_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RAKIA_TYPE_CONNECTION, RakiaConnectionPrivate)) #endif /*__RAKIA_CONNECTION_PRIVATE_H__*/ telepathy-rakia-0.8.0/src/sip-connection.c0000644000175000017500000010562412223047264015421 00000000000000/* * sip-connection.c - Source for RakiaConnection * Copyright (C) 2005-2007 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * @author Kai Vehmanen * @author Martti Mela * @author Mikhail Zabaluev * * Based on telepathy-gabble implementation (gabble-connection). * @author See gabble-connection.c * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sip-connection.h" #include "sip-connection-enumtypes.h" #include "sip-connection-helpers.h" #include "sip-connection-private.h" #include #include #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" G_DEFINE_TYPE_WITH_CODE (RakiaConnection, rakia_connection, RAKIA_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING, rakia_connection_aliasing_svc_iface_init); G_IMPLEMENT_INTERFACE (RAKIA_TYPE_CONNECTION_ALIASING, NULL); ); /* properties */ enum { PROP_ADDRESS = 1, /**< public SIP address (SIP URI) */ PROP_AUTH_USER, /**< account username (if different from public address userinfo part) */ PROP_PASSWORD, /**< account password (for registration) */ PROP_ALIAS, /* Display name for self */ PROP_TRANSPORT, /**< outbound transport */ PROP_PROXY, /**< outbound SIP proxy (SIP URI) */ PROP_REGISTRAR, /**< SIP registrar (SIP URI) */ PROP_LOOSE_ROUTING, /**< enable loose routing behavior */ PROP_KEEPALIVE_MECHANISM, /**< keepalive mechanism as defined by RakiaConnectionKeepaliveMechanism */ PROP_KEEPALIVE_INTERVAL, /**< keepalive interval in seconds */ PROP_DISCOVER_BINDING, /**< enable discovery of public binding */ PROP_DISCOVER_STUN, /**< Discover STUN server name using DNS SRV lookup */ PROP_STUN_SERVER, /**< STUN server address (if not set, derived from public SIP address */ PROP_STUN_PORT, /**< STUN port */ PROP_IMMUTABLE_STREAMS, /**< If the session content is immutable once set up */ PROP_LOCAL_IP_ADDRESS, /**< Local IP address (normally not needed, chosen by stack) */ PROP_LOCAL_PORT, /**< Local port for SIP (normally not needed, chosen by stack) */ PROP_EXTRA_AUTH_USER, /**< User name to use for extra authentication challenges */ PROP_EXTRA_AUTH_PASSWORD,/**< Password to use for extra authentication challenges */ PROP_IGNORE_TLS_ERRORS, /**< If true, TLS errors will be ignored */ PROP_SOFIA_NUA, /**< Base class accessing nua_t */ LAST_PROPERTY }; static void priv_value_set_url_as_string (GValue *value, const url_t *url) { if (url == NULL) { g_value_set_string (value, NULL); } else { su_home_t temphome[1] = { SU_HOME_INIT(temphome) }; char *tempstr; tempstr = url_as_string (temphome, url); g_value_set_string (value, tempstr); su_home_deinit (temphome); } } static url_t * priv_url_from_string_value (su_home_t *home, const GValue *value) { const gchar *url_str; g_assert (home != NULL); url_str = g_value_get_string (value); return (url_str)? url_make (home, url_str) : NULL; } static void rakia_create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = (TpHandleRepoIface *)g_object_new (TP_TYPE_DYNAMIC_HANDLE_REPO, "handle-type", TP_HANDLE_TYPE_CONTACT, "normalize-function", rakia_handle_normalize, "default-normalize-context", conn, NULL); } static GPtrArray * rakia_connection_create_channel_managers (TpBaseConnection *conn) { RakiaConnection *self = RAKIA_CONNECTION (conn); RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); GPtrArray *channel_managers = g_ptr_array_sized_new (2); g_ptr_array_add (channel_managers, g_object_new (RAKIA_TYPE_TEXT_MANAGER, "connection", self, NULL)); priv->media_manager = g_object_new (RAKIA_TYPE_MEDIA_MANAGER, "connection", self, NULL); g_ptr_array_add (channel_managers, priv->media_manager); priv->password_manager = tp_simple_password_manager_new ( conn); g_ptr_array_add (channel_managers, priv->password_manager); return channel_managers; } static void rakia_connection_init (RakiaConnection *self) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); priv->sofia_home = su_home_new(sizeof (su_home_t)); rakia_connection_aliasing_init (self); } static void rakia_connection_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaConnection *self = (RakiaConnection*) object; RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); switch (property_id) { case PROP_ADDRESS: { /* just store the address, self_handle set in start_connecting */ priv->address = g_value_dup_string (value); break; } case PROP_AUTH_USER: { g_free(priv->auth_user); priv->auth_user = g_value_dup_string (value); break; } case PROP_PASSWORD: { g_free(priv->password); priv->password = g_value_dup_string (value); break; } case PROP_ALIAS: { g_free(priv->alias); priv->alias = g_value_dup_string (value); break; } case PROP_TRANSPORT: { g_free(priv->transport); priv->transport = g_value_dup_string (value); break; } case PROP_PROXY: { priv->proxy_url = priv_url_from_string_value (priv->sofia_home, value); break; } case PROP_REGISTRAR: { priv->registrar_url = priv_url_from_string_value (priv->sofia_home, value); if (priv->sofia_nua) nua_set_params(priv->sofia_nua, NUTAG_REGISTRAR(priv->registrar_url), TAG_END()); break; } case PROP_LOOSE_ROUTING: { priv->loose_routing = g_value_get_boolean (value); break; } case PROP_KEEPALIVE_MECHANISM: { RakiaConnectionKeepaliveMechanism mech = g_value_get_enum (value); if (priv->keepalive_interval_specified && priv->keepalive_interval == 0) { if (mech != RAKIA_CONNECTION_KEEPALIVE_NONE && mech != RAKIA_CONNECTION_KEEPALIVE_AUTO) WARNING ("keep-alive mechanism selection is ignored when interval is 0"); } else { priv->keepalive_mechanism = mech; if (priv->sofia_nua != NULL) { rakia_conn_update_nua_outbound (self); rakia_conn_update_nua_keepalive_interval (self); } } break; } case PROP_KEEPALIVE_INTERVAL: { priv->keepalive_interval = g_value_get_uint (value); priv->keepalive_interval_specified = TRUE; if (priv->keepalive_interval == 0) { priv->keepalive_mechanism = RAKIA_CONNECTION_KEEPALIVE_NONE; if (priv->sofia_nua != NULL) rakia_conn_update_nua_outbound (self); } if (priv->sofia_nua) { rakia_conn_update_nua_keepalive_interval(self); } break; } case PROP_DISCOVER_BINDING: { priv->discover_binding = g_value_get_boolean (value); if (priv->sofia_nua) rakia_conn_update_nua_outbound (self); break; } case PROP_DISCOVER_STUN: priv->discover_stun = g_value_get_boolean (value); break; case PROP_STUN_PORT: { priv->stun_port = g_value_get_uint (value); break; } case PROP_STUN_SERVER: { g_free (priv->stun_host); priv->stun_host = g_value_dup_string (value); break; } case PROP_IMMUTABLE_STREAMS: priv->immutable_streams = g_value_get_boolean (value); break; case PROP_LOCAL_IP_ADDRESS: { g_free (priv->local_ip_address); priv->local_ip_address = g_value_dup_string (value); break; } case PROP_LOCAL_PORT: { priv->local_port = g_value_get_uint (value); break; } case PROP_EXTRA_AUTH_USER: { g_free((gpointer)priv->extra_auth_user); priv->extra_auth_user = g_value_dup_string (value); break; } case PROP_EXTRA_AUTH_PASSWORD: { g_free((gpointer)priv->extra_auth_password); priv->extra_auth_password = g_value_dup_string (value); break; } case PROP_IGNORE_TLS_ERRORS: priv->ignore_tls_errors = g_value_get_boolean (value); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec); break; } } static void rakia_connection_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaConnection *self = (RakiaConnection *) object; RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); switch (property_id) { case PROP_ADDRESS: { g_value_set_string (value, priv->address); break; } case PROP_AUTH_USER: { g_value_set_string (value, priv->auth_user); break; } case PROP_PASSWORD: { g_value_set_string (value, priv->password); break; } case PROP_ALIAS: { g_value_set_string (value, priv->alias); break; } case PROP_TRANSPORT: { g_value_set_string (value, priv->transport); break; } case PROP_PROXY: { priv_value_set_url_as_string (value, priv->proxy_url); break; } case PROP_REGISTRAR: { priv_value_set_url_as_string (value, priv->registrar_url); break; } case PROP_LOOSE_ROUTING: { g_value_set_boolean (value, priv->loose_routing); break; } case PROP_KEEPALIVE_MECHANISM: { g_value_set_enum (value, priv->keepalive_mechanism); break; } case PROP_KEEPALIVE_INTERVAL: { /* FIXME: get the keepalive interval from NUA in case anything * really retrieves this property */ g_value_set_uint (value, priv->keepalive_interval); break; } case PROP_DISCOVER_BINDING: { g_value_set_boolean (value, priv->discover_binding); break; } case PROP_DISCOVER_STUN: g_value_set_boolean (value, priv->discover_stun); break; case PROP_STUN_SERVER: { g_value_set_string (value, priv->stun_host); break; } case PROP_STUN_PORT: { g_value_set_uint (value, priv->stun_port); break; } case PROP_IMMUTABLE_STREAMS: g_value_set_boolean (value, priv->immutable_streams); break; case PROP_LOCAL_IP_ADDRESS: { g_value_set_string (value, priv->local_ip_address); break; } case PROP_LOCAL_PORT: { g_value_set_uint (value, priv->local_port); break; } case PROP_IGNORE_TLS_ERRORS: g_value_set_boolean (value, priv->ignore_tls_errors); break; case PROP_SOFIA_NUA: { g_value_set_pointer (value, priv->sofia_nua); break; } default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec); break; } } static void rakia_connection_dispose (GObject *object); static void rakia_connection_finalize (GObject *object); static gchar * rakia_connection_unique_name (TpBaseConnection *base) { RakiaConnection *conn = RAKIA_CONNECTION (base); RakiaConnectionPrivate *priv; g_assert (RAKIA_IS_CONNECTION (conn)); priv = RAKIA_CONNECTION_GET_PRIVATE (conn); return g_strdup (priv->address); } static void rakia_connection_disconnected (TpBaseConnection *base); static void rakia_connection_shut_down (TpBaseConnection *base); static gboolean rakia_connection_start_connecting (TpBaseConnection *base, GError **error); static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_REQUESTS, TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_ALIASING, NULL }; const gchar ** rakia_connection_get_implemented_interfaces (void) { /* we don't have any conditionally-implemented interfaces */ return interfaces_always_present; } static nua_handle_t *rakia_connection_create_nua_handle (RakiaBaseConnection *, TpHandle); static void rakia_connection_add_auth_handler (RakiaBaseConnection *, RakiaEventTarget *); static void rakia_connection_class_init (RakiaConnectionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); TpBaseConnectionClass *base_class = TP_BASE_CONNECTION_CLASS (klass); RakiaBaseConnectionClass *sip_class = RAKIA_BASE_CONNECTION_CLASS (klass); GParamSpec *param_spec; /* Implement pure-virtual methods */ sip_class->create_handle = rakia_connection_create_nua_handle; sip_class->add_auth_handler = rakia_connection_add_auth_handler; base_class->create_handle_repos = rakia_create_handle_repos; base_class->get_unique_connection_name = rakia_connection_unique_name; base_class->create_channel_managers = rakia_connection_create_channel_managers; base_class->create_channel_factories = NULL; base_class->disconnected = rakia_connection_disconnected; base_class->start_connecting = rakia_connection_start_connecting; base_class->shut_down = rakia_connection_shut_down; base_class->interfaces_always_present = interfaces_always_present; g_type_class_add_private (klass, sizeof (RakiaConnectionPrivate)); object_class->dispose = rakia_connection_dispose; object_class->finalize = rakia_connection_finalize; object_class->set_property = rakia_connection_set_property; object_class->get_property = rakia_connection_get_property; #define INST_PROP(x) \ g_object_class_install_property (object_class, x, param_spec) g_object_class_override_property (object_class, PROP_SOFIA_NUA, "sofia-nua"); param_spec = g_param_spec_string ("address", "SIP address", "SIP AoR URI", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_ADDRESS); param_spec = g_param_spec_string ("auth-user", "Auth username", "Username to use when registering " "(if different than userinfo part of public SIP address)", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_AUTH_USER); param_spec = g_param_spec_string ("password", "SIP account password", "Password for SIP registration", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_PASSWORD); g_object_class_override_property (object_class, PROP_ALIAS, "alias"); param_spec = g_param_spec_string ("transport", "Transport protocol", "Preferred transport protocol (auto, udp, tcp)", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_TRANSPORT); param_spec = g_param_spec_string ("proxy", "Outbound proxy", "SIP URI for outbound proxy", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_PROXY); param_spec = g_param_spec_string ("registrar", "Registrar", "SIP URI for registrar", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_REGISTRAR); param_spec = g_param_spec_boolean ("loose-routing", "Loose routing", "Enable loose routing as per RFC 3261", FALSE, /*default value*/ G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_LOOSE_ROUTING); param_spec = g_param_spec_enum ("keepalive-mechanism", "Keepalive mechanism", "Keepalive mechanism for SIP registration", RAKIA_TYPE_CONNECTION_KEEPALIVE_MECHANISM, RAKIA_CONNECTION_KEEPALIVE_AUTO, /*default value*/ G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_KEEPALIVE_MECHANISM); param_spec = g_param_spec_uint ("keepalive-interval", "Keepalive interval", "Interval between keepalive probes in seconds " "(0 = disabled, unset = use a default interval)", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_KEEPALIVE_INTERVAL); param_spec = g_param_spec_boolean ("discover-binding", "Discover public contact", "Enable discovery of public IP address beyond NAT", TRUE, /*default value*/ G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_DISCOVER_BINDING); param_spec = g_param_spec_boolean ("discover-stun", "Discover STUN server", "Enable discovery of STUN server host name using DNS SRV lookup", TRUE, /*default value*/ G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_DISCOVER_STUN); param_spec = g_param_spec_string ("stun-server", "STUN server address", "STUN server address (FQDN or IP address)", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_STUN_SERVER); param_spec = g_param_spec_uint ("stun-port", "STUN port", "STUN server port", 0, G_MAXUINT16, RAKIA_DEFAULT_STUN_PORT, /*default value*/ G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_STUN_PORT); param_spec = g_param_spec_boolean ("immutable-streams", "Immutable streams", "Set if additional streams cannot be requested on a media channel," " nor existing streams can be removed", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_IMMUTABLE_STREAMS); param_spec = g_param_spec_string ("local-ip-address", "Local IP address", "Local IP address to use", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_LOCAL_IP_ADDRESS); param_spec = g_param_spec_uint ("local-port", "Local port", "Local port for SIP", 0, G_MAXUINT16, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_LOCAL_PORT); param_spec = g_param_spec_string ("extra-auth-user", "Extra auth username", "Username to use for extra authentication challenges", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_EXTRA_AUTH_USER); param_spec = g_param_spec_string ("extra-auth-password", "Extra auth password", "Password to use for extra authentication challenges", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_EXTRA_AUTH_PASSWORD); param_spec = g_param_spec_boolean ("ignore-tls-errors", "Ignore TLS errors", "If true, the TLS verification errors will be ignored", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); INST_PROP(PROP_IGNORE_TLS_ERRORS); #undef INST_PROP tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (RakiaConnectionClass, properties_class)); } typedef struct { RakiaConnection* self; nua_handle_t *nh; gchar *method; gchar *realm; gchar *user; } PrivHandleAuthData; static PrivHandleAuthData * priv_handle_auth_data_new (RakiaConnection* self, nua_handle_t *nh, const gchar *method, const gchar *realm, const gchar *user) { PrivHandleAuthData *data = g_slice_new (PrivHandleAuthData); data->self = g_object_ref (self); data->nh = nua_handle_ref (nh); data->method = g_strdup (method); data->realm = g_strdup (realm); data->user = g_strdup (user); return data; } static void priv_handle_auth_data_free (PrivHandleAuthData *data) { g_object_unref (data->self); nua_handle_unref (data->nh); g_free (data->method); g_free (data->realm); g_free (data->user); g_slice_free (PrivHandleAuthData, data); } static void priv_password_manager_prompt_cb (GObject *source_object, GAsyncResult *result, gpointer user_data); static void priv_handle_auth_continue (RakiaConnection* self, nua_handle_t *nh, const gchar *method, const gchar *realm, const gchar *user, const gchar *password); static gboolean priv_handle_auth (RakiaConnection* self, int status, nua_handle_t *nh, const sip_t *sip, gboolean home_realm) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); sip_www_authenticate_t const *wa; sip_proxy_authenticate_t const *pa; const char *method = NULL; const char *realm = NULL; const char *user = NULL; const char *password = NULL; if (status != 401 && status != 407) return FALSE; DEBUG("response presents an authentication challenge"); g_return_val_if_fail (sip != NULL, FALSE); wa = sip->sip_www_authenticate; pa = sip->sip_proxy_authenticate; /* step: figure out the realm of the challenge */ if (wa) { realm = msg_header_find_param ((msg_common_t *) wa, "realm="); method = wa->au_scheme; } else if (pa) { realm = msg_header_find_param ((msg_common_t *) pa, "realm="); method = pa->au_scheme; } if (realm == NULL) { WARNING ("no realm presented for authentication"); return FALSE; } if (method == NULL) { WARNING ("no method presented for authentication"); return FALSE; } /* step: determine which set of credentials to use */ if (home_realm) { /* Save the realm presented by the registrar */ if (priv->registrar_realm == NULL) priv->registrar_realm = g_strdup (realm); else if (wa && strcmp(priv->registrar_realm, realm) != 0) { MESSAGE ("registrar realm changed from %s to %s", priv->registrar_realm, realm); g_free (priv->registrar_realm); priv->registrar_realm = g_strdup (realm); } } else if (priv->registrar_realm != NULL && strcmp(priv->registrar_realm, realm) == 0) home_realm = TRUE; if (home_realm) { /* use authentication username if provided */ user = priv->auth_user; password = priv->password; DEBUG("using the primary auth credentials"); } else { if (priv->extra_auth_user) user = priv->extra_auth_user; else /* fall back to the main username */ user = priv->auth_user; password = priv->extra_auth_password; if (password == NULL) /* note that this prevents asking the user for a password */ password = ""; DEBUG("using the extra auth credentials"); } if (user == NULL) { sip_from_t const *sipfrom = sip->sip_from; if (sipfrom && sipfrom->a_url[0].url_user) /* or use the userpart in "From" header */ user = sipfrom->a_url[0].url_user; else return FALSE; } if (password == NULL) { PrivHandleAuthData *data = NULL; DEBUG("asking the user for a password."); data = priv_handle_auth_data_new (self, nh, method, realm, user); tp_simple_password_manager_prompt_async (priv->password_manager, priv_password_manager_prompt_cb, data); /* Promise that we'll handle it eventually, even if we end up just * handling it with a blank password. */ return TRUE; } priv_handle_auth_continue (self, nh, method, realm, user, password); return TRUE; } static void priv_password_manager_prompt_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { PrivHandleAuthData *data = user_data; GError *error = NULL; const GString *password_string; const gchar *password; password_string = tp_simple_password_manager_prompt_finish ( TP_SIMPLE_PASSWORD_MANAGER (source_object), result, &error); if (error != NULL) { /* we promised to handle the auth challenge in priv_handle_auth() by * returning TRUE, so we need to handle it anyway, even if it means * doing it with a blank password. */ DEBUG ("Auth channel failed: %s. Using blank password.", error->message); password = ""; g_error_free (error); } else { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (data->self); password = password_string->str; /* also save it for later. */ g_free (priv->password); priv->password = g_strdup (password); } priv_handle_auth_continue (data->self, data->nh, data->method, data->realm, data->user, password); priv_handle_auth_data_free (data); } static void priv_handle_auth_continue (RakiaConnection* self, nua_handle_t *nh, const gchar *method, const gchar *realm, const gchar *user, const gchar *password) { gchar *auth = NULL; /* step: if all info is available, create an authorization response */ g_assert (realm != NULL); g_assert (method != NULL); g_assert (user != NULL); g_assert (password != NULL); if (realm[0] == '"') auth = g_strdup_printf ("%s:%s:%s:%s", method, realm, user, password); else auth = g_strdup_printf ("%s:\"%s\":%s:%s", method, realm, user, password); DEBUG ("%s-authenticating user='%s' realm=%s", method, user, realm); /* step: authenticate */ nua_authenticate(nh, NUTAG_AUTH(auth), TAG_END()); g_free (auth); } static gboolean rakia_connection_auth_cb (RakiaEventTarget *target, const RakiaNuaEvent *ev, tagi_t tags[], RakiaConnection *self) { return priv_handle_auth (self, ev->status, ev->nua_handle, ev->sip, FALSE); } static void rakia_connection_add_auth_handler (RakiaBaseConnection *self, RakiaEventTarget *target) { g_signal_connect_object (target, "nua-event", G_CALLBACK (rakia_connection_auth_cb), self, 0); } static nua_handle_t * rakia_connection_create_nua_handle (RakiaBaseConnection *base, TpHandle handle) { return rakia_conn_create_request_handle (RAKIA_CONNECTION (base), handle); } static gboolean rakia_connection_nua_r_register_cb (RakiaConnection *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo) { TpBaseConnection *base = (TpBaseConnection *) self; TpConnectionStatus conn_status = TP_CONNECTION_STATUS_DISCONNECTED; TpConnectionStatusReason reason = 0; if (ev->status < 200) return TRUE; if (priv_handle_auth (self, ev->status, ev->nua_handle, ev->sip, TRUE)) return TRUE; switch (ev->status) { case 401: case 403: case 407: case 904: /* XXX: used by the stack to report auth loops */ DEBUG("REGISTER failed, possibly wrong credentials, disconnecting"); conn_status = TP_CONNECTION_STATUS_DISCONNECTED; reason = TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED; break; default: if (ev->status >= 300) { DEBUG("REGISTER failed, disconnecting"); conn_status = TP_CONNECTION_STATUS_DISCONNECTED; reason = TP_CONNECTION_STATUS_REASON_NETWORK_ERROR; } else /* if (ev->status == 200) */ { if (base->status != TP_CONNECTION_STATUS_CONNECTING) return TRUE; DEBUG("successfully registered to the network"); conn_status = TP_CONNECTION_STATUS_CONNECTED; reason = TP_CONNECTION_STATUS_REASON_REQUESTED; rakia_conn_heartbeat_init (self); } } tp_base_connection_change_status (base, conn_status, reason); return TRUE; } static void rakia_connection_shut_down (TpBaseConnection *base) { RakiaConnection *self = RAKIA_CONNECTION (base); RakiaConnectionPrivate *priv; DEBUG ("enter"); priv = RAKIA_CONNECTION_GET_PRIVATE (self); /* We disposed of the REGISTER handle in the disconnected method */ g_assert (priv->register_op == NULL); rakia_conn_heartbeat_shutdown (self); if (priv->sofia_nua != NULL) nua_shutdown (priv->sofia_nua); priv->sofia_nua = NULL; tp_base_connection_finish_shutdown (base); } void rakia_connection_dispose (GObject *object) { RakiaConnection *self = RAKIA_CONNECTION (object); TpBaseConnection *base = (TpBaseConnection *)self; RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); if (priv->dispose_has_run) return; priv->dispose_has_run = TRUE; /* release any references held by the object here */ DEBUG("disposing of RakiaConnection %p", self); /* the base class is responsible for unreffing the self handle when we * disconnect */ g_assert (base->status == TP_CONNECTION_STATUS_DISCONNECTED || base->status == TP_INTERNAL_CONNECTION_STATUS_NEW); /* the base class owns channel factories/managers, * here we just nullify the references */ priv->media_manager = NULL; if (G_OBJECT_CLASS (rakia_connection_parent_class)->dispose) G_OBJECT_CLASS (rakia_connection_parent_class)->dispose (object); } void rakia_connection_finalize (GObject *obj) { RakiaConnection *self = RAKIA_CONNECTION (obj); RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); /* free any data held directly by the object here */ DEBUG("enter"); if (NULL != priv->sofia_resolver) { DEBUG("destroying sofia resolver"); sres_resolver_destroy (priv->sofia_resolver); priv->sofia_resolver = NULL; } su_home_unref (priv->sofia_home); g_free (priv->address); g_free (priv->auth_user); g_free (priv->password); g_free (priv->alias); g_free (priv->transport); g_free (priv->stun_host); g_free (priv->local_ip_address); g_free (priv->extra_auth_user); g_free (priv->extra_auth_password); g_free (priv->registrar_realm); tp_contacts_mixin_finalize (obj); G_OBJECT_CLASS (rakia_connection_parent_class)->finalize (obj); } static gboolean rakia_connection_start_connecting (TpBaseConnection *base, GError **error) { RakiaConnection *self = RAKIA_CONNECTION (base); RakiaBaseConnection *rbase = RAKIA_BASE_CONNECTION (self); RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); TpHandleRepoIface *contact_repo; const gchar *sip_address; const url_t *local_url; su_root_t *root = NULL; g_assert (base->status == TP_INTERNAL_CONNECTION_STATUS_NEW); /* the construct parameters will be non-empty */ g_object_get (self, "sofia-root", &root, NULL); g_assert (root != NULL); g_return_val_if_fail (priv->address != NULL, FALSE); contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); base->self_handle = tp_handle_ensure (contact_repo, priv->address, NULL, error); if (base->self_handle == 0) { return FALSE; } sip_address = tp_handle_inspect(contact_repo, base->self_handle); DEBUG("self_handle = %d, sip_address = %s", base->self_handle, sip_address); priv->account_url = rakia_base_connection_handle_to_uri (rbase, tp_base_connection_get_self_handle (base)); if (priv->account_url == NULL) { g_set_error (error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Failed to create the account URI"); return FALSE; } local_url = rakia_conn_get_local_url (self); /* step: create stack instance */ priv->sofia_nua = nua_create (root, rakia_base_connection_sofia_callback, RAKIA_BASE_CONNECTION (self), SOATAG_AF(SOA_AF_IP4_IP6), SIPTAG_FROM_STR(sip_address), NUTAG_URL(local_url), /* TAG_IF(local_url && local_url->url_type == url_sips, NUTAG_SIPS_URL(local_url)), */ NUTAG_M_USERNAME(priv->account_url->url_user), NUTAG_USER_AGENT(rakia_version_string ()), NUTAG_ENABLEMESSAGE(1), NUTAG_ENABLEINVITE(1), NUTAG_AUTOALERT(0), NUTAG_AUTOANSWER(0), NUTAG_APPL_METHOD("MESSAGE"), SIPTAG_ALLOW_STR("INVITE, ACK, BYE, CANCEL, OPTIONS, PRACK, MESSAGE, UPDATE"), TAG_IF(!priv->ignore_tls_errors, TPTAG_TLS_VERIFY_POLICY(TPTLS_VERIFY_ALL)), TAG_NULL()); if (priv->sofia_nua == NULL) { g_set_error (error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Unable to create SIP stack"); return FALSE; } /* Set configuration-dependent tags */ rakia_conn_update_proxy_and_transport (self); rakia_conn_update_nua_outbound (self); rakia_conn_update_nua_keepalive_interval (self); rakia_conn_update_nua_contact_features (self); if (priv->discover_stun) rakia_conn_discover_stun_server (self); else if (priv->stun_host != NULL) rakia_conn_resolv_stun_server (self, priv->stun_host); DEBUG("initialized a Sofia-SIP NUA at address %p", priv->sofia_nua); /* for debugging purposes, request a dump of stack configuration * at registration time */ nua_get_params (priv->sofia_nua, TAG_ANY(), TAG_NULL()); g_signal_connect (self, "nua-event::nua_r_register", G_CALLBACK (rakia_connection_nua_r_register_cb), NULL); priv->register_op = rakia_conn_create_register_handle (self, base->self_handle); if (priv->register_op == NULL) { g_set_error (error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Unable to create registration handle for address %s", sip_address); return FALSE; } rakia_event_target_attach (priv->register_op, (GObject *) self); nua_register (priv->register_op, TAG_NULL()); return TRUE; } /** * rakia_connection_disconnected * * Called after the connection becomes disconnected. */ static void rakia_connection_disconnected (TpBaseConnection *base) { RakiaConnection *obj = RAKIA_CONNECTION (base); RakiaConnectionPrivate *priv; priv = RAKIA_CONNECTION_GET_PRIVATE (obj); DEBUG("enter"); /* Dispose of the register use */ if (priv->register_op != NULL) { DEBUG("unregistering"); nua_unregister (priv->register_op, TAG_NULL()); nua_handle_unref (priv->register_op); priv->register_op = NULL; } /* we know that RakiaBaseConnection does implement this */ TP_BASE_CONNECTION_CLASS (rakia_connection_parent_class)->disconnected (base); } telepathy-rakia-0.8.0/src/telepathy-rakia.c0000644000175000017500000000447512223047264015557 00000000000000/* * sip-connection.c - Source for RakiaConnection * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2005-2008, 2010 Nokia Corporation * @author Kai Vehmanen * @author Martti Mela * @author Mikhail Zabaluev * * Based on telepathy-gabble implementation (gabble-connection). * @author See gabble.c * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/debug.h" #include "sip-connection-manager.h" #include #include #include static TpBaseConnectionManager * construct_cm (void) { return (TpBaseConnectionManager *)g_object_new ( RAKIA_TYPE_CONNECTION_MANAGER, NULL); } int main (int argc, char** argv) { int status; guint fatal_mask; const gchar *logfile_string; if (!dbus_threads_init_default ()) g_error ("Unable to initialize libdbus thread-safety (out of memory?)"); fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); fatal_mask |= G_LOG_LEVEL_CRITICAL; g_log_set_always_fatal (fatal_mask); #ifdef ENABLE_DEBUG rakia_debug_set_flags_from_env (); #endif if (g_getenv ("RAKIA_PERSIST") || g_getenv ("TPSIP_PERSIST")) { tp_debug_set_persistent (TRUE); } logfile_string = g_getenv ("RAKIA_LOGFILE"); if (logfile_string == NULL) logfile_string = g_getenv ("TPSIP_LOGFILE"); tp_debug_divert_messages (logfile_string); tp_debug_divert_messages (logfile_string); status = tp_run_connection_manager ("telepathy-rakia", VERSION, construct_cm, argc, argv); return status; } telepathy-rakia-0.8.0/src/sip-connection-manager.c0000644000175000017500000001032012223047264017015 00000000000000/* * sip-connection-manager.c - Source for RakiaConnectionManager * Copyright (C) 2005-2007 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * @author Kai Vehmanen * @author Martti Mela * @author Mikhail Zabaluev * * Based on telepathy-gabble implementation (gabble-connection-manager). * @author See gabble-connection-manager.c * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include #include #include #include #include "protocol.h" #include "sip-connection-manager.h" #include "sip-connection.h" #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" G_DEFINE_TYPE(RakiaConnectionManager, rakia_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) struct _RakiaConnectionManagerPrivate { su_root_t *sofia_root; TpDebugSender *debug_sender; }; #define RAKIA_CONNECTION_MANAGER_GET_PRIVATE(obj) ((obj)->priv) static void rakia_connection_manager_init (RakiaConnectionManager *obj) { RakiaConnectionManagerPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (obj, RAKIA_TYPE_CONNECTION_MANAGER, RakiaConnectionManagerPrivate); GSource *source; obj->priv = priv; priv->debug_sender = tp_debug_sender_dup (); g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN); su_log_redirect (NULL, rakia_sofia_log_handler, NULL); priv->sofia_root = su_glib_root_create(obj); su_root_threading(priv->sofia_root, 0); source = su_glib_root_gsource(priv->sofia_root); g_source_attach(source, NULL); #ifdef HAVE_LIBIPHB su_root_set_max_defer (priv->sofia_root, RAKIA_DEFER_TIMEOUT * 1000L); #endif } static void rakia_connection_manager_constructed (GObject *object) { RakiaConnectionManager *self = RAKIA_CONNECTION_MANAGER (object); TpBaseConnectionManager *base = (TpBaseConnectionManager *) self; void (*constructed) (GObject *) = ((GObjectClass *) rakia_connection_manager_parent_class)->constructed; TpBaseProtocol *protocol; if (constructed != NULL) constructed (object); protocol = rakia_protocol_new (self->priv->sofia_root); tp_base_connection_manager_add_protocol (base, protocol); g_object_unref (protocol); } static void rakia_connection_manager_finalize (GObject *object); static void rakia_connection_manager_class_init (RakiaConnectionManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *)klass; g_type_class_add_private (klass, sizeof (RakiaConnectionManagerPrivate)); object_class->constructed = rakia_connection_manager_constructed; object_class->finalize = rakia_connection_manager_finalize; base_class->cm_dbus_name = "sofiasip"; } void rakia_connection_manager_finalize (GObject *object) { RakiaConnectionManager *self = RAKIA_CONNECTION_MANAGER (object); RakiaConnectionManagerPrivate *priv = RAKIA_CONNECTION_MANAGER_GET_PRIVATE (self); GSource *source; source = su_glib_root_gsource(priv->sofia_root); g_source_destroy(source); su_root_destroy(priv->sofia_root); rakia_debug_free (); if (priv->debug_sender != NULL) { g_object_unref (priv->debug_sender); priv->debug_sender = NULL; } G_OBJECT_CLASS (rakia_connection_manager_parent_class)->finalize (object); } telepathy-rakia-0.8.0/src/protocol.c0000644000175000017500000003670012223047264014330 00000000000000/* * protocol.c - source for RakiaProtocol * Copyright (C) 2007-2010 Collabora Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "protocol.h" #include #include #include #include #include #include #include #include #include #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" #include "sip-connection.h" #include "sip-connection-helpers.h" #define PROTOCOL_NAME "sip" #define ICON_NAME "im-" PROTOCOL_NAME #define VCARD_FIELD_NAME "x-" PROTOCOL_NAME #define ENGLISH_NAME "SIP" G_DEFINE_TYPE (RakiaProtocol, rakia_protocol, TP_TYPE_BASE_PROTOCOL) enum { PROP_SOFIA_ROOT = 1, }; struct _RakiaProtocolPrivate { su_root_t *sofia_root; }; /* Used in the otherwise-unused offset field of the TpCMParamSpec. The first * one is nonzero to catch implicit zero-initialization. */ enum { PARAM_EASY = 1, PARAM_SET_SEPARATELY }; static TpCMParamSpec rakia_params[] = { /* Account (a sip: URI) * * FIXME: validate account SIP URI properly, using appropriate RFCs */ { "account", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER, NULL, PARAM_SET_SEPARATELY, tp_cm_param_filter_string_nonempty, NULL }, /* Username to register with, if different than in the account URI */ { "auth-user", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_EASY }, /* Password */ { "password", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_SECRET, NULL, PARAM_EASY }, /* Display name for self */ { "alias", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_EASY, /* setting a 0-length alias makes no sense */ tp_cm_param_filter_string_nonempty, NULL }, /* Registrar */ { "registrar", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_EASY }, /* Used to compose proxy URI */ { "proxy-host", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_SET_SEPARATELY }, { "port", DBUS_TYPE_UINT16_AS_STRING, G_TYPE_UINT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER(SIP_DEFAULT_PORT), PARAM_SET_SEPARATELY, tp_cm_param_filter_uint_nonzero }, { "transport", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, "auto", PARAM_SET_SEPARATELY }, /* Enables loose routing as per RFC 3261 */ { "loose-routing", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER(FALSE), PARAM_EASY }, /* Used to enable proactive NAT traversal techniques */ { "discover-binding", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER(TRUE), PARAM_EASY }, /* Mechanism used for connection keepalive maintenance */ { "keepalive-mechanism", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, "auto", PARAM_SET_SEPARATELY }, /* Keep-alive interval */ { "keepalive-interval", DBUS_TYPE_UINT32_AS_STRING, G_TYPE_UINT, 0, NULL, PARAM_EASY }, /* Use SRV DNS lookup to discover STUN server for media NAT traversal * (defaults to true unless stun-server is set) */ { "discover-stun", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN, 0, NULL, PARAM_SET_SEPARATELY }, /* STUN server for media NAT traversal */ { "stun-server", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_SET_SEPARATELY }, /* STUN port */ { "stun-port", DBUS_TYPE_UINT16_AS_STRING, G_TYPE_UINT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER(RAKIA_DEFAULT_STUN_PORT), PARAM_EASY, tp_cm_param_filter_uint_nonzero }, /* If the session content cannot be modified once initially set up */ { "immutable-streams", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER(FALSE), PARAM_EASY }, /* Local IP address to use, workaround purposes only */ { "local-ip-address", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_EASY }, /* Local port for SIP, workaround purposes only */ { "local-port", DBUS_TYPE_UINT16_AS_STRING, G_TYPE_UINT, 0, NULL, PARAM_EASY }, /* Extra-realm authentication */ { "extra-auth-user", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, PARAM_EASY }, { "extra-auth-password", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_SECRET, NULL, PARAM_EASY }, /* If true, TLS validation errors will be ignored */ { "ignore-tls-errors", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER(FALSE), PARAM_EASY }, { NULL } }; static void rakia_protocol_init (RakiaProtocol *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_PROTOCOL, RakiaProtocolPrivate); } static const TpCMParamSpec * get_parameters (TpBaseProtocol *self G_GNUC_UNUSED) { return rakia_params; } static RakiaConnectionKeepaliveMechanism priv_parse_keepalive (const gchar *str) { if (str == NULL || strcmp (str, "auto") == 0) return RAKIA_CONNECTION_KEEPALIVE_AUTO; if (strcmp (str, "register") == 0) return RAKIA_CONNECTION_KEEPALIVE_REGISTER; if (strcmp (str, "options") == 0) return RAKIA_CONNECTION_KEEPALIVE_OPTIONS; if (strcmp (str, "stun") == 0) return RAKIA_CONNECTION_KEEPALIVE_STUN; if (strcmp (str, "off") == 0) return RAKIA_CONNECTION_KEEPALIVE_NONE; WARNING ("unsupported keepalive-method value \"%s\", falling back to auto", str); return RAKIA_CONNECTION_KEEPALIVE_AUTO; } static gchar * priv_compose_proxy_uri (const gchar *host, const gchar *transport, guint port) { const gchar *scheme = "sip"; if (host == NULL) return NULL; /* Set scheme to SIPS if transport is TLS */ if (transport != NULL && !g_ascii_strcasecmp (transport, "tls")) scheme = "sips"; /* Format the resulting URI */ if (port) return g_strdup_printf ("%s:%s:%u", scheme, host, port); else return g_strdup_printf ("%s:%s", scheme, host); } /** * Returns a default SIP proxy address based on the public * SIP address 'sip_address' and . For instance * "sip:first.surname@company.com" would result in "sip:company.com". * The SIP stack will further utilize DNS lookups to find the IP address * for the SIP server responsible for the domain "company.com". */ static gchar * priv_compose_default_proxy_uri (const gchar *sip_address, const gchar *transport) { char *result = NULL; char *host; char *found; g_return_val_if_fail (sip_address != NULL, NULL); /* skip sip and sips prefixes, updating transport if necessary */ found = strchr (sip_address, ':'); if (found != NULL) { if (g_ascii_strncasecmp ("sip:", sip_address, 4) == 0) ; else if (g_ascii_strncasecmp ("sips:", sip_address, 5) == 0) { if (transport == NULL || strcmp (transport, "auto") == 0) transport = "tls"; } else { /* error, unknown URI prefix */ return NULL; } sip_address = found + 1; } /* skip userinfo */ found = strchr (sip_address, '@'); if (found != NULL) sip_address = found + 1; /* copy rest of the string */ host = g_strdup (sip_address); /* mark end (before uri-parameters defs or headers) */ found = strchr (host, ';'); if (found == NULL) found = strchr (host, '?'); if (found != NULL) *found = '\0'; result = priv_compose_proxy_uri (host, transport, 0); g_free (host); return result; } static TpBaseConnection * new_connection (TpBaseProtocol *protocol, GHashTable *params, GError **error) { RakiaProtocol *self = RAKIA_PROTOCOL (protocol); RakiaConnection *conn; guint i; const gchar *account; const gchar *transport; const gchar *proxy_host; guint16 port; gboolean discover_stun; gboolean discover_stun_valid; const gchar *stun_server; gchar *proxy; RakiaConnectionKeepaliveMechanism keepalive_mechanism; account = tp_asv_get_string (params, "account"); transport = tp_asv_get_string (params, "transport"); port = tp_asv_get_uint32 (params, "port", NULL); conn = g_object_new (RAKIA_TYPE_CONNECTION, "protocol", PROTOCOL_NAME, "sofia-root", self->priv->sofia_root, "address", account, NULL); proxy_host = tp_asv_get_string (params, "proxy-host"); if (tp_str_empty (proxy_host)) { proxy = priv_compose_default_proxy_uri (account, transport); DEBUG("set outbound proxy address to <%s>, based on <%s>", proxy, account); } else { proxy = priv_compose_proxy_uri (proxy_host, transport, port); } g_object_set (conn, "proxy", proxy, NULL); g_free (proxy); if (!tp_str_empty (transport) && tp_strdiff (transport, "auto")) g_object_set (conn, "transport", transport, NULL); discover_stun = tp_asv_get_boolean (params, "discover-stun", &discover_stun_valid); stun_server = tp_asv_get_string (params, "stun-server"); if (!discover_stun_valid && stun_server == NULL) discover_stun = TRUE; g_object_set (conn, "discover-stun", discover_stun, "stun-server", stun_server, NULL); for (i = 0; rakia_params[i].name != NULL; i++) { if (rakia_params[i].offset == PARAM_SET_SEPARATELY) { DEBUG ("Parameter %s is handled specially", rakia_params[i].name); continue; } g_assert (rakia_params[i].offset == PARAM_EASY); switch (rakia_params[i].gtype) { case G_TYPE_STRING: { const gchar *s = tp_asv_get_string (params, rakia_params[i].name); if (!tp_str_empty (s)) g_object_set (conn, rakia_params[i].name, s, NULL); } break; case G_TYPE_UINT: { gboolean valid = FALSE; guint u = tp_asv_get_uint32 (params, rakia_params[i].name, &valid); if (valid) g_object_set (conn, rakia_params[i].name, u, NULL); } break; case G_TYPE_BOOLEAN: { gboolean valid = FALSE; gboolean b = tp_asv_get_boolean (params, rakia_params[i].name, &valid); if (valid) g_object_set (conn, rakia_params[i].name, b, NULL); } break; default: /* no other parameters have been written yet */ g_assert_not_reached (); } } keepalive_mechanism = priv_parse_keepalive (tp_asv_get_string (params, "keepalive-mechanism")); g_object_set (conn, "keepalive-mechanism", keepalive_mechanism, NULL); return TP_BASE_CONNECTION (conn); } static gchar * normalize_contact (TpBaseProtocol *self G_GNUC_UNUSED, const gchar *contact, GError **error) { return rakia_normalize_contact (contact, NULL, NULL, error); } static gchar * identify_account (TpBaseProtocol *self G_GNUC_UNUSED, GHashTable *asv, GError **error) { const gchar *account = tp_asv_get_string (asv, "account"); g_assert (account != NULL); return g_strdup (account); } static GStrv get_interfaces (TpBaseProtocol *self) { return g_new0 (gchar *, 1); } static void get_connection_details (TpBaseProtocol *self, GStrv *connection_interfaces, GType **channel_managers, gchar **icon_name, gchar **english_name, gchar **vcard_field) { if (connection_interfaces != NULL) { *connection_interfaces = g_strdupv ( (GStrv) rakia_connection_get_implemented_interfaces ()); } if (channel_managers != NULL) { GType types[] = { RAKIA_TYPE_TEXT_MANAGER, RAKIA_TYPE_MEDIA_MANAGER, G_TYPE_INVALID }; *channel_managers = g_memdup (types, sizeof(types)); } if (icon_name != NULL) { *icon_name = g_strdup (ICON_NAME); } if (vcard_field != NULL) { *vcard_field = g_strdup (VCARD_FIELD_NAME); } if (english_name != NULL) { *english_name = g_strdup (ENGLISH_NAME); } } static GStrv dup_authentication_types (TpBaseProtocol *base) { const gchar * const types[] = { TP_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION, NULL }; return g_strdupv ((GStrv) types); } static void rakia_protocol_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaProtocol *self = RAKIA_PROTOCOL (object); switch (property_id) { case PROP_SOFIA_ROOT: g_value_set_pointer (value, self->priv->sofia_root); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_protocol_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaProtocol *self = RAKIA_PROTOCOL (object); switch (property_id) { case PROP_SOFIA_ROOT: self->priv->sofia_root = g_value_get_pointer (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_protocol_class_init (RakiaProtocolClass *klass) { TpBaseProtocolClass *base_class = (TpBaseProtocolClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (RakiaProtocolPrivate)); base_class->get_parameters = get_parameters; base_class->new_connection = new_connection; base_class->normalize_contact = normalize_contact; base_class->identify_account = identify_account; base_class->get_interfaces = get_interfaces; base_class->get_connection_details = get_connection_details; base_class->dup_authentication_types = dup_authentication_types; object_class->get_property = rakia_protocol_get_property; object_class->set_property = rakia_protocol_set_property; param_spec = g_param_spec_pointer ("sofia-root", "Sofia-SIP root", "the root object for Sofia-SIP", G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SOFIA_ROOT, param_spec); } TpBaseProtocol * rakia_protocol_new (su_root_t *sofia_root) { return g_object_new (RAKIA_TYPE_PROTOCOL, "name", PROTOCOL_NAME, "sofia-root", sofia_root, NULL); } telepathy-rakia-0.8.0/src/Makefile.am0000644000175000017500000000653512223047264014362 00000000000000# # Makefile.am for telepathy-rakia/src # # Copyright (C) 2006-2009 Nokia Corporation # Contact: Mikhail Zabaluev # Licensed under LGPL. See file COPYING. # # ---------------------------------------------------------------------- # Automake options managerdir = $(datadir)/telepathy/managers # ---------------------------------------------------------------------- # Headers and libraries AM_CPPFLAGS = $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(SOFIA_SIP_UA_CFLAGS) \ $(TELEPATHY_GLIB_CFLAGS) $(IPHB_CFLAGS) \ -I$(top_builddir) -I$(top_srcdir) \ -DG_LOG_DOMAIN=\"rakia\" AM_CFLAGS = $(ERROR_CFLAGS) $(COVERAGE_CFLAGS) AM_LDFLAGS = $(ERROR_LDFLAGS) ALL_LIBS = $(DBUS_LIBS) $(GLIB_LIBS) $(SOFIA_SIP_UA_LIBS) \ $(TELEPATHY_GLIB_LIBS) $(IPHB_LIBS) # ---------------------------------------------------------------------- # Build targets libexec_PROGRAMS = telepathy-rakia manager_DATA = rakia.manager noinst_PROGRAMS = write-mgr-file noinst_LTLIBRARIES = librakia-convenience.la # ---------------------------------------------------------------------- # Tests # ---------------------------------------------------------------------- # Rules for building the targets # rules for makeing the glib enum objects %-enumtypes.h: %.h glib-mkenums \ --fhead "#ifndef __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__\n#define __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__\n\n#include \n\nG_BEGIN_DECLS\n" \ --fprod "/* enumerations from \"@filename@\" */\n" \ --vhead "GType @enum_name@_get_type (void);\n#define RAKIA_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ --ftail "G_END_DECLS\n\n#endif /* __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__ */" \ $< > $@ || rm -f $@ %-enumtypes.c: %.h glib-mkenums \ --fhead "#include <$*-enumtypes.h>\n#include <$*.h>" \ --fprod "\n/* enumerations from \"@filename@\" */" \ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ $< > $@ || rm -f $@ rakia.manager: write-mgr-file if ./write-mgr-file > $@.tmp; then \ mv -f $@.tmp $@;\ else \ rm -f $@.tmp; \ fi BUILT_SOURCES = \ sip-connection-enumtypes.h \ sip-connection-enumtypes.c librakia_convenience_la_SOURCES = \ sip-connection.h \ sip-connection.c \ sip-connection-manager.h \ sip-connection-manager.c \ protocol.h \ protocol.c \ sip-connection-helpers.h \ sip-connection-helpers.c \ sip-connection-private.h nodist_librakia_convenience_la_SOURCES = \ $(BUILT_SOURCES) librakia_convenience_la_LIBADD = \ $(top_builddir)/rakia/librakia.la \ $(top_builddir)/extensions/librakia-extensions.la telepathy_rakia_SOURCES = \ telepathy-rakia.c telepathy_rakia_LDADD = librakia-convenience.la $(ALL_LIBS) write_mgr_file_SOURCES = \ write-mgr-file.c write_mgr_file_LDADD = librakia-convenience.la $(ALL_LIBS) # ---------------------------------------------------------------------- # Install and distribution rules # Correctly clean the generated headers, but keep the xml description CLEANFILES = $(BUILT_SOURCES) $(manager_DATA) CLEANFILES += *.gcda *.gcno telepathy-rakia-0.8.0/src/sip-connection.h0000644000175000017500000000551112223047264015420 00000000000000/* * sip-connection.h - Header for RakiaConnection * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CONNECTION_H__ #define __RAKIA_CONNECTION_H__ #include #include #include G_BEGIN_DECLS typedef enum { RAKIA_CONNECTION_KEEPALIVE_AUTO = 0, /** Keepalive management is up to the implementation */ RAKIA_CONNECTION_KEEPALIVE_NONE, /** Disable keepalive management */ RAKIA_CONNECTION_KEEPALIVE_REGISTER, /** Maintain registration with REGISTER requests */ RAKIA_CONNECTION_KEEPALIVE_OPTIONS, /** Maintain registration with OPTIONS requests */ RAKIA_CONNECTION_KEEPALIVE_STUN, /** Maintain registration with STUN as described in IETF draft-sip-outbound */ } RakiaConnectionKeepaliveMechanism; typedef struct _RakiaConnection RakiaConnection; typedef struct _RakiaConnectionClass RakiaConnectionClass; typedef struct _RakiaConnectionPrivate RakiaConnectionPrivate; struct _RakiaConnectionClass { RakiaBaseConnectionClass parent_class; TpDBusPropertiesMixinClass properties_class; }; struct _RakiaConnection { RakiaBaseConnection parent; }; /* TYPE MACROS */ #define RAKIA_TYPE_CONNECTION \ (rakia_connection_get_type()) #define RAKIA_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_CONNECTION, RakiaConnection)) #define RAKIA_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_CONNECTION, RakiaConnectionClass)) #define RAKIA_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_CONNECTION)) #define RAKIA_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_CONNECTION)) #define RAKIA_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_CONNECTION, RakiaConnectionClass)) GType rakia_connection_get_type (void) G_GNUC_CONST; void rakia_connection_connect_auth_handler (RakiaConnection *self, RakiaEventTarget *target); const gchar **rakia_connection_get_implemented_interfaces (void); G_END_DECLS #endif /* #ifndef __RAKIA_CONNECTION_H__*/ telepathy-rakia-0.8.0/src/sip-connection-helpers.h0000644000175000017500000000503712223047264017063 00000000000000/* * sip-connection-helpers.h - Helper routines used by RakiaConnection * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CONNECTION_HELPERS_H__ #define __RAKIA_CONNECTION_HELPERS_H__ #include #include "sip-connection.h" #include G_BEGIN_DECLS /*********************************************************************** * Functions for accessing Sofia-SIP interface handles ***********************************************************************/ nua_handle_t *rakia_conn_create_register_handle (RakiaConnection *conn, TpHandle contact); nua_handle_t *rakia_conn_create_request_handle (RakiaConnection *conn, TpHandle contact); /*********************************************************************** * Functions for managing NUA outbound/keepalive parameters and STUN settings ***********************************************************************/ const url_t * rakia_conn_get_local_url (RakiaConnection *conn); void rakia_conn_update_proxy_and_transport (RakiaConnection *conn); void rakia_conn_update_nua_outbound (RakiaConnection *conn); void rakia_conn_update_nua_keepalive_interval (RakiaConnection *conn); void rakia_conn_update_nua_contact_features (RakiaConnection *conn); void rakia_conn_update_stun_server (RakiaConnection *conn); void rakia_conn_resolv_stun_server (RakiaConnection *conn, const gchar *stun_host); void rakia_conn_discover_stun_server (RakiaConnection *conn); /*********************************************************************** * Heartbeat management for keepalives ***********************************************************************/ void rakia_conn_heartbeat_init (RakiaConnection *self); void rakia_conn_heartbeat_shutdown (RakiaConnection *self); G_END_DECLS #endif /* #ifndef __RAKIA_CONNECTION_HELPERS_H__*/ telepathy-rakia-0.8.0/src/sip-connection-helpers.c0000644000175000017500000005520112223047264017054 00000000000000/* * sip-connection-helpers.c - Helper routines used by RakiaConnection * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2006-2009 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #include #include #include #include #include "sip-connection-helpers.h" #include #include #include #include "sip-connection-private.h" #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" /* Default keepalive timeout in seconds, * a value obtained from Sofia-SIP documentation */ #define RAKIA_CONNECTION_DEFAULT_KEEPALIVE_INTERVAL 120 /* The user is not allowed to set keepalive timeout to lower than that, * to avoid wasting traffic and device power */ #define RAKIA_CONNECTION_MINIMUM_KEEPALIVE_INTERVAL 30 /* The user is not allowed to set keepalive timeout to lower than that * for REGISTER keepalives, to avoid wasting traffic and device power. * REGISTER is special because it may tie resources on the server side */ #define RAKIA_CONNECTION_MINIMUM_KEEPALIVE_INTERVAL_REGISTER 50 static sip_to_t * priv_sip_to_url_make (RakiaConnection *conn, su_home_t *home, TpHandle contact) { const url_t *url; url = rakia_base_connection_handle_to_uri ( (RakiaBaseConnection *) conn, contact); return sip_to_create (home, (const url_string_t *) url); } static sip_from_t * priv_sip_from_url_make (RakiaConnection *conn, su_home_t *home) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); sip_from_t *from; gchar *alias = NULL; from = sip_from_create (home, (const url_string_t *) priv->account_url); if (from == NULL) return NULL; g_object_get (conn, "alias", &alias, NULL); if (alias != NULL) { gchar *alias_quoted; /* Make the alias into a quoted string, escaping all characters * that cannot go verbatim into a quoted string */ alias_quoted = rakia_quote_string (alias); g_free (alias); from->a_display = su_strdup (home, alias_quoted); g_free (alias_quoted); } return from; } nua_handle_t * rakia_conn_create_register_handle (RakiaConnection *conn, TpHandle contact) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); nua_handle_t *result = NULL; su_home_t temphome[1] = { SU_HOME_INIT(temphome) }; sip_to_t *to; g_assert (priv->sofia_home != NULL); g_assert (priv->sofia_nua != NULL); to = priv_sip_to_url_make (conn, temphome, contact); if (to) result = nua_handle (priv->sofia_nua, NULL, SIPTAG_TO(to), TAG_END()); su_home_deinit (temphome); return result; } nua_handle_t * rakia_conn_create_request_handle (RakiaConnection *conn, TpHandle contact) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); nua_handle_t *result = NULL; su_home_t temphome[1] = { SU_HOME_INIT(temphome) }; sip_from_t *from; sip_to_t *to; g_assert (priv->sofia_home != NULL); g_assert (priv->sofia_nua != NULL); to = priv_sip_to_url_make (conn, temphome, contact); from = priv_sip_from_url_make (conn, temphome); if (to != NULL && from != NULL) result = nua_handle (priv->sofia_nua, NULL, NUTAG_URL(to->a_url), SIPTAG_TO(to), SIPTAG_FROM(from), TAG_END()); su_home_deinit (temphome); return result; } void rakia_conn_update_proxy_and_transport (RakiaConnection *conn) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); if (priv->proxy_url != NULL) { su_home_t temphome[1] = { SU_HOME_INIT(temphome) }; sip_route_t *route = NULL; const char *params = NULL; if (priv->loose_routing) { url_t *route_url; route_url = url_hdup (temphome, priv->proxy_url); g_return_if_fail (route_url != NULL); if (!url_has_param (route_url, "lr")) url_param_add (temphome, route_url, "lr"); route = sip_route_create (temphome, route_url, NULL); } if (priv->transport != NULL && priv->proxy_url->url_type == url_sip) { if (g_ascii_strcasecmp (priv->transport, "tcp") == 0) params = "transport=tcp"; else if (g_ascii_strcasecmp (priv->transport, "udp") == 0) params = "transport=udp"; else WARNING ("unrecognized transport parameter value: %s", priv->transport); } nua_set_params (priv->sofia_nua, TAG_IF(route, NUTAG_INITIAL_ROUTE(route)), TAG_IF(!priv->loose_routing, NUTAG_PROXY(priv->proxy_url)), TAG_IF(params, NUTAG_M_PARAMS(params)), TAG_NULL()); su_home_deinit (temphome); } } const url_t * rakia_conn_get_local_url (RakiaConnection *conn) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); url_t *url; url = url_make (priv->sofia_home, "sip:*:*"); if (url == NULL) return NULL; if (priv->proxy_url != NULL) { url->url_type = priv->proxy_url->url_type; } else { g_assert (priv->account_url != NULL); url->url_type = priv->account_url->url_type; } if (priv->local_ip_address == NULL) url->url_host = "0"; else url->url_host = priv->local_ip_address; if (priv->local_port == 0) url->url_port = "*"; else url->url_port = su_sprintf (priv->sofia_home, "%u", priv->local_port); if (url->url_type == url_sip && priv->transport != NULL) { if (!g_ascii_strcasecmp(priv->transport, "udp")) url->url_params = "transport=udp"; else if (!g_ascii_strcasecmp(priv->transport, "tcp")) url->url_params = "transport=tcp"; } /* url_sanitize (url); -- we're always sane B-] */ DEBUG("local binding expressed as <" URL_PRINT_FORMAT ">", URL_PRINT_ARGS(url)); return url; } static GHashTable* priv_nua_get_outbound_options (nua_t* nua) { const char* outbound = NULL; GHashTable* option_table; gchar** options; gchar* token; gboolean value; int i; option_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); nua_get_params (nua, NUTAG_OUTBOUND_REF(outbound), TAG_END()); if (outbound == NULL) return option_table; DEBUG ("got outbound options %s", outbound); options = g_strsplit_set (outbound, " ", 0); for (i = 0; (token = options[i]) != NULL; i++) { value = TRUE; /* Look for the negation prefixes */ if (g_ascii_strncasecmp (token, "no", 2) == 0) switch (token[2]) { case '-': case '_': token += 3; value = FALSE; break; case 'n': case 'N': switch (token[3]) { case '-': case '_': token += 4; value = FALSE; break; } break; } g_hash_table_insert (option_table, g_strdup (token), GINT_TO_POINTER(value)); } g_strfreev (options); return option_table; } static void priv_nua_outbound_vectorize_walk (gpointer key, gpointer value, gpointer user_data) { gchar ***pstrv = (gchar ***)user_data; const gchar *option = (const gchar *)key; *(*pstrv)++ = (value)? g_strdup (option) : g_strdup_printf ("no-%s", option); } static void priv_nua_set_outbound_options (nua_t* nua, GHashTable* option_table) { gchar* outbound; gchar** options; gchar** walker; /* construct the option string array */ options = g_new(gchar*, g_hash_table_size (option_table) + 1); /* fill the array with option tokens and terminate with NULL */ walker = options; g_hash_table_foreach (option_table, priv_nua_outbound_vectorize_walk, &walker); *walker = NULL; /* concatenate all tokens into a string */ outbound = g_strjoinv (" ", options); g_strfreev (options); g_assert (outbound != NULL); /* deliver the option string to the stack */ DEBUG ("setting outbound options %s", outbound); nua_set_params (nua, NUTAG_OUTBOUND(outbound), TAG_NULL()); g_free (outbound); } void rakia_conn_update_nua_outbound (RakiaConnection *conn) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); GHashTable *option_table; g_return_if_fail (priv->sofia_nua != NULL); option_table = priv_nua_get_outbound_options (priv->sofia_nua); /* Purge existing occurrences of the affected options */ g_hash_table_remove (option_table, "options-keepalive"); /* Set options that affect keepalive behavior */ switch (priv->keepalive_mechanism) { case RAKIA_CONNECTION_KEEPALIVE_NONE: case RAKIA_CONNECTION_KEEPALIVE_REGISTER: /* For REGISTER keepalives, we use NUTAG_M_FEATURES */ g_hash_table_insert (option_table, g_strdup ("options-keepalive"), GINT_TO_POINTER(FALSE)); break; case RAKIA_CONNECTION_KEEPALIVE_OPTIONS: g_hash_table_insert (option_table, g_strdup ("options-keepalive"), GINT_TO_POINTER(TRUE)); break; case RAKIA_CONNECTION_KEEPALIVE_STUN: /* Not supported */ break; case RAKIA_CONNECTION_KEEPALIVE_AUTO: default: break; } g_hash_table_insert (option_table, g_strdup ("natify"), GINT_TO_POINTER(priv->discover_binding)); g_hash_table_insert (option_table, g_strdup ("use-rport"), GINT_TO_POINTER(priv->discover_binding)); /* Hand options back to the NUA */ priv_nua_set_outbound_options (priv->sofia_nua, option_table); g_hash_table_unref (option_table); } static void priv_sanitize_keepalive_interval (RakiaConnectionPrivate *priv) { guint minimum_interval; if (priv->keepalive_interval != 0) { minimum_interval = (priv->keepalive_mechanism == RAKIA_CONNECTION_KEEPALIVE_REGISTER) ? RAKIA_CONNECTION_MINIMUM_KEEPALIVE_INTERVAL_REGISTER : RAKIA_CONNECTION_MINIMUM_KEEPALIVE_INTERVAL; if (priv->keepalive_interval < minimum_interval) { WARNING ("keepalive interval is too low, pushing to %u", minimum_interval); priv->keepalive_interval = minimum_interval; } } } void rakia_conn_update_nua_keepalive_interval (RakiaConnection *conn) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); long keepalive_interval; if (!priv->keepalive_interval_specified) return; if (priv->keepalive_mechanism == RAKIA_CONNECTION_KEEPALIVE_NONE) keepalive_interval = 0; else { priv_sanitize_keepalive_interval (priv); keepalive_interval = (long) priv->keepalive_interval; } keepalive_interval *= 1000; DEBUG("setting keepalive interval to %ld msec", keepalive_interval); nua_set_params (priv->sofia_nua, NUTAG_KEEPALIVE(keepalive_interval), TPTAG_KEEPALIVE(keepalive_interval), TAG_NULL()); } void rakia_conn_update_nua_contact_features (RakiaConnection *conn) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); char *contact_features; guint timeout; if (priv->keepalive_mechanism != RAKIA_CONNECTION_KEEPALIVE_REGISTER) return; if (priv->keepalive_interval == 0) return; priv_sanitize_keepalive_interval (priv); timeout = priv->keepalive_interval_specified ? priv->keepalive_interval : RAKIA_CONNECTION_DEFAULT_KEEPALIVE_INTERVAL; contact_features = g_strdup_printf ("expires=%u", timeout); nua_set_params(priv->sofia_nua, NUTAG_M_FEATURES(contact_features), TAG_NULL()); g_free (contact_features); } static void rakia_conn_set_stun_server_address (RakiaConnection *conn, const gchar *address) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); g_return_if_fail (priv->media_manager != NULL); g_object_set (priv->media_manager, "stun-server", address, "stun-port", priv->stun_port, NULL); } static void priv_stun_resolver_cb (sres_context_t *ctx, sres_query_t *query, sres_record_t **answers) { RakiaConnection *conn = RAKIA_CONNECTION (ctx); RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); sres_a_record_t *ans = NULL; if (NULL != answers) { int i; GPtrArray *items = g_ptr_array_sized_new (1); for (i = 0; NULL != answers[i]; i++) { if ((0 == answers[i]->sr_record->r_status) && (sres_type_a == answers[i]->sr_record->r_type)) { g_ptr_array_add (items, answers[i]->sr_a); } } if (items->len > 0) { ans = g_ptr_array_index (items, g_random_int_range (0, items->len)); } g_ptr_array_unref (items); } if (NULL != ans) rakia_conn_set_stun_server_address (conn, inet_ntoa (ans->a_addr)); else MESSAGE ("could not resolve STUN server address, ignoring"); sres_free_answers (priv->sofia_resolver, answers); } void rakia_conn_resolv_stun_server (RakiaConnection *conn, const gchar *stun_host) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); struct in_addr test_addr; if (stun_host == NULL) { rakia_conn_set_stun_server_address (conn, NULL); return; } /* FIXME: support IPv6 as well */ if (inet_aton (stun_host, &test_addr)) { rakia_conn_set_stun_server_address (conn, stun_host); return; } if (NULL == priv->sofia_resolver) { su_root_t *root = NULL; g_object_get (conn, "sofia-root", &root, NULL); priv->sofia_resolver = sres_resolver_create (root, NULL, TAG_END()); g_return_if_fail (priv->sofia_resolver != NULL); } DEBUG("creating a new resolver query for STUN host name %s", stun_host); sres_query (priv->sofia_resolver, priv_stun_resolver_cb, (sres_context_t *) conn, sres_type_a, stun_host); } static void priv_stun_discover_cb (sres_context_t *ctx, sres_query_t *query, sres_record_t **answers) { RakiaConnection *conn = RAKIA_CONNECTION (ctx); RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); sres_srv_record_t *sel = NULL; guint n_sel_items = 0; guint i; if (answers == NULL) return; for (i = 0; NULL != answers[i]; i++) { if (answers[i]->sr_record->r_status != 0) continue; if (G_UNLIKELY (answers[i]->sr_record->r_type != sres_type_srv)) continue; if (sel == NULL || (answers[i]->sr_srv->srv_priority < sel->srv_priority)) { sel = answers[i]->sr_srv; n_sel_items = 1; } else if (answers[i]->sr_srv->srv_priority == sel->srv_priority) { n_sel_items++; } } if (n_sel_items > 1) { /* Random selection procedure as recommended in RFC 2782 */ GArray *items = g_array_sized_new (FALSE, TRUE, sizeof (sres_srv_record_t *), n_sel_items); int sum = 0; int dice; sres_srv_record_t *rec; g_assert (sel != NULL); for (i = 0; NULL != answers[i]; i++) { if (answers[i]->sr_record->r_status != 0) continue; if (G_UNLIKELY (answers[i]->sr_record->r_type != sres_type_srv)) continue; rec = answers[i]->sr_srv; if (rec->srv_priority != sel->srv_priority) continue; if (rec->srv_weight == 0) g_array_prepend_val (items, rec); else g_array_append_val (items, rec); } g_assert (n_sel_items == items->len); for (i = 0; i < n_sel_items; i++) { rec = g_array_index (items, sres_srv_record_t *, i); sum = (rec->srv_weight += sum); } dice = g_random_int_range (0, sum + 1); for (i = 0; i < n_sel_items; i++) { rec = g_array_index (items, sres_srv_record_t *, i); if (rec->srv_weight >= dice) { sel = rec; break; } } g_array_unref (items); } if (sel != NULL) { DEBUG ("discovery got STUN server %s:%u", sel->srv_target, sel->srv_port); priv->stun_port = sel->srv_port; rakia_conn_resolv_stun_server (conn, sel->srv_target); } sres_free_answers (priv->sofia_resolver, answers); } void rakia_conn_discover_stun_server (RakiaConnection *conn) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); const char *url_host; char *srv_domain; struct in_addr test_addr; g_return_if_fail (priv->account_url != NULL); url_host = priv->account_url->url_host; if (url_host == NULL) { DEBUG("unknown domain, not making STUN SRV lookup"); return; } /* FIXME: support IPv6 as well */ if (inet_aton (url_host, &test_addr)) { DEBUG("AOR URI has IP address, not making STUN SRV lookup"); return; } if (NULL == priv->sofia_resolver) { su_root_t *root = NULL; g_object_get (conn, "sofia-root", &root, NULL); priv->sofia_resolver = sres_resolver_create (root, NULL, TAG_END()); g_return_if_fail (priv->sofia_resolver != NULL); } DEBUG("creating a new STUN SRV query for domain %s", url_host); srv_domain = g_strdup_printf ("_stun._udp.%s", url_host); sres_query (priv->sofia_resolver, priv_stun_discover_cb, (sres_context_t *) conn, sres_type_srv, srv_domain); g_free (srv_domain); } gchar * rakia_handle_normalize (TpHandleRepoIface *repo, const gchar *sipuri, gpointer context, GError **error) { RakiaConnection *conn = RAKIA_CONNECTION (context); RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (conn); return rakia_normalize_contact (sipuri, priv->account_url, priv->transport, error); } #ifdef HAVE_LIBIPHB static gushort recommended_intervals[] = { IPHB_GS_WAIT_10_HOURS, IPHB_GS_WAIT_2_HOURS, IPHB_GS_WAIT_1_HOUR, IPHB_GS_WAIT_30_MINS, IPHB_GS_WAIT_10_MINS * 2, /* It aligns with the 1 hour slot. */ IPHB_GS_WAIT_10_MINS, IPHB_GS_WAIT_5_MINS, IPHB_GS_WAIT_2_5_MINS, IPHB_GS_WAIT_30_SEC}; static gushort get_system_sync_interval (guint max_interval) { guint i; for (i = 0; i < G_N_ELEMENTS (recommended_intervals); i++) { if (recommended_intervals[i] <= max_interval) return recommended_intervals[i]; } return (gushort) MIN (max_interval, G_MAXUSHORT); } static void heartbeat_schedule_wait (RakiaConnection *self) { RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); gushort interval; /* Passing the same minimum and maximum interval to iphb_wait() means * that the iphb daemon will wake us up when its internal time is a * multiple of the interval. * By using recommended intervals across the platform we can get * multiple processes waken up at the same time. */ interval = get_system_sync_interval (priv->keepalive_interval); DEBUG ("requested %hd as maximum interval; using the recommended %hu " "interval", priv->keepalive_interval, interval); if (iphb_wait (priv->heartbeat, interval, interval, 0) < 0) { WARNING ("iphb_wait failed"); rakia_conn_heartbeat_shutdown (self); } } static int heartbeat_wakeup (su_root_magic_t *foo, su_wait_t *wait, void *user_data) { RakiaConnection *self = (RakiaConnection *) user_data; RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); DEBUG("tick"); g_assert (priv->heartbeat != NULL); if ((wait->revents & (SU_WAIT_IN | SU_WAIT_HUP | SU_WAIT_ERR)) != SU_WAIT_IN) { WARNING ("heartbeat descriptor invalidated prematurely with event mask %hd", wait->revents); rakia_conn_heartbeat_shutdown (self); return 0; } heartbeat_schedule_wait (self); return 0; } #endif /* HAVE_LIBIPHB */ void rakia_conn_heartbeat_init (RakiaConnection *self) { #ifdef HAVE_LIBIPHB RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); int wait_id; int reference_interval = 0; su_root_t *root = NULL; g_assert (priv->heartbeat == NULL); priv->heartbeat = iphb_open (&reference_interval); if (priv->heartbeat == NULL) { WARNING ("opening IP heartbeat failed: %s", strerror (errno)); return; } DEBUG("heartbeat opened with reference interval %d", reference_interval); su_wait_init (priv->heartbeat_wait); if (su_wait_create (priv->heartbeat_wait, iphb_get_fd (priv->heartbeat), SU_WAIT_IN) != 0) rakia_log (DEBUG_FLAG, G_LOG_LEVEL_CRITICAL, "could not create a wait object"); g_object_get (self, "sofia-root", &root, NULL); wait_id = su_root_register (root, priv->heartbeat_wait, heartbeat_wakeup, self, 0); g_return_if_fail (wait_id > 0); priv->heartbeat_wait_id = wait_id; heartbeat_schedule_wait (self); #endif /* HAVE_LIBIPHB */ } void rakia_conn_heartbeat_shutdown (RakiaConnection *self) { #ifdef HAVE_LIBIPHB RakiaConnectionPrivate *priv = RAKIA_CONNECTION_GET_PRIVATE (self); su_root_t *root = NULL; if (priv->heartbeat_wait_id == 0) return; g_object_get (self, "sofia-root", &root, NULL); su_root_deregister (root, priv->heartbeat_wait_id); priv->heartbeat_wait_id = 0; su_wait_destroy (priv->heartbeat_wait); iphb_close (priv->heartbeat); priv->heartbeat = NULL; #endif /* HAVE_LIBIPHB */ } telepathy-rakia-0.8.0/depcomp0000755000175000017500000005601612223050267013110 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program 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, 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, see . # 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 Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: telepathy-rakia-0.8.0/COPYING0000644000175000017500000006350412223047264012571 00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! telepathy-rakia-0.8.0/Makefile.in0000644000175000017500000007356412223050267013607 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile.am for telepathy-rakia/src # # Copyright (C) 2006,2008 Nokia Corporation # Contact: Mikhail Zabaluev # Licensed under LGPL. See file COPYING. # # ---------------------------------------------------------------------- # Automake options VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/tools/lcov.am $(srcdir)/tools/telepathy.am \ INSTALL NEWS README AUTHORS ChangeLog $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(srcdir)/config.h.in COPYING TODO \ compile config.guess config.sub depcomp install-sh missing \ ltmain.sh subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 # ---------------------------------------------------------------------- # Build targets SUBDIRS = \ tools \ rakia \ extensions \ data \ docs \ m4 \ src \ tests LCOV_CHECK_ARGS = CHECK_TWISTED_SLEEP=6 DISTCHECK_CONFIGURE_FLAGS = --disable-debug --enable-gtk-doc all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/tools/lcov.am $(srcdir)/tools/telepathy.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(srcdir)/tools/lcov.am $(srcdir)/tools/telepathy.am: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am lcov-reset: lcov --directory @top_srcdir@ --zerocounters lcov-report: lcov --directory @top_srcdir@ --capture \ --output-file @top_builddir@/lcov.info.tmp lcov --directory @top_srcdir@ --output-file @top_builddir@/lcov.info \ --remove @top_builddir@/lcov.info.tmp telepathy-glib-scan.c rm @top_builddir@/lcov.info.tmp $(mkdir_p) @top_builddir@/lcov.html git_commit=`GIT_DIR=@top_srcdir@/.git git log -1 --pretty=format:%h 2>/dev/null`;\ genhtml --title "@PACKAGE_STRING@ $$git_commit" \ --output-directory @top_builddir@/lcov.html lcov.info @echo @echo 'lcov report can be found in:' @echo 'file://@abs_top_builddir@/lcov.html/index.html' @echo lcov-check: $(MAKE) lcov-reset $(MAKE) check $(LCOV_CHECK_ARGS) $(MAKE) lcov-report lcov-clean: -rm -rf $(top_builddir)/lcov.html -rm -f $(top_builddir)/lcov.info* clean-local: lcov-clean dist-hook: chmod u+w ${distdir}/ChangeLog if test -d ${top_srcdir}/.git; then \ ( cd ${top_srcdir} && git log --date=iso $(CHANGELOG_RANGE) ) > ${distdir}/ChangeLog; \ fi distcheck-hook: @test "z$(CHECK_FOR_UNRELEASED)" = z || \ case @VERSION@ in \ *.*.*.*|*+) ;; \ *) \ if grep -r UNRELEASED $(CHECK_FOR_UNRELEASED); \ then \ echo "^^^ This is meant to be a release, but some files say UNRELEASED" >&2; \ exit 2; \ fi \ ;; \ esac _is-release-check: @case @VERSION@ in \ (*.*.*.*|*+) \ echo "Hey! @VERSION@ is not a release!" >&2; \ exit 2; \ ;; \ esac @cd ${top_srcdir} && \ if ! git diff --no-ext-diff --quiet --exit-code; then \ echo "Hey! Your tree is dirty! No release for you." >&2; \ exit 2; \ fi @cd ${top_srcdir} && \ if ! git diff --cached --no-ext-diff --quiet --exit-code; then \ echo "Hey! You have changes staged! No release for you." >&2; \ exit 2; \ fi %.tar.gz.asc: %.tar.gz $(AM_V_GEN)gpg --detach-sign --armor $@ @PACKAGE@-@VERSION@.tar.gz: $(MAKE) _is-release-check $(MAKE) check $(MAKE) distcheck maintainer-prepare-release: $(MAKE) _is-release-check $(MAKE) all $(MAKE) distcheck $(MAKE) release-mail git tag -s @PACKAGE@-@VERSION@ -m @PACKAGE@' '@VERSION@ gpg --detach-sign --armor @PACKAGE@-@VERSION@.tar.gz release-mail: NEWS $(AM_V_GEN)(python $(top_srcdir)/tools/make-release-mail.py \ @PACKAGE@ @VERSION@ $(top_srcdir)/NEWS > $@.tmp && \ mv $@.tmp $@) maintainer-upload-release: _maintainer-upload-release _maintainer-upload-release-check: _is-release-check test -f @PACKAGE@-@VERSION@.tar.gz test -f @PACKAGE@-@VERSION@.tar.gz.asc gpg --verify @PACKAGE@-@VERSION@.tar.gz.asc _maintainer-upload-release: _maintainer-upload-release-check rsync -vzP @PACKAGE@-@VERSION@.tar.gz telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/releases/@PACKAGE@/@PACKAGE@-@VERSION@.tar.gz rsync -vzP @PACKAGE@-@VERSION@.tar.gz.asc telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/releases/@PACKAGE@/@PACKAGE@-@VERSION@.tar.gz.asc maintainer-make-release: $(MAKE) maintainer-prepare-release $(MAKE) maintainer-upload-release @echo "Now:" @echo " • bump the nano-version;" @echo " • push the branch and tags upstream; and" @echo " • send release-mail to ." # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/config.guess0000755000175000017500000013036112223050267014047 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. 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 ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # 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 tuples: *-*-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 ;; sh5el) machine=sh5le-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 -q __ELF__ 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 ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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 powerpc-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'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-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 /* 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 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:*:[4567]) 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 #include 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 -q __LP64__ 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 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:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-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-${LIBC}`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/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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 -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${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-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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.[02]*:*) 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' /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 i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-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; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; 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.[02]*:*) 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 echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # 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 ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku 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 ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-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 eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi 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 ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} 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 ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #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 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 # 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 < 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: telepathy-rakia-0.8.0/aclocal.m40000644000175000017500000016372712223050266013402 00000000000000# generated automatically by aclocal 1.14 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) dnl -*- mode: autoconf -*- # serial 1 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first dnl check for tools we added during development AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) if test x$enable_gtk_doc = xyes; then ifelse([$1],[], [PKG_CHECK_EXISTS([gtk-doc],, AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], [PKG_CHECK_EXISTS([gtk-doc >= $1],, AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) dnl don't check for glib if we build glib if test "x$PACKAGE_NAME" != "xglib"; then dnl don't fail if someone does not have glib PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:]) fi fi AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 dnl python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Python interpreter is too old])]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': can_use_sysconfig = 0 except ImportError: pass" dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/as-version.m4]) m4_include([m4/compiler.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/tp-compiler-flag.m4]) m4_include([m4/tp-compiler-warnings.m4]) m4_include([m4/tp-linker-flag.m4]) telepathy-rakia-0.8.0/missing0000755000175000017500000001533112223050267013125 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program 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, 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: telepathy-rakia-0.8.0/AUTHORS0000644000175000017500000000100412223047264012571 00000000000000Mikhail Zabaluev Kai Vehmanen Martti Mela Simon McVittie Rob Taylor Senko Rasic Jonny Lamb David Laban Authors for original telepathy-gabble code: Robert McQueen Ole André Ravnaas Ross Burton telepathy-rakia-0.8.0/docs/0000755000175000017500000000000012223050362012527 500000000000000telepathy-rakia-0.8.0/docs/Makefile.in0000644000175000017500000004523712223050267014533 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = docs DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man8dir = $(mandir)/man8 am__installdirs = "$(DESTDIR)$(man8dir)" NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE = telepathy-rakia # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR = ../server # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS = --sgml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = CFILE_GLOB = # Header files to ignore when scanning. # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES = # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) AM_CPPFLAGS = GTKDOC_LIBS = # This includes the standard gtk-doc make rules, copied by gtkdocize. # temporarily disabled (2006/04) #include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = telepathy-rakia.8.in # Man page man_MANS = telepathy-rakia.8 CLEANFILES = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man8: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man8dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man8 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man8 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man8 %.8: %.8.in Makefile sed -e 's,[@]libexecdir[@],@libexecdir@,' < $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/docs/Makefile.am0000644000175000017500000000541212223047264014514 00000000000000## Process this file with automake to produce Makefile.in # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=telepathy-rakia # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR=../server # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS= # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS=--sgml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB= CFILE_GLOB= # Header files to ignore when scanning. # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files= # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) AM_CPPFLAGS= GTKDOC_LIBS= # This includes the standard gtk-doc make rules, copied by gtkdocize. # temporarily disabled (2006/04) #include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = # Man page man_MANS = telepathy-rakia.8 CLEANFILES = $(man_MANS) EXTRA_DIST += telepathy-rakia.8.in %.8: %.8.in Makefile sed -e 's,[@]libexecdir[@],@libexecdir@,' < $< > $@ telepathy-rakia-0.8.0/docs/telepathy-rakia.8.in0000644000175000017500000000331512223047264016242 00000000000000.TH TELEPATHY-RAKIA "8" "February 2010" "Telepathy" "D-Bus services" \" This man page was written by Simon McVittie for the Debian project, \" but may be used by others. \" Copyright © 2007-2010 Collabora Ltd. \" It may be distributed under the same terms as telepathy-rakia itself. .SH NAME telepathy-rakia \- Telepathy connection manager for SIP .SH SYNOPSIS \fB@libexecdir@/telepathy\-rakia\fR .SH DESCRIPTION \fBtelepathy\-rakia\fR implements the Telepathy D-Bus specification for the Session Initiation Protocol, allowing Telepathy clients like .BR empathy (1) to connect to Voice over IP providers that implement SIP. .PP It is a D-Bus service which runs on the session bus, and should usually be started automatically by D-Bus activation. However, it might be useful to start it manually for debugging. .SH OPTIONS There are no command-line options. .SH ENVIRONMENT .TP \fBRAKIA_DEBUG\fR=\fItype\fR May be set to "all" for full debug output, or various undocumented options (which may change from release to release) to filter the output. .TP \fBRAKIA_LOGFILE\fR=\fIfilename\fR May be set to the name of a file to overwrite with log messages. The filename may be prefixed with \fB+\fR to append messages to an existing file instead of overwriting it. .TP \fBRAKIA_PERSIST\fR May be set to any value to avoid telepathy-rakia's usual automatic exit when there have been no connections for a few seconds. .TP \fBTPORT_LOG\fR May be set to any value to print all parsed SIP messages at the transport layer (this functionality is provided by the underlying Sofia-SIP library, which also offers various more specialized debugging options). .SH SEE ALSO .IR http://telepathy.freedesktop.org/ , .BR empathy (1) telepathy-rakia-0.8.0/configure.ac0000644000175000017500000001016412223047766014025 00000000000000AC_PREREQ([2.60]) m4_define([THIS_PACKAGE],[telepathy-rakia]) m4_define([VERSION_MAJOR],[0]) m4_define([VERSION_MINOR],[8]) m4_define([VERSION_MICRO],[0]) m4_define([VERSION_NANO],[0]) m4_define([BASE_VERSION],[VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO]) m4_define([THIS_VERSION], [m4_if(VERSION_NANO, 0, [BASE_VERSION], [BASE_VERSION.VERSION_NANO])]) AC_INIT(THIS_PACKAGE, THIS_VERSION) AC_CONFIG_MACRO_DIR([m4]) AS_VERSION(THIS_PACKAGE, TELEPATHY_SIP_VERSION, VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO, VERSION_NANO, IS_RELEASE="yes", IS_RELEASE="no") AM_INIT_AUTOMAKE([1.9 -Wno-portability]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) AC_DISABLE_SHARED AC_CONFIG_HEADER([config.h]) dnl check for tools AC_PROG_CC AC_PROG_CC_STDC AC_PROG_MKDIR_P AC_PROG_LIBTOOL COMPILER_OPTIMISATIONS COMPILER_COVERAGE AS_IF([test "x$IS_RELEASE" = xyes], [ # version x.y.z - "official release", # disable extra checks by default AC_ARG_ENABLE([fatal-warnings], [AC_HELP_STRING([--enable-fatal-warnings], [make various warnings fatal])], [], [enable_fatal_warnings=no]) ], [ # tp-glib is version x.y.z.1 - development snapshot, # enable extra checks by default AC_ARG_ENABLE([fatal-warnings], [AC_HELP_STRING([--disable-fatal-warnings], [make various warnings non-fatal])], [], [enable_fatal_warnings=yes]) ]) TP_COMPILER_WARNINGS([ERROR_CFLAGS], [test "x$enable_fatal_warnings" = xyes], [all \ extra \ declaration-after-statement \ shadow \ missing-prototypes \ nested-externs \ pointer-arith \ sign-compare \ strict-prototypes \ format-security \ init-self], [missing-field-initializers \ unused-parameter \ deprecated-declarations]) AC_SUBST([ERROR_CFLAGS]) # these aren't really error flags but they serve a similar purpose for us - # making the toolchain stricter if test "x$enable_fatal_warnings" = xyes; then TP_ADD_LINKER_FLAG([ERROR_LDFLAGS], [-Wl,--no-copy-dt-needed-entries]) fi AC_ARG_ENABLE(debug, AS_HELP_STRING([--disable-debug],[omit debug code]), enable_debug=$enableval, enable_debug=yes ) if test x$enable_debug = xyes; then AC_DEFINE(ENABLE_DEBUG, [], [Enable debug code]) fi AM_CONDITIONAL([ENABLE_DEBUG], [test "x$enable_debug" = xyes]) AC_C_INLINE dnl GTK docs GTK_DOC_CHECK PKG_CHECK_MODULES([GLIB], [gobject-2.0 >= 2.30, gio-2.0 >= 2.30]) GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` AC_SUBST([GLIB_GENMARSHAL]) dnl MIN_REQUIRED must stay 2.30 because of GValueArray AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_30], [Ignore post 2.30 deprecations]) AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_30], [Prevent post 2.30 APIs]) PKG_CHECK_MODULES([DBUS], [dbus-1 >= 0.60, dbus-glib-1 >= 0.60]) PKG_CHECK_MODULES([SOFIA_SIP_UA], [sofia-sip-ua-glib >= 1.12.11]) PKG_CHECK_MODULES([TELEPATHY_GLIB], [telepathy-glib >= 0.17.7]) dnl Check for optional IP heartbeat support AC_ARG_WITH(iphb, AS_HELP_STRING([--with-iphb],[use IP heartbeat support in Maemo]), [], [with_iphb=no] ) if test "x$with_iphb" != xno; then PKG_CHECK_MODULES(IPHB, [libiphb >= 0.61.31], [ AC_DEFINE([HAVE_LIBIPHB], [], [IP heartbeat library is available]) ] ) else IPHB_CFLAGS= IPHB_LIBS= fi AC_SUBST(IPHB_CFLAGS) AC_SUBST(IPHB_LIBS) dnl Check for code generation tools XSLTPROC= AC_CHECK_PROGS([XSLTPROC], [xsltproc]) if test -z "$XSLTPROC"; then AC_MSG_ERROR([xsltproc (from the libxslt source package) is required]) fi AM_PATH_PYTHON([2.3],[], [AC_MSG_ERROR([Python is required to compile this package])] ) dnl Check for twisted python for tests AC_MSG_CHECKING([for TwistedPython with SIP protocol support]) if $PYTHON -c "import twisted.protocols.sip, twisted.internet.reactor" >/dev/null 2>&1; then AC_MSG_RESULT([yes]) AM_CONDITIONAL([WANT_TWISTED_TESTS], true) else AC_MSG_RESULT([no]) AM_CONDITIONAL([WANT_TWISTED_TESTS], false) fi AC_CONFIG_FILES([ Makefile rakia/Makefile extensions/Makefile src/Makefile m4/Makefile data/Makefile tests/Makefile tests/twisted/Makefile tests/twisted/tools/Makefile tools/Makefile docs/Makefile ]) AC_OUTPUT telepathy-rakia-0.8.0/data/0000755000175000017500000000000012223050362012510 500000000000000telepathy-rakia-0.8.0/data/org.freedesktop.Telepathy.ConnectionManager.sofiasip.service.in0000644000175000017500000000015412223047264026672 00000000000000[D-BUS Service] Name=org.freedesktop.Telepathy.ConnectionManager.sofiasip Exec=@libexecdir@/telepathy-rakia telepathy-rakia-0.8.0/data/Makefile.in0000644000175000017500000003702012223050267014503 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(servicedir)" DATA = $(service_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Dbus service file BUILT_FILES = $(service_in_files:.service.in=.service) servicedir = $(datadir)/dbus-1/services service_in_files = org.freedesktop.Telepathy.ConnectionManager.sofiasip.service.in service_DATA = $(BUILT_FILES) CLEANFILES = $(BUILT_FILES) EXTRA_DIST = $(service_in_files) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-serviceDATA: $(service_DATA) @$(NORMAL_INSTALL) @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(servicedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(servicedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(servicedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \ done uninstall-serviceDATA: @$(NORMAL_UNINSTALL) @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(servicedir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(servicedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-serviceDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-serviceDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-serviceDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-serviceDATA # Rule to make the service file with libexecdir expanded $(service_DATA): $(service_in_files) Makefile @sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/data/Makefile.am0000644000175000017500000000067612223047264014504 00000000000000# Dbus service file BUILT_FILES = $(service_in_files:.service.in=.service) servicedir = $(datadir)/dbus-1/services service_in_files = org.freedesktop.Telepathy.ConnectionManager.sofiasip.service.in service_DATA = $(BUILT_FILES) CLEANFILES = $(BUILT_FILES) EXTRA_DIST = $(service_in_files) # Rule to make the service file with libexecdir expanded $(service_DATA): $(service_in_files) Makefile @sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@ telepathy-rakia-0.8.0/ltmain.sh0000644000175000017500000105202612223050262013344 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 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. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.3 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1.3" TIMESTAMP="" package_revision=1.3337 # 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+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # 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+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 telepathy-rakia-0.8.0/m4/0000755000175000017500000000000012223050362012117 500000000000000telepathy-rakia-0.8.0/m4/ltversion.m40000644000175000017500000000126212223050262014326 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) telepathy-rakia-0.8.0/m4/Makefile.in0000644000175000017500000003175512223050267014123 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ as-compiler-flag.m4 \ as-version.m4 \ compiler.m4 \ tp-compiler-flag.m4 \ tp-compiler-warnings.m4 \ tp-linker-flag.m4 \ $(NULL) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu m4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/m4/lt~obsolete.m40000644000175000017500000001375612223050262014666 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) telepathy-rakia-0.8.0/m4/ltoptions.m40000644000175000017500000003007312223050262014336 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) telepathy-rakia-0.8.0/m4/libtool.m40000644000175000017500000106000712223050262013750 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -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 Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS telepathy-rakia-0.8.0/m4/tp-compiler-warnings.m40000644000175000017500000000351012223047264016370 00000000000000dnl TP_COMPILER_WARNINGS(VARIABLE, WERROR_BY_DEFAULT, DESIRABLE, UNDESIRABLE) dnl $1 (VARIABLE): the variable to put flags into dnl $2 (WERROR_BY_DEFAULT): a command returning true if -Werror should be the dnl default dnl $3 (DESIRABLE): warning flags we want (e.g. all extra shadow) dnl $4 (UNDESIRABLE): warning flags we don't want (e.g. dnl missing-field-initializers unused-parameter) AC_DEFUN([TP_COMPILER_WARNINGS], [ AC_REQUIRE([AC_ARG_ENABLE])dnl AC_REQUIRE([AC_HELP_STRING])dnl AC_REQUIRE([TP_COMPILER_FLAG])dnl tp_warnings="" for tp_flag in $3; do TP_COMPILER_FLAG([-W$tp_flag], [tp_warnings="$tp_warnings -W$tp_flag"]) done tp_error_flags="-Werror" TP_COMPILER_FLAG([-Werror], [tp_werror=yes], [tp_werror=no]) for tp_flag in $4; do TP_COMPILER_FLAG([-Wno-$tp_flag], [tp_warnings="$tp_warnings -Wno-$tp_flag"]) dnl Yes, we do need to use both -Wno-foo and -Wno-error=foo. Simon says: dnl some warnings we explicitly don't want, like unused-parameter, but dnl they're in -Wall. when a distro using cdbs compiles us, we have: dnl -Werror -Wno-unused-parameter -Wall dnl ^ from us ^ from cdbs dnl which turns -Wunused-parameter back on, in effect TP_COMPILER_FLAG([-Wno-error=$tp_flag], [tp_error_flags="$tp_error_flags -Wno-error=$tp_flag"], [tp_werror=no]) done AC_ARG_ENABLE([Werror], AC_HELP_STRING([--disable-Werror], [compile without -Werror (normally enabled in development builds)]), tp_werror=$enableval, :) if test "x$tp_werror" = xyes && $2; then dnl We put -Wno-error=foo before -Wno-foo because clang interprets -Wall dnl -Werror -Wno-foo -Wno-error=foo as “make foo a non-fatal warning”, but does dnl what we want if you reverse them. $1="$tp_error_flags $tp_warnings" else $1="$tp_warnings" fi ]) telepathy-rakia-0.8.0/m4/compiler.m40000644000175000017500000000501712223047264014125 00000000000000# compiler.m4 - autoconf macros for compiler settings # # Copyright © 2005 Scott James Remnant . # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR # ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF # CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # COMPILER_WARNINGS # ---------------------- # Add configure option to enable additional compiler warnings and treat # them as errors. AC_DEFUN([COMPILER_WARNINGS], [AC_ARG_ENABLE(compiler-warnings, AS_HELP_STRING([--enable-compiler-warnings], [Enable additional compiler warnings]), [if test "x$enable_compiler_warnings" = "xyes"; then if test "x$GCC" = "xyes"; then CFLAGS="-Wall -Werror $CFLAGS" fi if test "x$GXX" = "xyes"; then CXXFLAGS="-Wall -Werror $CXXFLAGS" fi fi])dnl ])# COMPILER_WARNINGS # COMPILER_OPTIMISATIONS # --------------------------- # Add configure option to disable optimisations. AC_DEFUN([COMPILER_OPTIMISATIONS], [AC_ARG_ENABLE(compiler-optimisations, AS_HELP_STRING([--disable-compiler-optimisations], [Disable compiler optimisations]), [if test "x$enable_compiler_optimisations" = "xno"; then [CFLAGS=`echo "$CFLAGS" | sed -e "s/ -O[1-9]*\b/ -O0/g"`] fi])dnl ])# COMPILER_OPTIMISATIONS # COMPILER_COVERAGE # ---------------------- # Add configure option to enable coverage data. AC_DEFUN([COMPILER_COVERAGE], [AC_ARG_ENABLE(compiler-coverage, AS_HELP_STRING([--enable-compiler-coverage], [Enable generation of coverage data]), [if test "x$enable_compiler_coverage" = "xyes"; then if test "x$GCC" = "xyes"; then CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" fi fi])dnl ])# COMPILER_COVERAGE telepathy-rakia-0.8.0/m4/ltsugar.m40000644000175000017500000001042412223050262013762 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) telepathy-rakia-0.8.0/m4/Makefile.am0000644000175000017500000000021712223047264014102 00000000000000EXTRA_DIST = \ as-compiler-flag.m4 \ as-version.m4 \ compiler.m4 \ tp-compiler-flag.m4 \ tp-compiler-warnings.m4 \ tp-linker-flag.m4 \ $(NULL) telepathy-rakia-0.8.0/m4/tp-compiler-flag.m40000644000175000017500000000217512223047264015457 00000000000000dnl A version of AS_COMPILER_FLAG that supports both C and C++. dnl Based on: dnl as-compiler-flag.m4 0.1.0 dnl autostars m4 macro for detection of compiler flags dnl David Schleef dnl $Id: as-compiler-flag.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $ dnl TP_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) dnl Tries to compile with the given CFLAGS and CXXFLAGS. dnl dnl Runs ACTION-IF-ACCEPTED if the compiler for the currently selected dnl AC_LANG can compile with the flags, and ACTION-IF-NOT-ACCEPTED otherwise. AC_DEFUN([TP_COMPILER_FLAG], [ AC_MSG_CHECKING([to see if compiler understands $1]) save_CFLAGS="$CFLAGS" save_CXXFLAGS="$CXXFLAGS" CFLAGS="$CFLAGS $1" CXXFLAGS="$CXXFLAGS $1" AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) CFLAGS="$save_CFLAGS" CXXFLAGS="$save_CXXFLAGS" if test "X$flag_ok" = Xyes ; then $2 true else $3 true fi AC_MSG_RESULT([$flag_ok]) ]) dnl TP_ADD_COMPILER_FLAG(VARIABLE, CFLAGS) dnl Append CFLAGS to VARIABLE if the compiler supports them. AC_DEFUN([TP_ADD_COMPILER_FLAG], [ TP_COMPILER_FLAG([$2], [$1="[$]$1 $2"]) ]) telepathy-rakia-0.8.0/m4/tp-linker-flag.m40000644000175000017500000000230712223047264015126 00000000000000dnl A version of AS_COMPILER_FLAG that supports linker flags dnl Based on: dnl as-compiler-flag.m4 0.1.0 dnl autostars m4 macro for detection of compiler flags dnl David Schleef dnl $Id: as-compiler-flag.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $ dnl TP_LINKER_FLAG(LDFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) dnl Tries to compile with the given LDFLAGS. dnl dnl Runs ACTION-IF-ACCEPTED if the compiler/linker for the currently selected dnl AC_LANG can compile with the flags, and ACTION-IF-NOT-ACCEPTED otherwise. dnl dnl Note that LDFLAGS are passed to the linker via the compiler, so you dnl should check for -Wl,--no-add-needed rather than --no-add-needed. AC_DEFUN([TP_LINKER_FLAG], [ AC_MSG_CHECKING([to see if compiler/linker understand $1]) save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $1" AC_COMPILE_IFELSE(AC_LANG_SOURCE([]), [flag_ok=yes], [flag_ok=no]) LDFLAGS="$save_LDFLAGS" if test "X$flag_ok" = Xyes ; then $2 true else $3 true fi AC_MSG_RESULT([$flag_ok]) ]) dnl TP_ADD_LINKER_FLAG(VARIABLE, LDFLAGS) dnl Append LDFLAGS to VARIABLE if the linker supports them. AC_DEFUN([TP_ADD_LINKER_FLAG], [ TP_LINKER_FLAG([$2], [$1="[$]$1 $2"]) ]) telepathy-rakia-0.8.0/m4/as-compiler-flag.m40000644000175000017500000000136312223047264015435 00000000000000dnl as-compiler-flag.m4 0.1.0 dnl autostars m4 macro for detection of compiler flags dnl David Schleef dnl $Id: as-compiler-flag.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $ dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) dnl Tries to compile with the given CFLAGS. dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, dnl and ACTION-IF-NOT-ACCEPTED otherwise. AC_DEFUN([AS_COMPILER_FLAG], [ AC_MSG_CHECKING([to see if compiler understands $1]) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes ; then $2 true else $3 true fi AC_MSG_RESULT([$flag_ok]) ]) telepathy-rakia-0.8.0/m4/as-version.m40000644000175000017500000000362212223047264014401 00000000000000dnl as-version.m4 0.1.0 dnl autostars m4 macro for versioning dnl Thomas Vander Stichele dnl $Id: as-version.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $ dnl AS_VERSION(PACKAGE, PREFIX, MAJOR, MINOR, MICRO, NANO, dnl ACTION-IF-NO-NANO, [ACTION-IF-NANO]) dnl example dnl AS_VERSION(gstreamer, GST_VERSION, 0, 3, 2,) dnl for a 0.3.2 release version dnl this macro dnl - defines [$PREFIX]_MAJOR, MINOR and MICRO dnl - if NANO is empty, then we're in release mode, else in cvs/dev mode dnl - defines [$PREFIX], VERSION, and [$PREFIX]_RELEASE dnl - executes the relevant action dnl - AC_SUBST's PACKAGE, VERSION, [$PREFIX] and [$PREFIX]_RELEASE dnl as well as the little ones dnl - doesn't call AM_INIT_AUTOMAKE anymore because it prevents dnl maintainer mode from running ok dnl dnl don't forget to put #undef [$2] and [$2]_RELEASE in acconfig.h dnl if you use acconfig.h AC_DEFUN([AS_VERSION], [ PACKAGE=[$1] [$2]_MAJOR=[$3] [$2]_MINOR=[$4] [$2]_MICRO=[$5] NANO=[$6] [$2]_NANO=$NANO if test "x$NANO" = "x" || test "x$NANO" = "x0"; then AC_MSG_NOTICE(configuring [$1] for release) VERSION=[$3].[$4].[$5] [$2]_RELEASE=1 dnl execute action ifelse([$7], , :, [$7]) else AC_MSG_NOTICE(configuring [$1] for development with nano $NANO) VERSION=[$3].[$4].[$5].$NANO [$2]_RELEASE=0.`date +%Y%m%d.%H%M%S` dnl execute action ifelse([$8], , :, [$8]) fi [$2]=$VERSION AC_DEFINE_UNQUOTED([$2], "$[$2]", [Define the version]) AC_SUBST([$2]) AC_DEFINE_UNQUOTED([$2]_RELEASE, "$[$2]_RELEASE", [Define the release version]) AC_SUBST([$2]_RELEASE) AC_SUBST([$2]_MAJOR) AC_SUBST([$2]_MINOR) AC_SUBST([$2]_MICRO) AC_SUBST([$2]_NANO) AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define the package name]) AC_SUBST(PACKAGE) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Define the version]) AC_SUBST(VERSION) ]) telepathy-rakia-0.8.0/compile0000755000175000017500000001624512223050267013111 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program 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, 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: telepathy-rakia-0.8.0/INSTALL0000644000175000017500000003660512223050267012566 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. telepathy-rakia-0.8.0/config.sub0000755000175000017500000010535412223050267013516 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-08-10' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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 ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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 | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | 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 \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # 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 ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; 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 ;; cr16 | cr16-*) basic_machine=cr16-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 ;; dicos) basic_machine=i686-pc os=-dicos ;; 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*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 ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; 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-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; 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 ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; 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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) 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 ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; 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 ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-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[24]aeb | 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. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -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* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -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* | -toppers* | -drops* | -es*) # 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 ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) 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 ;; -cnk*|-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: telepathy-rakia-0.8.0/tools/0000755000175000017500000000000012223050362012737 500000000000000telepathy-rakia-0.8.0/tools/lcov.am0000644000175000017500000000153312223047264014152 00000000000000lcov-reset: lcov --directory @top_srcdir@ --zerocounters lcov-report: lcov --directory @top_srcdir@ --capture \ --output-file @top_builddir@/lcov.info.tmp lcov --directory @top_srcdir@ --output-file @top_builddir@/lcov.info \ --remove @top_builddir@/lcov.info.tmp telepathy-glib-scan.c rm @top_builddir@/lcov.info.tmp $(mkdir_p) @top_builddir@/lcov.html git_commit=`GIT_DIR=@top_srcdir@/.git git log -1 --pretty=format:%h 2>/dev/null`;\ genhtml --title "@PACKAGE_STRING@ $$git_commit" \ --output-directory @top_builddir@/lcov.html lcov.info @echo @echo 'lcov report can be found in:' @echo 'file://@abs_top_builddir@/lcov.html/index.html' @echo lcov-check: $(MAKE) lcov-reset $(MAKE) check $(LCOV_CHECK_ARGS) $(MAKE) lcov-report lcov-clean: -rm -rf $(top_builddir)/lcov.html -rm -f $(top_builddir)/lcov.info* ## vim:set ft=automake: telepathy-rakia-0.8.0/tools/glib-client-marshaller-gen.py0000644000175000017500000000272412223047264020335 00000000000000#!/usr/bin/python import sys import xml.dom.minidom from string import ascii_letters, digits from libglibcodegen import signal_to_marshal_name NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" class Generator(object): def __init__(self, dom, prefix): self.dom = dom self.marshallers = {} self.prefix = prefix def do_signal(self, signal): marshaller = signal_to_marshal_name(signal, self.prefix) assert '__' in marshaller rhs = marshaller.split('__', 1)[1].split('_') self.marshallers[marshaller] = rhs def __call__(self): signals = self.dom.getElementsByTagName('signal') for signal in signals: self.do_signal(signal) print 'void' print '%s_register_dbus_glib_marshallers (void)' % self.prefix print '{' all = self.marshallers.keys() all.sort() for marshaller in all: rhs = self.marshallers[marshaller] print ' dbus_g_object_register_marshaller (%s,' % marshaller print ' G_TYPE_NONE, /* return */' for type in rhs: print ' G_TYPE_%s,' % type.replace('VOID', 'NONE') print ' G_TYPE_INVALID);' print '}' def types_to_gtypes(types): return [type_to_gtype(t)[1] for t in types] if __name__ == '__main__': argv = sys.argv[1:] dom = xml.dom.minidom.parse(argv[0]) Generator(dom, argv[1])() telepathy-rakia-0.8.0/tools/Makefile.in0000644000175000017500000003403512223050270014727 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tools DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ c-constants-generator.xsl \ check-coding-style.mk \ check-c-style.sh \ check-misc.sh \ check-whitespace.sh \ c-interfaces-generator.xsl \ doc-generator.xsl \ glib-client-gen.py \ glib-client-marshaller-gen.py \ glib-errors-enum-body.xsl \ glib-errors-enum-header.xsl \ glib-interfaces-generator.xsl \ glib-interfaces-body-generator.xsl \ glib-ginterface-gen.py \ glib-gtypes-generator.py \ glib-signals-marshal-gen.py \ identity.xsl \ lcov.am \ libglibcodegen.py \ telepathy.am CLEANFILES = libglibcodegen.pyc libglibcodegen.pyo $(noinst_SCRIPTS) TELEPATHY_GLIB_SRCDIR = $(top_srcdir)/../telepathy-glib all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am all: $(EXTRA_DIST) glib-client-marshaller-gen.py: libglibcodegen.py touch $@ glib-ginterface-gen.py: libglibcodegen.py touch $@ glib-gtypes-generator.py: libglibcodegen.py touch $@ glib-signals-marshal-gen.py: libglibcodegen.py touch $@ maintainer-update-from-telepathy-glib: set -e && cd $(srcdir) && \ for x in $(EXTRA_DIST); do \ if test -f $(TELEPATHY_GLIB_SRCDIR)/tools/$$x; then \ cp $(TELEPATHY_GLIB_SRCDIR)/tools/$$x $$x; \ fi; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/tools/c-interfaces-generator.xsl0000644000175000017500000000605612223047264017754 00000000000000 /** * _IFACE_ : * * The interface name " " */ #define _IFACE_ \ " " mixed-case-prefix param must be set /* Generated from: version */ telepathy-rakia-0.8.0/tools/doc-generator.xsl0000644000175000017500000005535112223047264016160 00000000000000

Errors

Generic types

Simple types

Enumerated types:

Sets of flags:

Structure types

Mapping types

Types defined elsewhere

This interface is and is likely to cause havoc to your API/ABI if bindings are generated. Don't include it in libraries that care about compatibility.

Implementations of this interface must also implement:

Methods:

Interface has no methods.

Signals:

Interface has no signals.

Properties:

Interface has no properties.

=
(Undocumented)

=
(Undocumented)
-

- a{ : }

Members

-

-

-
Defined by:
- ( , ) - a{ }

- ( : , )

In bindings that need a separate name, arrays of should be called .

Arrays of don't generally make sense.

Members

( : , ) → , nothing

Parameters

Returns

Possible errors

ERR: Unable to find type ' ' ()
-
(undocumented)
-
-
(generic description) (Undocumented.)

( : , )

Parameters

<xsl:value-of select="tp:title"/> <xsl:if test="tp:version"> <xsl:text> version </xsl:text> <xsl:value-of select="tp:version"/> </xsl:if>

Version

Interfaces

Index

Index of interfaces

Index of types

telepathy-rakia-0.8.0/tools/libglibcodegen.py0000644000175000017500000002447112223047264016201 00000000000000"""Library code for GLib/D-Bus-related code generation. The master copy of this library is in the telepathy-glib repository - please make any changes there. """ # Copyright (C) 2006, 2007 Collabora Limited # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from string import ascii_letters, digits NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" _ASCII_ALNUM = ascii_letters + digits def camelcase_to_lower(s): out =""; out += s[0].lower() last_upper=False if s[0].isupper(): last_upper=True for i in range(1,len(s)): if s[i].isupper(): if last_upper: if (i+1) < len(s) and s[i+1].islower(): out += "_" + s[i].lower() else: out += s[i].lower() else: out += "_" + s[i].lower() last_upper=True else: out += s[i] last_upper=False return out def camelcase_to_upper(s): return camelcase_to_lower(s).upper() def cmp_by_name(node1, node2): return cmp(node1.getAttributeNode("name").nodeValue, node2.getAttributeNode("name").nodeValue) def dbus_gutils_wincaps_to_uscore(s): """Bug-for-bug compatible Python port of _dbus_gutils_wincaps_to_uscore which gets sequences of capital letters wrong in the same way. (e.g. in Telepathy, SendDTMF -> send_dt_mf) """ ret = '' for c in s: if c >= 'A' and c <= 'Z': length = len(ret) if length > 0 and (length < 2 or ret[length-2] != '_'): ret += '_' ret += c.lower() else: ret += c return ret def escape_as_identifier(identifier): """Escape the given string to be a valid D-Bus object path or service name component, using a reversible encoding to ensure uniqueness. The reversible encoding is as follows: * The empty string becomes '_' * Otherwise, each non-alphanumeric character is replaced by '_' plus two lower-case hex digits; the same replacement is carried out on the first character, if it's a digit """ # '' -> '_' if not identifier: return '_' # A bit of a fast path for strings which are already OK. # We deliberately omit '_' because, for reversibility, that must also # be escaped. if (identifier.strip(_ASCII_ALNUM) == '' and identifier[0] in ascii_letters): return identifier # The first character may not be a digit if identifier[0] not in ascii_letters: ret = ['_%02x' % ord(identifier[0])] else: ret = [identifier[0]] # Subsequent characters may be digits or ASCII letters for c in identifier[1:]: if c in _ASCII_ALNUM: ret.append(c) else: ret.append('_%02x' % ord(c)) return ''.join(ret) def get_docstring(element): docstring = None for x in element.childNodes: if x.namespaceURI == NS_TP and x.localName == 'docstring': docstring = x if docstring is not None: docstring = docstring.toxml().replace('\n', ' ').strip() if docstring.startswith(''): docstring = docstring[14:].lstrip() if docstring.endswith(''): docstring = docstring[:-15].rstrip() if docstring in ('', ''): docstring = '' return docstring def signal_to_marshal_type(signal): """ return a list of strings indicating the marshalling type for this signal. """ mtype=[] for i in signal.getElementsByTagName("arg"): name =i.getAttribute("name") type = i.getAttribute("type") mtype.append(type_to_gtype(type)[2]) return mtype _glib_marshallers = ['VOID', 'BOOLEAN', 'CHAR', 'UCHAR', 'INT', 'STRING', 'UINT', 'LONG', 'ULONG', 'ENUM', 'FLAGS', 'FLOAT', 'DOUBLE', 'STRING', 'PARAM', 'BOXED', 'POINTER', 'OBJECT', 'UINT_POINTER'] def signal_to_marshal_name(signal, prefix): mtype = signal_to_marshal_type(signal) if len(mtype): name = '_'.join(mtype) else: name = 'VOID' if name in _glib_marshallers: return 'g_cclosure_marshal_VOID__' + name else: return prefix + '_marshal_VOID__' + name def method_to_glue_marshal_name(method, prefix): mtype = [] for i in method.getElementsByTagName("arg"): if i.getAttribute("direction") != "out": type = i.getAttribute("type") mtype.append(type_to_gtype(type)[2]) mtype.append('POINTER') name = '_'.join(mtype) if name in _glib_marshallers: return 'g_cclosure_marshal_VOID__' + name else: return prefix + '_marshal_VOID__' + name class _SignatureIter: """Iterator over a D-Bus signature. Copied from dbus-python 0.71 so we can run genginterface in a limited environment with only Python (like Scratchbox). """ def __init__(self, string): self.remaining = string def next(self): if self.remaining == '': raise StopIteration signature = self.remaining block_depth = 0 block_type = None end = len(signature) for marker in range(0, end): cur_sig = signature[marker] if cur_sig == 'a': pass elif cur_sig == '{' or cur_sig == '(': if block_type == None: block_type = cur_sig if block_type == cur_sig: block_depth = block_depth + 1 elif cur_sig == '}': if block_type == '{': block_depth = block_depth - 1 if block_depth == 0: end = marker break elif cur_sig == ')': if block_type == '(': block_depth = block_depth - 1 if block_depth == 0: end = marker break else: if block_depth == 0: end = marker break end = end + 1 self.remaining = signature[end:] return Signature(signature[0:end]) class Signature(str): """A string, iteration over which is by D-Bus single complete types rather than characters. """ def __iter__(self): return _SignatureIter(self) def type_to_gtype(s): if s == 'y': #byte return ("guchar ", "G_TYPE_UCHAR","UCHAR", False) elif s == 'b': #boolean return ("gboolean ", "G_TYPE_BOOLEAN","BOOLEAN", False) elif s == 'n': #int16 return ("gint ", "G_TYPE_INT","INT", False) elif s == 'q': #uint16 return ("guint ", "G_TYPE_UINT","UINT", False) elif s == 'i': #int32 return ("gint ", "G_TYPE_INT","INT", False) elif s == 'u': #uint32 return ("guint ", "G_TYPE_UINT","UINT", False) elif s == 'x': #int64 return ("gint64 ", "G_TYPE_INT64","INT64", False) elif s == 't': #uint64 return ("guint64 ", "G_TYPE_UINT64","UINT64", False) elif s == 'd': #double return ("gdouble ", "G_TYPE_DOUBLE","DOUBLE", False) elif s == 's': #string return ("gchar *", "G_TYPE_STRING", "STRING", True) elif s == 'g': #signature - FIXME return ("gchar *", "DBUS_TYPE_G_SIGNATURE", "STRING", True) elif s == 'o': #object path return ("gchar *", "DBUS_TYPE_G_OBJECT_PATH", "BOXED", True) elif s == 'v': #variant return ("GValue *", "G_TYPE_VALUE", "BOXED", True) elif s == 'as': #array of strings return ("gchar **", "G_TYPE_STRV", "BOXED", True) elif s == 'ay': #byte array return ("GArray *", "dbus_g_type_get_collection (\"GArray\", G_TYPE_UCHAR)", "BOXED", True) elif s == 'au': #uint array return ("GArray *", "DBUS_TYPE_G_UINT_ARRAY", "BOXED", True) elif s == 'ai': #int array return ("GArray *", "DBUS_TYPE_G_INT_ARRAY", "BOXED", True) elif s == 'ax': #int64 array return ("GArray *", "DBUS_TYPE_G_INT64_ARRAY", "BOXED", True) elif s == 'at': #uint64 array return ("GArray *", "DBUS_TYPE_G_UINT64_ARRAY", "BOXED", True) elif s == 'ad': #double array return ("GArray *", "DBUS_TYPE_G_DOUBLE_ARRAY", "BOXED", True) elif s == 'ab': #boolean array return ("GArray *", "DBUS_TYPE_G_BOOLEAN_ARRAY", "BOXED", True) elif s == 'ao': #object path array return ("GArray *", "DBUS_TYPE_G_OBJECT_ARRAY", "BOXED", True) elif s == 'a{ss}': #hash table of string to string return ("GHashTable *", "DBUS_TYPE_G_STRING_STRING_HASHTABLE", "BOXED", False) elif s[:2] == 'a{': #some arbitrary hash tables if s[2] not in ('y', 'b', 'n', 'q', 'i', 'u', 's', 'o', 'g'): raise Exception, "can't index a hashtable off non-basic type " + s first = type_to_gtype(s[2]) second = type_to_gtype(s[3:-1]) return ("GHashTable *", "(dbus_g_type_get_map (\"GHashTable\", " + first[1] + ", " + second[1] + "))", "BOXED", False) elif s[:2] in ('a(', 'aa'): # array of structs or arrays, recurse gtype = type_to_gtype(s[1:])[1] return ("GPtrArray *", "(dbus_g_type_get_collection (\"GPtrArray\", "+gtype+"))", "BOXED", True) elif s[:1] == '(': #struct gtype = "(dbus_g_type_get_struct (\"GValueArray\", " for subsig in Signature(s[1:-1]): gtype = gtype + type_to_gtype(subsig)[1] + ", " gtype = gtype + "G_TYPE_INVALID))" return ("GValueArray *", gtype, "BOXED", True) # we just don't know .. raise Exception, "don't know the GType for " + s def xml_escape(s): s = s.replace('&', '&').replace("'", ''').replace('"', '"') return s.replace('<', '<').replace('>', '>') telepathy-rakia-0.8.0/tools/glib-errors-enum-body.xsl0000644000175000017500000000500312223047264017540 00000000000000 /* */ { TP_ERROR_, "TP_ERROR_", "" }, /* Generated from the Telepathy spec */ #include <_gen/telepathy-errors.h> GType tp_error_get_type (void) { static GType etype = 0; if (G_UNLIKELY (etype == 0)) { static const GEnumValue values[] = { }; etype = g_enum_register_static ("TpError", values); } return etype; } telepathy-rakia-0.8.0/tools/check-c-style.sh0000644000175000017500000000376412223047264015667 00000000000000#!/bin/sh fail=0 ( . "${tools_dir}"/check-misc.sh ) || fail=$? if grep -n '^ *GError *\*[[:alpha:]_][[:alnum:]_]* *;' "$@" then echo "^^^ The above files contain uninitialized GError*s - they should be" echo " initialized to NULL" fail=1 fi # The first regex finds function calls like foo() (as opposed to foo ()). # It attempts to ignore string constants (may cause false negatives). # The second and third ignore block comments (gtkdoc uses foo() as markup). # The fourth ignores cpp so you can # #define foo(bar) (_real_foo (__FUNC__, bar)) (cpp insists on foo() style). if grep -n '^[^"]*[[:lower:]](' "$@" \ | grep -v '^[-[:alnum:]_./]*:[[:digit:]]*: *\*' \ | grep -v '^[-[:alnum:]_./]*:[[:digit:]]*: */\*' \ | grep -v '^[-[:alnum:]_./]*:[[:digit:]]*: *#' then echo "^^^ Our coding style is to use function calls like foo (), not foo()" fail=1 fi if grep -En '[(][[:alnum:]_]+ ?\*[)][(]?[[:alpha:]_]' "$@"; then echo "^^^ Our coding style is to have a space between a cast and the " echo " thing being cast" fail=1 fi # this only spots casts if grep -En '[(][[:alnum:]_]+\*+[)]' "$@"; then echo "^^^ Our coding style is to have a space before the * of pointer types" echo " (regex 1)" fail=1 fi # ... and this only spots variable declarations and function return types if grep -En '^ *(static |const |)* *[[:alnum:]_]+\*+([[:alnum:]_]|;|$)' \ "$@"; then echo "^^^ Our coding style is to have a space before the * of pointer types" echo " (regex 2)" fail=1 fi if grep -n 'g_hash_table_destroy' "$@"; then echo "^^^ Our coding style is to use g_hash_table_unref" fail=1 fi for p in "" "ptr_" "byte_"; do if grep -En "g_${p}array_free \(([^ ,]+), TRUE\)" "$@"; then echo "^^^ Our coding style is to use g_${p}array_unref in the case " echo " the underlying C array is not used" fail=1 fi done if test -n "$CHECK_FOR_LONG_LINES" then if egrep -n '.{80,}' "$@" then echo "^^^ The above files contain long lines" fail=1 fi fi exit $fail telepathy-rakia-0.8.0/tools/telepathy.am0000644000175000017500000000455512223047264015215 00000000000000## Useful top-level Makefile.am snippets for Telepathy projects. dist-hook: chmod u+w ${distdir}/ChangeLog if test -d ${top_srcdir}/.git; then \ ( cd ${top_srcdir} && git log --date=iso $(CHANGELOG_RANGE) ) > ${distdir}/ChangeLog; \ fi distcheck-hook: @test "z$(CHECK_FOR_UNRELEASED)" = z || \ case @VERSION@ in \ *.*.*.*|*+) ;; \ *) \ if grep -r UNRELEASED $(CHECK_FOR_UNRELEASED); \ then \ echo "^^^ This is meant to be a release, but some files say UNRELEASED" >&2; \ exit 2; \ fi \ ;; \ esac _is-release-check: @case @VERSION@ in \ (*.*.*.*|*+) \ echo "Hey! @VERSION@ is not a release!" >&2; \ exit 2; \ ;; \ esac @cd ${top_srcdir} && \ if ! git diff --no-ext-diff --quiet --exit-code; then \ echo "Hey! Your tree is dirty! No release for you." >&2; \ exit 2; \ fi @cd ${top_srcdir} && \ if ! git diff --cached --no-ext-diff --quiet --exit-code; then \ echo "Hey! You have changes staged! No release for you." >&2; \ exit 2; \ fi %.tar.gz.asc: %.tar.gz $(AM_V_GEN)gpg --detach-sign --armor $@ @PACKAGE@-@VERSION@.tar.gz: $(MAKE) _is-release-check $(MAKE) check $(MAKE) distcheck maintainer-prepare-release: $(MAKE) _is-release-check $(MAKE) all $(MAKE) distcheck $(MAKE) release-mail git tag -s @PACKAGE@-@VERSION@ -m @PACKAGE@' '@VERSION@ gpg --detach-sign --armor @PACKAGE@-@VERSION@.tar.gz release-mail: NEWS $(AM_V_GEN)(python $(top_srcdir)/tools/make-release-mail.py \ @PACKAGE@ @VERSION@ $(top_srcdir)/NEWS > $@.tmp && \ mv $@.tmp $@) maintainer-upload-release: _maintainer-upload-release _maintainer-upload-release-check: _is-release-check test -f @PACKAGE@-@VERSION@.tar.gz test -f @PACKAGE@-@VERSION@.tar.gz.asc gpg --verify @PACKAGE@-@VERSION@.tar.gz.asc _maintainer-upload-release: _maintainer-upload-release-check rsync -vzP @PACKAGE@-@VERSION@.tar.gz telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/releases/@PACKAGE@/@PACKAGE@-@VERSION@.tar.gz rsync -vzP @PACKAGE@-@VERSION@.tar.gz.asc telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/releases/@PACKAGE@/@PACKAGE@-@VERSION@.tar.gz.asc maintainer-make-release: $(MAKE) maintainer-prepare-release $(MAKE) maintainer-upload-release @echo "Now:" @echo " • bump the nano-version;" @echo " • push the branch and tags upstream; and" @echo " • send release-mail to ." ## vim:set ft=automake: telepathy-rakia-0.8.0/tools/identity.xsl0000644000175000017500000000033512223047264015250 00000000000000 telepathy-rakia-0.8.0/tools/check-misc.sh0000644000175000017500000000036012223047264015227 00000000000000#!/bin/sh fail=0 ( . "${tools_dir}"/check-whitespace.sh ) || fail=$? if egrep '(Free\s*Software\s*Foundation.*02139|02111-1307)' "$@" then echo "^^^ The above files contain the FSF's old address in GPL headers" fail=1 fi exit $fail telepathy-rakia-0.8.0/tools/glib-interfaces-body-generator.xsl0000644000175000017500000000360112223047264021373 00000000000000 GQuark _iface_quark_ (void) { static GQuark quark = 0; if (G_UNLIKELY (quark == 0)) { quark = g_quark_from_static_string (" "); } return quark; } telepathy-rakia-0.8.0/tools/check-coding-style.mk0000644000175000017500000000074512223047264016701 00000000000000check-local: check-coding-style check-coding-style: @fail=0; \ if test -n "$(check_misc_sources)"; then \ tools_dir=$(top_srcdir)/tools \ sh $(top_srcdir)/tools/check-misc.sh \ $(check_misc_sources) || fail=1; \ fi; \ if test -n "$(check_c_sources)"; then \ tools_dir=$(top_srcdir)/tools \ sh $(top_srcdir)/tools/check-c-style.sh \ $(check_c_sources) || fail=1; \ fi;\ if test yes = "$(ENABLE_CODING_STYLE_CHECKS)"; then \ exit "$$fail";\ else \ exit 0;\ fi telepathy-rakia-0.8.0/tools/glib-ginterface-gen.py0000644000175000017500000006304012223047264017034 00000000000000#!/usr/bin/python # glib-ginterface-gen.py: service-side interface generator # # Generate dbus-glib 0.x service GInterfaces from the Telepathy specification. # The master copy of this program is in the telepathy-glib repository - # please make any changes there. # # Copyright (C) 2006, 2007 Collabora Limited # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import sys import os.path import xml.dom.minidom from libglibcodegen import Signature, type_to_gtype, cmp_by_name, \ camelcase_to_lower, NS_TP, dbus_gutils_wincaps_to_uscore, \ signal_to_marshal_name, method_to_glue_marshal_name NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" class Generator(object): def __init__(self, dom, prefix, basename, signal_marshal_prefix, headers, end_headers, not_implemented_func, allow_havoc): self.dom = dom self.__header = [] self.__body = [] assert prefix.endswith('_') assert not signal_marshal_prefix.endswith('_') # The main_prefix, sub_prefix thing is to get: # FOO_ -> (FOO_, _) # FOO_SVC_ -> (FOO_, _SVC_) # but # FOO_BAR/ -> (FOO_BAR_, _) # FOO_BAR/SVC_ -> (FOO_BAR_, _SVC_) if '/' in prefix: main_prefix, sub_prefix = prefix.upper().split('/', 1) prefix = prefix.replace('/', '_') else: main_prefix, sub_prefix = prefix.upper().split('_', 1) self.MAIN_PREFIX_ = main_prefix + '_' self._SUB_PREFIX_ = '_' + sub_prefix self.Prefix_ = prefix self.Prefix = prefix.replace('_', '') self.prefix_ = prefix.lower() self.PREFIX_ = prefix.upper() self.signal_marshal_prefix = signal_marshal_prefix self.headers = headers self.end_headers = end_headers self.not_implemented_func = not_implemented_func self.allow_havoc = allow_havoc def h(self, s): self.__header.append(s) def b(self, s): self.__body.append(s) def do_node(self, node): node_name = node.getAttribute('name').replace('/', '') node_name_mixed = self.node_name_mixed = node_name.replace('_', '') node_name_lc = self.node_name_lc = node_name.lower() node_name_uc = self.node_name_uc = node_name.upper() interfaces = node.getElementsByTagName('interface') assert len(interfaces) == 1, interfaces interface = interfaces[0] self.iface_name = interface.getAttribute('name') tmp = interface.getAttribute('tp:implement-service') if tmp == "no": return tmp = interface.getAttribute('tp:causes-havoc') if tmp and not self.allow_havoc: raise AssertionError('%s is %s' % (self.iface_name, tmp)) self.b('static const DBusGObjectInfo _%s%s_object_info;' % (self.prefix_, node_name_lc)) self.b('') methods = interface.getElementsByTagName('method') signals = interface.getElementsByTagName('signal') properties = interface.getElementsByTagName('property') # Don't put properties in dbus-glib glue glue_properties = [] self.b('struct _%s%sClass {' % (self.Prefix, node_name_mixed)) self.b(' GTypeInterface parent_class;') for method in methods: self.b(' %s %s;' % self.get_method_impl_names(method)) self.b('};') self.b('') if signals: self.b('enum {') for signal in signals: self.b(' %s,' % self.get_signal_const_entry(signal)) self.b(' N_%s_SIGNALS' % node_name_uc) self.b('};') self.b('static guint %s_signals[N_%s_SIGNALS] = {0};' % (node_name_lc, node_name_uc)) self.b('') self.b('static void %s%s_base_init (gpointer klass);' % (self.prefix_, node_name_lc)) self.b('') self.b('GType') self.b('%s%s_get_type (void)' % (self.prefix_, node_name_lc)) self.b('{') self.b(' static GType type = 0;') self.b('') self.b(' if (G_UNLIKELY (type == 0))') self.b(' {') self.b(' static const GTypeInfo info = {') self.b(' sizeof (%s%sClass),' % (self.Prefix, node_name_mixed)) self.b(' %s%s_base_init, /* base_init */' % (self.prefix_, node_name_lc)) self.b(' NULL, /* base_finalize */') self.b(' NULL, /* class_init */') self.b(' NULL, /* class_finalize */') self.b(' NULL, /* class_data */') self.b(' 0,') self.b(' 0, /* n_preallocs */') self.b(' NULL /* instance_init */') self.b(' };') self.b('') self.b(' type = g_type_register_static (G_TYPE_INTERFACE,') self.b(' "%s%s", &info, 0);' % (self.Prefix, node_name_mixed)) self.b(' }') self.b('') self.b(' return type;') self.b('}') self.b('') self.h('/**') self.h(' * %s%s:' % (self.Prefix, node_name_mixed)) self.h(' *') self.h(' * Dummy typedef representing any implementation of this ' 'interface.') self.h(' */') self.h('typedef struct _%s%s %s%s;' % (self.Prefix, node_name_mixed, self.Prefix, node_name_mixed)) self.h('') self.h('/**') self.h(' * %s%sClass:' % (self.Prefix, node_name_mixed)) self.h(' *') self.h(' * The class of %s%s.' % (self.Prefix, node_name_mixed)) self.h(' */') self.h('typedef struct _%s%sClass %s%sClass;' % (self.Prefix, node_name_mixed, self.Prefix, node_name_mixed)) self.h('') self.h('GType %s%s_get_type (void);' % (self.prefix_, node_name_lc)) gtype = self.current_gtype = \ self.MAIN_PREFIX_ + 'TYPE' + self._SUB_PREFIX_ + node_name_uc classname = self.Prefix + node_name_mixed self.h('#define %s \\\n (%s%s_get_type ())' % (gtype, self.prefix_, node_name_lc)) self.h('#define %s%s(obj) \\\n' ' (G_TYPE_CHECK_INSTANCE_CAST((obj), %s, %s))' % (self.PREFIX_, node_name_uc, gtype, classname)) self.h('#define %sIS%s%s(obj) \\\n' ' (G_TYPE_CHECK_INSTANCE_TYPE((obj), %s))' % (self.MAIN_PREFIX_, self._SUB_PREFIX_, node_name_uc, gtype)) self.h('#define %s%s_GET_CLASS(obj) \\\n' ' (G_TYPE_INSTANCE_GET_INTERFACE((obj), %s, %sClass))' % (self.PREFIX_, node_name_uc, gtype, classname)) self.h('') self.h('') base_init_code = [] for method in methods: self.do_method(method) for signal in signals: base_init_code.extend(self.do_signal(signal)) self.b('static inline void') self.b('%s%s_base_init_once (gpointer klass)' % (self.prefix_, node_name_lc)) self.b('{') self.b(' static TpDBusPropertiesMixinPropInfo properties[%d] = {' % (len(properties) + 1)) for m in properties: access = m.getAttribute('access') assert access in ('read', 'write', 'readwrite') if access == 'read': flags = 'TP_DBUS_PROPERTIES_MIXIN_FLAG_READ' elif access == 'write': flags = 'TP_DBUS_PROPERTIES_MIXIN_FLAG_WRITE' else: flags = ('TP_DBUS_PROPERTIES_MIXIN_FLAG_READ | ' 'TP_DBUS_PROPERTIES_MIXIN_FLAG_WRITE') self.b(' { 0, %s, "%s", 0, NULL, NULL }, /* %s */' % (flags, m.getAttribute('type'), m.getAttribute('name'))) self.b(' { 0, 0, NULL, 0, NULL, NULL }') self.b(' };') self.b(' static TpDBusPropertiesMixinIfaceInfo interface =') self.b(' { 0, properties, NULL, NULL };') self.b('') self.b(' interface.dbus_interface = g_quark_from_static_string ' '("%s");' % self.iface_name) for i, m in enumerate(properties): self.b(' properties[%d].name = g_quark_from_static_string ("%s");' % (i, m.getAttribute('name'))) self.b(' properties[%d].type = %s;' % (i, type_to_gtype(m.getAttribute('type'))[1])) self.b(' tp_svc_interface_set_dbus_properties_info (%s, &interface);' % self.current_gtype) self.b('') for s in base_init_code: self.b(s) self.b(' dbus_g_object_type_install_info (%s%s_get_type (),' % (self.prefix_, node_name_lc)) self.b(' &_%s%s_object_info);' % (self.prefix_, node_name_lc)) self.b('}') self.b('static void') self.b('%s%s_base_init (gpointer klass)' % (self.prefix_, node_name_lc)) self.b('{') self.b(' static gboolean initialized = FALSE;') self.b('') self.b(' if (!initialized)') self.b(' {') self.b(' initialized = TRUE;') self.b(' %s%s_base_init_once (klass);' % (self.prefix_, node_name_lc)) self.b(' }') # insert anything we need to do per implementation here self.b('}') self.h('') self.b('static const DBusGMethodInfo _%s%s_methods[] = {' % (self.prefix_, node_name_lc)) method_blob, offsets = self.get_method_glue(methods) for method, offset in zip(methods, offsets): self.do_method_glue(method, offset) self.b('};') self.b('') self.b('static const DBusGObjectInfo _%s%s_object_info = {' % (self.prefix_, node_name_lc)) self.b(' 0,') # version self.b(' _%s%s_methods,' % (self.prefix_, node_name_lc)) self.b(' %d,' % len(methods)) self.b('"' + method_blob.replace('\0', '\\0') + '",') self.b('"' + self.get_signal_glue(signals).replace('\0', '\\0') + '",') self.b('"' + self.get_property_glue(glue_properties).replace('\0', '\\0') + '",') self.b('};') self.b('') self.node_name_mixed = None self.node_name_lc = None self.node_name_uc = None def get_method_glue(self, methods): info = [] offsets = [] for method in methods: offsets.append(len(''.join(info))) info.append(self.iface_name + '\0') info.append(method.getAttribute('name') + '\0') info.append('A\0') # async counter = 0 for arg in method.getElementsByTagName('arg'): out = arg.getAttribute('direction') == 'out' name = arg.getAttribute('name') if not name: assert out name = 'arg%u' % counter counter += 1 info.append(name + '\0') if out: info.append('O\0') else: info.append('I\0') if out: info.append('F\0') # not const info.append('N\0') # not error or return info.append(arg.getAttribute('type') + '\0') info.append('\0') return ''.join(info) + '\0', offsets def do_method_glue(self, method, offset): lc_name = camelcase_to_lower(method.getAttribute('name')) marshaller = method_to_glue_marshal_name(method, self.signal_marshal_prefix) wrapper = self.prefix_ + self.node_name_lc + '_' + lc_name self.b(" { (GCallback) %s, %s, %d }," % (wrapper, marshaller, offset)) def get_signal_glue(self, signals): info = [] for signal in signals: info.append(self.iface_name) info.append(signal.getAttribute('name')) return '\0'.join(info) + '\0\0' # the implementation can be the same get_property_glue = get_signal_glue def get_method_impl_names(self, method): dbus_method_name = method.getAttribute('name') class_member_name = camelcase_to_lower(dbus_method_name) stub_name = (self.prefix_ + self.node_name_lc + '_' + class_member_name) return (stub_name + '_impl', class_member_name) def do_method(self, method): assert self.node_name_mixed is not None in_class = [] # Examples refer to Thing.DoStuff (su) -> ii # DoStuff dbus_method_name = method.getAttribute('name') # do_stuff class_member_name = camelcase_to_lower(dbus_method_name) # void tp_svc_thing_do_stuff (TpSvcThing *, const char *, guint, # DBusGMethodInvocation *); stub_name = (self.prefix_ + self.node_name_lc + '_' + class_member_name) # typedef void (*tp_svc_thing_do_stuff_impl) (TpSvcThing *, # const char *, guint, DBusGMethodInvocation); impl_name = stub_name + '_impl' # void tp_svc_thing_return_from_do_stuff (DBusGMethodInvocation *, # gint, gint); ret_name = (self.prefix_ + self.node_name_lc + '_return_from_' + class_member_name) # Gather arguments in_args = [] out_args = [] for i in method.getElementsByTagName('arg'): name = i.getAttribute('name') direction = i.getAttribute('direction') or 'in' dtype = i.getAttribute('type') assert direction in ('in', 'out') if name: name = direction + '_' + name elif direction == 'in': name = direction + str(len(in_args)) else: name = direction + str(len(out_args)) ctype, gtype, marshaller, pointer = type_to_gtype(dtype) if pointer: ctype = 'const ' + ctype struct = (ctype, name) if direction == 'in': in_args.append(struct) else: out_args.append(struct) # Implementation type declaration (in header, docs in body) self.b('/**') self.b(' * %s:' % impl_name) self.b(' * @self: The object implementing this interface') for (ctype, name) in in_args: self.b(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) self.b(' * @context: Used to return values or throw an error') self.b(' *') self.b(' * The signature of an implementation of the D-Bus method') self.b(' * %s on interface %s.' % (dbus_method_name, self.iface_name)) self.b(' */') self.h('typedef void (*%s) (%s%s *self,' % (impl_name, self.Prefix, self.node_name_mixed)) for (ctype, name) in in_args: self.h(' %s%s,' % (ctype, name)) self.h(' DBusGMethodInvocation *context);') # Class member (in class definition) in_class.append(' %s %s;' % (impl_name, class_member_name)) # Stub definition (in body only - it's static) self.b('static void') self.b('%s (%s%s *self,' % (stub_name, self.Prefix, self.node_name_mixed)) for (ctype, name) in in_args: self.b(' %s%s,' % (ctype, name)) self.b(' DBusGMethodInvocation *context)') self.b('{') self.b(' %s impl = (%s%s_GET_CLASS (self)->%s);' % (impl_name, self.PREFIX_, self.node_name_uc, class_member_name)) self.b('') self.b(' if (impl != NULL)') tmp = ['self'] + [name for (ctype, name) in in_args] + ['context'] self.b(' {') self.b(' (impl) (%s);' % ',\n '.join(tmp)) self.b(' }') self.b(' else') self.b(' {') if self.not_implemented_func: self.b(' %s (context);' % self.not_implemented_func) else: self.b(' GError e = { DBUS_GERROR, ') self.b(' DBUS_GERROR_UNKNOWN_METHOD,') self.b(' "Method not implemented" };') self.b('') self.b(' dbus_g_method_return_error (context, &e);') self.b(' }') self.b('}') self.b('') # Implementation registration (in both header and body) self.h('void %s%s_implement_%s (%s%sClass *klass, %s impl);' % (self.prefix_, self.node_name_lc, class_member_name, self.Prefix, self.node_name_mixed, impl_name)) self.b('/**') self.b(' * %s%s_implement_%s:' % (self.prefix_, self.node_name_lc, class_member_name)) self.b(' * @klass: A class whose instances implement this interface') self.b(' * @impl: A callback used to implement the %s D-Bus method' % dbus_method_name) self.b(' *') self.b(' * Register an implementation for the %s method in the vtable' % dbus_method_name) self.b(' * of an implementation of this interface. To be called from') self.b(' * the interface init function.') self.b(' */') self.b('void') self.b('%s%s_implement_%s (%s%sClass *klass, %s impl)' % (self.prefix_, self.node_name_lc, class_member_name, self.Prefix, self.node_name_mixed, impl_name)) self.b('{') self.b(' klass->%s = impl;' % class_member_name) self.b('}') self.b('') # Return convenience function (static inline, in header) self.h('/**') self.h(' * %s:' % ret_name) self.h(' * @context: The D-Bus method invocation context') for (ctype, name) in out_args: self.h(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) self.h(' *') self.h(' * Return successfully by calling dbus_g_method_return().') self.h(' * This inline function exists only to provide type-safety.') self.h(' */') tmp = (['DBusGMethodInvocation *context'] + [ctype + name for (ctype, name) in out_args]) self.h('static inline') self.h('/* this comment is to stop gtkdoc realising this is static */') self.h(('void %s (' % ret_name) + (',\n '.join(tmp)) + ');') self.h('static inline void') self.h(('%s (' % ret_name) + (',\n '.join(tmp)) + ')') self.h('{') tmp = ['context'] + [name for (ctype, name) in out_args] self.h(' dbus_g_method_return (' + ',\n '.join(tmp) + ');') self.h('}') self.h('') return in_class def get_signal_const_entry(self, signal): assert self.node_name_uc is not None return ('SIGNAL_%s_%s' % (self.node_name_uc, signal.getAttribute('name'))) def do_signal(self, signal): assert self.node_name_mixed is not None in_base_init = [] # for signal: Thing::StuffHappened (s, u) # we want to emit: # void tp_svc_thing_emit_stuff_happened (gpointer instance, # const char *arg0, guint arg1); dbus_name = signal.getAttribute('name') stub_name = (self.prefix_ + self.node_name_lc + '_emit_' + camelcase_to_lower(dbus_name)) const_name = self.get_signal_const_entry(signal) # Gather arguments args = [] for i in signal.getElementsByTagName('arg'): name = i.getAttribute('name') dtype = i.getAttribute('type') tp_type = i.getAttribute('tp:type') if name: name = 'arg_' + name else: name = 'arg' + str(len(args)) ctype, gtype, marshaller, pointer = type_to_gtype(dtype) if pointer: ctype = 'const ' + ctype struct = (ctype, name, gtype) args.append(struct) tmp = (['gpointer instance'] + [ctype + name for (ctype, name, gtype) in args]) self.h(('void %s (' % stub_name) + (',\n '.join(tmp)) + ');') # FIXME: emit docs self.b('/**') self.b(' * %s:' % stub_name) self.b(' * @instance: The object implementing this interface') for (ctype, name, gtype) in args: self.b(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) self.b(' *') self.b(' * Type-safe wrapper around g_signal_emit to emit the') self.b(' * %s signal on interface %s.' % (dbus_name, self.iface_name)) self.b(' */') self.b('void') self.b(('%s (' % stub_name) + (',\n '.join(tmp)) + ')') self.b('{') self.b(' g_assert (instance != NULL);') self.b(' g_assert (G_TYPE_CHECK_INSTANCE_TYPE (instance, %s));' % (self.current_gtype)) tmp = (['instance', '%s_signals[%s]' % (self.node_name_lc, const_name), '0'] + [name for (ctype, name, gtype) in args]) self.b(' g_signal_emit (' + ',\n '.join(tmp) + ');') self.b('}') self.b('') in_base_init.append(' %s_signals[%s] =' % (self.node_name_lc, const_name)) in_base_init.append(' g_signal_new ("%s",' % (dbus_gutils_wincaps_to_uscore(dbus_name).replace('_', '-'))) in_base_init.append(' G_OBJECT_CLASS_TYPE (klass),') in_base_init.append(' G_SIGNAL_RUN_LAST|G_SIGNAL_DETAILED,') in_base_init.append(' 0,') in_base_init.append(' NULL, NULL,') in_base_init.append(' %s,' % signal_to_marshal_name(signal, self.signal_marshal_prefix)) in_base_init.append(' G_TYPE_NONE,') tmp = ['%d' % len(args)] + [gtype for (ctype, name, gtype) in args] in_base_init.append(' %s);' % ',\n '.join(tmp)) in_base_init.append('') return in_base_init def __call__(self): self.h('#include ') self.h('#include ') self.h('#include ') self.h('') self.h('G_BEGIN_DECLS') self.h('') self.b('#include "%s.h"' % basename) self.b('') for header in self.headers: self.b('#include %s' % header) self.b('') nodes = self.dom.getElementsByTagName('node') nodes.sort(cmp_by_name) for node in nodes: self.do_node(node) self.h('') self.h('G_END_DECLS') self.b('') for header in self.end_headers: self.b('#include %s' % header) self.h('') self.b('') open(basename + '.h', 'w').write('\n'.join(self.__header)) open(basename + '.c', 'w').write('\n'.join(self.__body)) def cmdline_error(): print """\ usage: gen-ginterface [OPTIONS] xmlfile Prefix_ options: --include='' (may be repeated) --include='"header.h"' (ditto) --include-end='"header.h"' (ditto) Include extra headers in the generated .c file --signal-marshal-prefix='prefix' Use the given prefix on generated signal marshallers (default is prefix.lower()). --filename='BASENAME' Set the basename for the output files (default is prefix.lower() + 'ginterfaces') --not-implemented-func='symbol' Set action when methods not implemented in the interface vtable are called. symbol must have signature void symbol (DBusGMethodInvocation *context) and return some sort of "not implemented" error via dbus_g_method_return_error (context, ...) """ sys.exit(1) if __name__ == '__main__': from getopt import gnu_getopt options, argv = gnu_getopt(sys.argv[1:], '', ['filename=', 'signal-marshal-prefix=', 'include=', 'include-end=', 'allow-unstable', 'not-implemented-func=']) try: prefix = argv[1] except IndexError: cmdline_error() basename = prefix.lower() + 'ginterfaces' signal_marshal_prefix = prefix.lower().rstrip('_') headers = [] end_headers = [] not_implemented_func = '' allow_havoc = False for option, value in options: if option == '--filename': basename = value elif option == '--signal-marshal-prefix': signal_marshal_prefix = value elif option == '--include': if value[0] not in '<"': value = '"%s"' % value headers.append(value) elif option == '--include-end': if value[0] not in '<"': value = '"%s"' % value end_headers.append(value) elif option == '--not-implemented-func': not_implemented_func = value elif option == '--allow-unstable': allow_havoc = True try: dom = xml.dom.minidom.parse(argv[0]) except IndexError: cmdline_error() Generator(dom, prefix, basename, signal_marshal_prefix, headers, end_headers, not_implemented_func, allow_havoc)() telepathy-rakia-0.8.0/tools/glib-signals-marshal-gen.py0000644000175000017500000000254112223047264020011 00000000000000#!/usr/bin/python import sys import xml.dom.minidom from string import ascii_letters, digits from libglibcodegen import signal_to_marshal_name, method_to_glue_marshal_name class Generator(object): def __init__(self, dom): self.dom = dom self.marshallers = {} def do_method(self, method): marshaller = method_to_glue_marshal_name(method, 'PREFIX') assert '__' in marshaller rhs = marshaller.split('__', 1)[1].split('_') self.marshallers[marshaller] = rhs def do_signal(self, signal): marshaller = signal_to_marshal_name(signal, 'PREFIX') assert '__' in marshaller rhs = marshaller.split('__', 1)[1].split('_') self.marshallers[marshaller] = rhs def __call__(self): methods = self.dom.getElementsByTagName('method') for method in methods: self.do_method(method) signals = self.dom.getElementsByTagName('signal') for signal in signals: self.do_signal(signal) all = self.marshallers.keys() all.sort() for marshaller in all: rhs = self.marshallers[marshaller] if not marshaller.startswith('g_cclosure'): print 'VOID:' + ','.join(rhs) if __name__ == '__main__': argv = sys.argv[1:] dom = xml.dom.minidom.parse(argv[0]) Generator(dom)() telepathy-rakia-0.8.0/tools/glib-client-gen.py0000644000175000017500000012410312223047264016201 00000000000000#!/usr/bin/python # glib-client-gen.py: "I Can't Believe It's Not dbus-binding-tool" # # Generate GLib client wrappers from the Telepathy specification. # The master copy of this program is in the telepathy-glib repository - # please make any changes there. # # Copyright (C) 2006-2008 Collabora Ltd. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import sys import os.path import xml.dom.minidom from getopt import gnu_getopt from libglibcodegen import Signature, type_to_gtype, cmp_by_name, \ camelcase_to_lower, get_docstring, xml_escape NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" class Generator(object): def __init__(self, dom, prefix, basename, opts): self.dom = dom self.__header = [] self.__body = [] self.prefix_lc = prefix.lower() self.prefix_uc = prefix.upper() self.prefix_mc = prefix.replace('_', '') self.basename = basename self.group = opts.get('--group', None) self.iface_quark_prefix = opts.get('--iface-quark-prefix', None) self.proxy_cls = opts.get('--subclass', 'TpProxy') + ' *' self.proxy_arg = opts.get('--subclass', 'void') + ' *' self.proxy_assert = opts.get('--subclass-assert', 'TP_IS_PROXY') self.proxy_doc = ('A #%s or subclass' % opts.get('--subclass', 'TpProxy')) if self.proxy_arg == 'void *': self.proxy_arg = 'gpointer ' def h(self, s): self.__header.append(s) def b(self, s): self.__body.append(s) def get_iface_quark(self): assert self.iface_dbus is not None assert self.iface_uc is not None if self.iface_quark_prefix is None: return 'g_quark_from_static_string (\"%s\")' % self.iface_dbus else: return '%s_%s' % (self.iface_quark_prefix, self.iface_uc) def do_signal(self, iface, signal): iface_lc = iface.lower() member = signal.getAttribute('name') member_lc = camelcase_to_lower(member) member_uc = member_lc.upper() arg_count = 0 args = [] out_args = [] for arg in signal.getElementsByTagName('arg'): name = arg.getAttribute('name') type = arg.getAttribute('type') tp_type = arg.getAttribute('tp:type') if not name: name = 'arg%u' % arg_count arg_count += 1 else: name = 'arg_%s' % name info = type_to_gtype(type) args.append((name, info, tp_type, arg)) callback_name = ('%s_%s_signal_callback_%s' % (self.prefix_lc, iface_lc, member_lc)) collect_name = ('_%s_%s_collect_args_of_%s' % (self.prefix_lc, iface_lc, member_lc)) invoke_name = ('_%s_%s_invoke_callback_for_%s' % (self.prefix_lc, iface_lc, member_lc)) # Example: # # typedef void (*tp_cli_connection_signal_callback_new_channel) # (TpConnection *proxy, const gchar *arg_object_path, # const gchar *arg_channel_type, guint arg_handle_type, # guint arg_handle, gboolean arg_suppress_handler, # gpointer user_data, GObject *weak_object); self.b('/**') self.b(' * %s:' % callback_name) self.b(' * @proxy: The proxy on which %s_%s_connect_to_%s ()' % (self.prefix_lc, iface_lc, member_lc)) self.b(' * was called') for arg in args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' * @%s: %s' % (name, xml_escape(get_docstring(elt) or '(Undocumented)'))) self.b(' * @user_data: User-supplied data') self.b(' * @weak_object: User-supplied weakly referenced object') self.b(' *') self.b(' * Represents the signature of a callback for the signal %s.' % member) self.b(' */') self.h('typedef void (*%s) (%sproxy,' % (callback_name, self.proxy_cls)) for arg in args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.h(' %s%s%s,' % (const, ctype, name)) self.h(' gpointer user_data, GObject *weak_object);') if args: self.b('static void') self.b('%s (DBusGProxy *proxy,' % collect_name) for arg in args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.b(' %s%s%s,' % (const, ctype, name)) self.b(' TpProxySignalConnection *sc)') self.b('{') self.b(' GValueArray *args = g_value_array_new (%d);' % len(args)) self.b(' GValue blank = { 0 };') self.b(' guint i;') self.b('') self.b(' g_value_init (&blank, G_TYPE_INT);') self.b('') self.b(' for (i = 0; i < %d; i++)' % len(args)) self.b(' g_value_array_append (args, &blank);') self.b('') for i, arg in enumerate(args): name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' g_value_unset (args->values + %d);' % i) self.b(' g_value_init (args->values + %d, %s);' % (i, gtype)) if gtype == 'G_TYPE_STRING': self.b(' g_value_set_string (args->values + %d, %s);' % (i, name)) elif marshaller == 'BOXED': self.b(' g_value_set_boxed (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_UCHAR': self.b(' g_value_set_uchar (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_BOOLEAN': self.b(' g_value_set_boolean (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_INT': self.b(' g_value_set_int (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_UINT': self.b(' g_value_set_uint (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_INT64': self.b(' g_value_set_int (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_UINT64': self.b(' g_value_set_uint (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_DOUBLE': self.b(' g_value_set_double (args->values + %d, %s);' % (i, name)) else: assert False, ("Don't know how to put %s in a GValue" % gtype) self.b('') self.b(' tp_proxy_signal_connection_v0_take_results (sc, args);') self.b('}') self.b('static void') self.b('%s (TpProxy *tpproxy,' % invoke_name) self.b(' GError *error,') self.b(' GValueArray *args,') self.b(' GCallback generic_callback,') self.b(' gpointer user_data,') self.b(' GObject *weak_object)') self.b('{') self.b(' %s callback =' % callback_name) self.b(' (%s) generic_callback;' % callback_name) self.b('') self.b(' if (callback != NULL)') self.b(' callback (g_object_ref (tpproxy),') # FIXME: factor out into a function for i, arg in enumerate(args): name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info if marshaller == 'BOXED': self.b(' g_value_get_boxed (args->values + %d),' % i) elif gtype == 'G_TYPE_STRING': self.b(' g_value_get_string (args->values + %d),' % i) elif gtype == 'G_TYPE_UCHAR': self.b(' g_value_get_uchar (args->values + %d),' % i) elif gtype == 'G_TYPE_BOOLEAN': self.b(' g_value_get_boolean (args->values + %d),' % i) elif gtype == 'G_TYPE_UINT': self.b(' g_value_get_uint (args->values + %d),' % i) elif gtype == 'G_TYPE_INT': self.b(' g_value_get_int (args->values + %d),' % i) elif gtype == 'G_TYPE_UINT64': self.b(' g_value_get_uint64 (args->values + %d),' % i) elif gtype == 'G_TYPE_INT64': self.b(' g_value_get_int64 (args->values + %d),' % i) elif gtype == 'G_TYPE_DOUBLE': self.b(' g_value_get_double (args->values + %d),' % i) else: assert False, "Don't know how to get %s from a GValue" % gtype self.b(' user_data,') self.b(' weak_object);') self.b('') if len(args) > 0: self.b(' g_value_array_free (args);') else: self.b(' if (args != NULL)') self.b(' g_value_array_free (args);') self.b('') self.b(' g_object_unref (tpproxy);') self.b('}') # Example: # # TpProxySignalConnection * # tp_cli_connection_connect_to_new_channel # (TpConnection *proxy, # tp_cli_connection_signal_callback_new_channel callback, # gpointer user_data, # GDestroyNotify destroy); # # destroy is invoked when the signal becomes disconnected. This # is either because the signal has been disconnected explicitly # by the user, because the TpProxy has become invalid and # emitted the 'invalidated' signal, or because the weakly referenced # object has gone away. self.b('/**') self.b(' * %s_%s_connect_to_%s:' % (self.prefix_lc, iface_lc, member_lc)) self.b(' * @proxy: %s' % self.proxy_doc) self.b(' * @callback: Callback to be called when the signal is') self.b(' * received') self.b(' * @user_data: User-supplied data for the callback') self.b(' * @destroy: Destructor for the user-supplied data, which') self.b(' * will be called when this signal is disconnected, or') self.b(' * before this function returns %NULL') self.b(' * @weak_object: A #GObject which will be weakly referenced; ') self.b(' * if it is destroyed, this callback will automatically be') self.b(' * disconnected') self.b(' * @error: If not %NULL, used to raise an error if %NULL is') self.b(' * returned') self.b(' *') self.b(' * Connect a handler to the signal %s.' % member) self.b(' *') self.b(' * %s' % xml_escape(get_docstring(signal) or '(Undocumented)')) self.b(' *') self.b(' * Returns: a #TpProxySignalConnection containing all of the') self.b(' * above, which can be used to disconnect the signal; or') self.b(' * %NULL if the proxy does not have the desired interface') self.b(' * or has become invalid.') self.b(' */') self.h('TpProxySignalConnection *%s_%s_connect_to_%s (%sproxy,' % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg)) self.h(' %s callback,' % callback_name) self.h(' gpointer user_data,') self.h(' GDestroyNotify destroy,') self.h(' GObject *weak_object,') self.h(' GError **error);') self.b('TpProxySignalConnection *') self.b('%s_%s_connect_to_%s (%sproxy,' % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg)) self.b(' %s callback,' % callback_name) self.b(' gpointer user_data,') self.b(' GDestroyNotify destroy,') self.b(' GObject *weak_object,') self.b(' GError **error)') self.b('{') self.b(' GType expected_types[%d] = {' % (len(args) + 1)) for arg in args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' %s,' % gtype) self.b(' G_TYPE_INVALID };') self.b('') self.b(' g_return_val_if_fail (%s (proxy), NULL);' % self.proxy_assert) self.b(' g_return_val_if_fail (callback != NULL, NULL);') self.b('') self.b(' return tp_proxy_signal_connection_v0_new ((TpProxy *) proxy,') self.b(' %s, \"%s\",' % (self.get_iface_quark(), member)) self.b(' expected_types,') if args: self.b(' G_CALLBACK (%s),' % collect_name) else: self.b(' NULL, /* no args => no collector function */') self.b(' %s,' % invoke_name) self.b(' G_CALLBACK (callback), user_data, destroy,') self.b(' weak_object, error);') self.b('}') self.b('') self.h('') def do_method(self, iface, method): iface_lc = iface.lower() member = method.getAttribute('name') member_lc = camelcase_to_lower(member) member_uc = member_lc.upper() in_count = 0 ret_count = 0 in_args = [] out_args = [] for arg in method.getElementsByTagName('arg'): name = arg.getAttribute('name') direction = arg.getAttribute('direction') type = arg.getAttribute('type') tp_type = arg.getAttribute('tp:type') if direction != 'out': if not name: name = 'in%u' % in_count in_count += 1 else: name = 'in_%s' % name else: if not name: name = 'out%u' % ret_count ret_count += 1 else: name = 'out_%s' % name info = type_to_gtype(type) if direction != 'out': in_args.append((name, info, tp_type, arg)) else: out_args.append((name, info, tp_type, arg)) # Async reply callback type # Example: # void (*tp_cli_properties_interface_callback_for_get_properties) # (TpProxy *proxy, # const GPtrArray *out0, # const GError *error, # gpointer user_data, # GObject *weak_object); self.b('/**') self.b(' * %s_%s_callback_for_%s:' % (self.prefix_lc, iface_lc, member_lc)) self.b(' * @proxy: the proxy on which the call was made') for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' * @%s: Used to return an \'out\' argument if @error is ' '%%NULL: %s' % (name, xml_escape(get_docstring(elt) or '(Undocumented)'))) self.b(' * @error: %NULL on success, or an error on failure') self.b(' * @user_data: user-supplied data') self.b(' * @weak_object: user-supplied object') self.b(' *') self.b(' * Signature of the callback called when a %s method call' % member) self.b(' * succeeds or fails.') self.b(' */') callback_name = '%s_%s_callback_for_%s' % (self.prefix_lc, iface_lc, member_lc) self.h('typedef void (*%s) (%sproxy,' % (callback_name, self.proxy_cls)) for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.h(' %s%s%s,' % (const, ctype, name)) self.h(' const GError *error, gpointer user_data,') self.h(' GObject *weak_object);') self.h('') # Async callback implementation invoke_callback = '_%s_%s_invoke_callback_%s' % (self.prefix_lc, iface_lc, member_lc) collect_callback = '_%s_%s_collect_callback_%s' % (self.prefix_lc, iface_lc, member_lc) # The callback called by dbus-glib; this ends the call and collects # the results into a GValueArray. self.b('static void') self.b('%s (DBusGProxy *proxy,' % collect_callback) self.b(' DBusGProxyCall *call,') self.b(' gpointer user_data)') self.b('{') self.b(' GError *error = NULL;') if len(out_args) > 0: self.b(' GValueArray *args;') self.b(' GValue blank = { 0 };') self.b(' guint i;') for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info # "We handle variants specially; the caller is expected to # have already allocated storage for them". Thanks, # dbus-glib... if gtype == 'G_TYPE_VALUE': self.b(' GValue *%s = g_new0 (GValue, 1);' % name) else: self.b(' %s%s;' % (ctype, name)) self.b('') self.b(' dbus_g_proxy_end_call (proxy, call, &error,') for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info if gtype == 'G_TYPE_VALUE': self.b(' %s, %s,' % (gtype, name)) else: self.b(' %s, &%s,' % (gtype, name)) self.b(' G_TYPE_INVALID);') if len(out_args) == 0: self.b(' tp_proxy_pending_call_v0_take_results (user_data, error,' 'NULL);') else: self.b('') self.b(' if (error != NULL)') self.b(' {') self.b(' tp_proxy_pending_call_v0_take_results (user_data, error,') self.b(' NULL);') for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info if gtype == 'G_TYPE_VALUE': self.b(' g_free (%s);' % name) self.b(' return;') self.b(' }') self.b('') self.b(' args = g_value_array_new (%d);' % len(out_args)) self.b(' g_value_init (&blank, G_TYPE_INT);') self.b('') self.b(' for (i = 0; i < %d; i++)' % len(out_args)) self.b(' g_value_array_append (args, &blank);') for i, arg in enumerate(out_args): name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b('') self.b(' g_value_unset (args->values + %d);' % i) self.b(' g_value_init (args->values + %d, %s);' % (i, gtype)) if gtype == 'G_TYPE_STRING': self.b(' g_value_take_string (args->values + %d, %s);' % (i, name)) elif marshaller == 'BOXED': self.b(' g_value_take_boxed (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_UCHAR': self.b(' g_value_set_uchar (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_BOOLEAN': self.b(' g_value_set_boolean (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_INT': self.b(' g_value_set_int (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_UINT': self.b(' g_value_set_uint (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_INT64': self.b(' g_value_set_int (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_UINT64': self.b(' g_value_set_uint (args->values + %d, %s);' % (i, name)) elif gtype == 'G_TYPE_DOUBLE': self.b(' g_value_set_double (args->values + %d, %s);' % (i, name)) else: assert False, ("Don't know how to put %s in a GValue" % gtype) self.b(' tp_proxy_pending_call_v0_take_results (user_data, ' 'NULL, args);') self.b('}') self.b('static void') self.b('%s (TpProxy *self,' % invoke_callback) self.b(' GError *error,') self.b(' GValueArray *args,') self.b(' GCallback generic_callback,') self.b(' gpointer user_data,') self.b(' GObject *weak_object)') self.b('{') self.b(' %s callback = (%s) generic_callback;' % (callback_name, callback_name)) self.b('') self.b(' if (error != NULL)') self.b(' {') self.b(' callback ((%s) self,' % self.proxy_cls) for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info if marshaller == 'BOXED' or pointer: self.b(' NULL,') elif gtype == 'G_TYPE_DOUBLE': self.b(' 0.0,') else: self.b(' 0,') self.b(' error, user_data, weak_object);') self.b(' g_error_free (error);') self.b(' return;') self.b(' }') self.b(' callback ((%s) self,' % self.proxy_cls) # FIXME: factor out into a function for i, arg in enumerate(out_args): name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info if marshaller == 'BOXED': self.b(' g_value_get_boxed (args->values + %d),' % i) elif gtype == 'G_TYPE_STRING': self.b(' g_value_get_string (args->values + %d),' % i) elif gtype == 'G_TYPE_UCHAR': self.b(' g_value_get_uchar (args->values + %d),' % i) elif gtype == 'G_TYPE_BOOLEAN': self.b(' g_value_get_boolean (args->values + %d),' % i) elif gtype == 'G_TYPE_UINT': self.b(' g_value_get_uint (args->values + %d),' % i) elif gtype == 'G_TYPE_INT': self.b(' g_value_get_int (args->values + %d),' % i) elif gtype == 'G_TYPE_UINT64': self.b(' g_value_get_uint64 (args->values + %d),' % i) elif gtype == 'G_TYPE_INT64': self.b(' g_value_get_int64 (args->values + %d),' % i) elif gtype == 'G_TYPE_DOUBLE': self.b(' g_value_get_double (args->values + %d),' % i) else: assert False, "Don't know how to get %s from a GValue" % gtype self.b(' error, user_data, weak_object);') self.b('') if len(out_args) > 0: self.b(' g_value_array_free (args);') else: self.b(' if (args != NULL)') self.b(' g_value_array_free (args);') self.b('}') self.b('') # Async stub # Example: # TpProxyPendingCall * # tp_cli_properties_interface_call_get_properties # (gpointer proxy, # gint timeout_ms, # const GArray *in_properties, # tp_cli_properties_interface_callback_for_get_properties callback, # gpointer user_data, # GDestroyNotify *destructor); self.h('TpProxyPendingCall *%s_%s_call_%s (%sproxy,' % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg)) self.h(' gint timeout_ms,') self.b('/**') self.b(' * %s_%s_call_%s:' % (self.prefix_lc, iface_lc, member_lc)) self.b(' * @proxy: the #TpProxy') self.b(' * @timeout_ms: the timeout in milliseconds, or -1 to use the') self.b(' * default') for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' * @%s: Used to pass an \'in\' argument: %s' % (name, xml_escape(get_docstring(elt) or '(Undocumented)'))) self.b(' * @callback: called when the method call succeeds or fails') self.b(' * @user_data: user-supplied data passed to the callback') self.b(' * @destroy: called with the user_data as argument, after the') self.b(' * call has succeeded, failed or been cancelled') self.b(' * @weak_object: A #GObject which will be weakly referenced; ') self.b(' * if it is destroyed, this callback will automatically be') self.b(' * disconnected') self.b(' *') self.b(' * Start a %s method call.' % member) self.b(' *') self.b(' * %s' % xml_escape(get_docstring(method) or '(Undocumented)')) self.b(' *') self.b(' * Returns: a #TpProxyPendingCall representing the call in') self.b(' * progress. It is borrowed from the object, and will become') self.b(' * invalid when the callback is called, the call is') self.b(' * cancelled or the #TpProxy becomes invalid.') self.b(' */') self.b('TpProxyPendingCall *\n%s_%s_call_%s (%sproxy,' % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg)) self.b(' gint timeout_ms,') for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.h(' %s%s%s,' % (const, ctype, name)) self.b(' %s%s%s,' % (const, ctype, name)) self.h(' %s callback,' % callback_name) self.h(' gpointer user_data,') self.h(' GDestroyNotify destroy,') self.h(' GObject *weak_object);') self.h('') self.b(' %s callback,' % callback_name) self.b(' gpointer user_data,') self.b(' GDestroyNotify destroy,') self.b(' GObject *weak_object)') self.b('{') self.b(' GError *error = NULL;') self.b(' GQuark interface = %s;' % self.get_iface_quark()) self.b(' DBusGProxy *iface;') self.b('') self.b(' g_return_val_if_fail (%s (proxy), NULL);' % self.proxy_assert) self.b('') self.b(' iface = tp_proxy_borrow_interface_by_id (') self.b(' (TpProxy *) proxy,') self.b(' interface, &error);') self.b('') self.b(' if (iface == NULL)') self.b(' {') self.b(' if (callback != NULL)') self.b(' callback (proxy,') for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info if pointer: self.b(' NULL,') else: self.b(' 0,') self.b(' error, user_data, weak_object);') self.b(' return NULL;') self.b(' }') self.b('') self.b(' if (callback == NULL)') self.b(' {') self.b(' dbus_g_proxy_call_no_reply (iface, "%s",' % member) for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.b(' %s, %s,' % (gtype, name)) self.b(' G_TYPE_INVALID);') self.b(' return NULL;') self.b(' }') self.b(' else') self.b(' {') self.b(' TpProxyPendingCall *data;') self.b('') self.b(' data = tp_proxy_pending_call_v0_new ((TpProxy *) proxy,') self.b(' interface, "%s", iface,' % member) self.b(' %s,' % invoke_callback) self.b(' G_CALLBACK (callback), user_data, destroy,') self.b(' weak_object, FALSE);') self.b(' tp_proxy_pending_call_v0_take_pending_call (data,') self.b(' dbus_g_proxy_begin_call_with_timeout (iface,') self.b(' "%s",' % member) self.b(' %s,' % collect_callback) self.b(' data,') self.b(' tp_proxy_pending_call_v0_completed,') self.b(' timeout_ms,') for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.b(' %s, %s,' % (gtype, name)) self.b(' G_TYPE_INVALID));') self.b('') self.b(' return data;') self.b(' }') self.b('}') self.b('') # Reentrant blocking calls # Example: # gboolean tp_cli_properties_interface_run_get_properties # (gpointer proxy, # gint timeout_ms, # const GArray *in_properties, # GPtrArray **out0, # GError **error, # GMainLoop **loop); self.b('typedef struct {') self.b(' GMainLoop *loop;') self.b(' GError **error;') for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' %s*%s;' % (ctype, name)) self.b(' gboolean success:1;') self.b(' gboolean completed:1;') self.b('} _%s_%s_run_state_%s;' % (self.prefix_lc, iface_lc, member_lc)) reentrant_invoke = '_%s_%s_finish_running_%s' % (self.prefix_lc, iface_lc, member_lc) self.b('static void') self.b('%s (TpProxy *self,' % reentrant_invoke) self.b(' GError *error,') self.b(' GValueArray *args,') self.b(' GCallback unused,') self.b(' gpointer user_data,') self.b(' GObject *unused2)') self.b('{') self.b(' _%s_%s_run_state_%s *state = user_data;' % (self.prefix_lc, iface_lc, member_lc)) self.b('') self.b(' state->success = (error == NULL);') self.b(' state->completed = TRUE;') self.b(' g_main_loop_quit (state->loop);') self.b('') self.b(' if (error != NULL)') self.b(' {') self.b(' if (state->error != NULL)') self.b(' *state->error = error;') self.b(' else') self.b(' g_error_free (error);') self.b('') self.b(' return;') self.b(' }') self.b('') for i, arg in enumerate(out_args): name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' if (state->%s != NULL)' % name) if marshaller == 'BOXED': self.b(' *state->%s = g_value_dup_boxed (' 'args->values + %d);' % (name, i)) elif marshaller == 'STRING': self.b(' *state->%s = g_value_dup_string ' '(args->values + %d);' % (name, i)) elif marshaller in ('UCHAR', 'BOOLEAN', 'INT', 'UINT', 'INT64', 'UINT64', 'DOUBLE'): self.b(' *state->%s = g_value_get_%s (args->values + %d);' % (name, marshaller.lower(), i)) else: assert False, "Don't know how to copy %s" % gtype self.b('') if len(out_args) > 0: self.b(' g_value_array_free (args);') else: self.b(' if (args != NULL)') self.b(' g_value_array_free (args);') self.b('}') self.b('') self.h('gboolean %s_%s_run_%s (%sproxy,' % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg)) self.h(' gint timeout_ms,') self.b('/**') self.b(' * %s_%s_run_%s:' % (self.prefix_lc, iface_lc, member_lc)) self.b(' * @proxy: %s' % self.proxy_doc) self.b(' * @timeout_ms: Timeout in milliseconds, or -1 for default') for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' * @%s: Used to pass an \'in\' argument: %s' % (name, xml_escape(get_docstring(elt) or '(Undocumented)'))) for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.b(' * @%s: Used to return an \'out\' argument if %%TRUE is ' 'returned: %s' % (name, xml_escape(get_docstring(elt) or '(Undocumented)'))) self.b(' * @error: If not %NULL, used to return errors if %FALSE ') self.b(' * is returned') self.b(' * @loop: If not %NULL, set before re-entering ') self.b(' * the main loop, to point to a #GMainLoop ') self.b(' * which can be used to cancel this call with ') self.b(' * g_main_loop_quit(), causing a return of ') self.b(' * %FALSE with @error set to %TP_DBUS_ERROR_CANCELLED') self.b(' *') self.b(' * Call the method %s and run the main loop' % member) self.b(' * until it returns. Before calling this method, you must') self.b(' * add a reference to any borrowed objects you need to keep,') self.b(' * and generally ensure that everything is in a consistent') self.b(' * state.') self.b(' *') self.b(' * %s' % xml_escape(get_docstring(method) or '(Undocumented)')) self.b(' *') self.b(' * Returns: TRUE on success, FALSE and sets @error on error') self.b(' */') self.b('gboolean\n%s_%s_run_%s (%sproxy,' % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg)) self.b(' gint timeout_ms,') for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.h(' %s%s%s,' % (const, ctype, name)) self.b(' %s%s%s,' % (const, ctype, name)) for arg in out_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info self.h(' %s*%s,' % (ctype, name)) self.b(' %s*%s,' % (ctype, name)) self.h(' GError **error,') self.h(' GMainLoop **loop);') self.h('') self.b(' GError **error,') self.b(' GMainLoop **loop)') self.b('{') self.b(' DBusGProxy *iface;') self.b(' GQuark interface = %s;' % self.get_iface_quark()) self.b(' TpProxyPendingCall *pc;') self.b(' _%s_%s_run_state_%s state = {' % (self.prefix_lc, iface_lc, member_lc)) self.b(' NULL /* loop */, error,') for arg in out_args: name, info, tp_type, elt = arg self.b(' %s,' % name) self.b(' FALSE /* completed */, FALSE /* success */ };') self.b('') self.b(' g_return_val_if_fail (%s (proxy), FALSE);' % self.proxy_assert) self.b('') self.b(' iface = tp_proxy_borrow_interface_by_id') self.b(' ((TpProxy *) proxy, interface, error);') self.b('') self.b(' if (iface == NULL)') self.b(' return FALSE;') self.b('') self.b(' state.loop = g_main_loop_new (NULL, FALSE);') self.b('') self.b(' pc = tp_proxy_pending_call_v0_new ((TpProxy *) proxy,') self.b(' interface, "%s", iface,' % member) self.b(' %s,' % reentrant_invoke) self.b(' NULL, &state, NULL, NULL, TRUE);') self.b('') self.b(' if (loop != NULL)') self.b(' *loop = state.loop;') self.b('') self.b(' tp_proxy_pending_call_v0_take_pending_call (pc,') self.b(' dbus_g_proxy_begin_call_with_timeout (iface,') self.b(' "%s",' % member) self.b(' %s,' % collect_callback) self.b(' pc,') self.b(' tp_proxy_pending_call_v0_completed,') self.b(' timeout_ms,') for arg in in_args: name, info, tp_type, elt = arg ctype, gtype, marshaller, pointer = info const = pointer and 'const ' or '' self.b(' %s, %s,' % (gtype, name)) self.b(' G_TYPE_INVALID));') self.b('') self.b(' if (!state.completed)') self.b(' g_main_loop_run (state.loop);') self.b('') self.b(' if (!state.completed)') self.b(' tp_proxy_pending_call_cancel (pc);') self.b('') self.b(' if (loop != NULL)') self.b(' *loop = NULL;') self.b('') self.b(' g_main_loop_unref (state.loop);') self.b('') self.b(' return state.success;') self.b('}') self.b('') # leave a gap for the end of the method self.b('') self.h('') def do_signal_add(self, signal): marshaller_items = [] gtypes = [] for i in signal.getElementsByTagName('arg'): name = i.getAttribute('name') type = i.getAttribute('type') info = type_to_gtype(type) # type, GType, STRING, is a pointer gtypes.append(info[1]) self.b(' dbus_g_proxy_add_signal (proxy, "%s",' % signal.getAttribute('name')) for gtype in gtypes: self.b(' %s,' % gtype) self.b(' G_TYPE_INVALID);') def do_interface(self, node): ifaces = node.getElementsByTagName('interface') assert len(ifaces) == 1 iface = ifaces[0] name = node.getAttribute('name').replace('/', '') self.iface = name self.iface_lc = name.lower() self.iface_uc = name.upper() self.iface_mc = name.replace('_', '') self.iface_dbus = iface.getAttribute('name') signals = node.getElementsByTagName('signal') methods = node.getElementsByTagName('method') self.b('static inline void') self.b('%s_add_signals_for_%s (DBusGProxy *proxy)' % (self.prefix_lc, name.lower())) self.b('{') for signal in signals: self.do_signal_add(signal) self.b('}') self.b('') self.b('') for signal in signals: self.do_signal(name, signal) for method in methods: self.do_method(name, method) self.iface_dbus = None def __call__(self): self.h('G_BEGIN_DECLS') self.h('') self.b('/* We don\'t want gtkdoc scanning this file, it\'ll get') self.b(' * confused by seeing function definitions, so mark it as: */') self.b('/**/') self.b('') nodes = self.dom.getElementsByTagName('node') nodes.sort(cmp_by_name) for node in nodes: self.do_interface(node) if self.group is not None: self.b('/*') self.b(' * %s_%s_add_signals:' % (self.prefix_lc, self.group)) self.b(' * @self: the #TpProxy') self.b(' * @quark: a quark whose string value is the interface') self.b(' * name whose signals should be added') self.b(' * @proxy: the D-Bus proxy to which to add the signals') self.b(' * @unused: not used for anything') self.b(' *') self.b(' * Tell dbus-glib that @proxy has the signatures of all') self.b(' * signals on the given interface, if it\'s one we') self.b(' * support.') self.b(' *') self.b(' * This function should be used as a signal handler for') self.b(' * #TpProxy::interface-added.') self.b(' */') self.b('static void') self.b('%s_%s_add_signals (TpProxy *self,' % (self.prefix_lc, self.group)) self.b(' guint quark,') self.b(' DBusGProxy *proxy,') self.b(' gpointer unused)') self.b('{') for node in nodes: iface = node.getElementsByTagName('interface')[0] self.iface_dbus = iface.getAttribute('name') name = node.getAttribute('name').replace('/', '').lower() self.iface_uc = name.upper() self.b(' if (quark == %s)' % self.get_iface_quark()) self.b(' %s_add_signals_for_%s (proxy);' % (self.prefix_lc, name)) self.b('}') self.b('') self.h('G_END_DECLS') self.h('') open(self.basename + '.h', 'w').write('\n'.join(self.__header)) open(self.basename + '-body.h', 'w').write('\n'.join(self.__body)) def types_to_gtypes(types): return [type_to_gtype(t)[1] for t in types] if __name__ == '__main__': options, argv = gnu_getopt(sys.argv[1:], '', ['group=', 'subclass=', 'subclass-assert=', 'iface-quark-prefix=']) opts = {} for option, value in options: opts[option] = value dom = xml.dom.minidom.parse(argv[0]) Generator(dom, argv[1], argv[2], opts)() telepathy-rakia-0.8.0/tools/Makefile.am0000644000175000017500000000220712223047264014723 00000000000000EXTRA_DIST = \ c-constants-generator.xsl \ check-coding-style.mk \ check-c-style.sh \ check-misc.sh \ check-whitespace.sh \ c-interfaces-generator.xsl \ doc-generator.xsl \ glib-client-gen.py \ glib-client-marshaller-gen.py \ glib-errors-enum-body.xsl \ glib-errors-enum-header.xsl \ glib-interfaces-generator.xsl \ glib-interfaces-body-generator.xsl \ glib-ginterface-gen.py \ glib-gtypes-generator.py \ glib-signals-marshal-gen.py \ identity.xsl \ lcov.am \ libglibcodegen.py \ telepathy.am CLEANFILES = libglibcodegen.pyc libglibcodegen.pyo $(noinst_SCRIPTS) all: $(EXTRA_DIST) glib-client-marshaller-gen.py: libglibcodegen.py touch $@ glib-ginterface-gen.py: libglibcodegen.py touch $@ glib-gtypes-generator.py: libglibcodegen.py touch $@ glib-signals-marshal-gen.py: libglibcodegen.py touch $@ TELEPATHY_GLIB_SRCDIR = $(top_srcdir)/../telepathy-glib maintainer-update-from-telepathy-glib: set -e && cd $(srcdir) && \ for x in $(EXTRA_DIST); do \ if test -f $(TELEPATHY_GLIB_SRCDIR)/tools/$$x; then \ cp $(TELEPATHY_GLIB_SRCDIR)/tools/$$x $$x; \ fi; \ done telepathy-rakia-0.8.0/tools/glib-gtypes-generator.py0000644000175000017500000002366712223047264017470 00000000000000#!/usr/bin/python # Generate GLib GInterfaces from the Telepathy specification. # The master copy of this program is in the telepathy-glib repository - # please make any changes there. # # Copyright (C) 2006, 2007 Collabora Limited # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import sys import xml.dom.minidom from libglibcodegen import escape_as_identifier, \ get_docstring, \ NS_TP, \ Signature, \ type_to_gtype, \ xml_escape def types_to_gtypes(types): return [type_to_gtype(t)[1] for t in types] class GTypesGenerator(object): def __init__(self, dom, output, mixed_case_prefix): self.dom = dom self.Prefix = mixed_case_prefix self.PREFIX_ = self.Prefix.upper() + '_' self.prefix_ = self.Prefix.lower() + '_' self.header = open(output + '.h', 'w') self.body = open(output + '-body.h', 'w') for f in (self.header, self.body): f.write('/* Auto-generated, do not edit.\n *\n' ' * This file may be distributed under the same terms\n' ' * as the specification from which it was generated.\n' ' */\n\n') self.need_mappings = {} self.need_structs = {} self.need_arrays = {} def do_mapping_header(self, mapping): members = mapping.getElementsByTagNameNS(NS_TP, 'member') assert len(members) == 2 impl_sig = ''.join([elt.getAttribute('type') for elt in members]) esc_impl_sig = escape_as_identifier(impl_sig) name = (self.PREFIX_ + 'HASH_TYPE_' + mapping.getAttribute('name').upper()) impl = self.prefix_ + 'type_dbus_hash_' + esc_impl_sig docstring = get_docstring(mapping) or '(Undocumented)' self.header.write('/**\n * %s:\n *\n' % name) self.header.write(' * %s\n' % xml_escape(docstring)) self.header.write(' *\n') self.header.write(' * This macro expands to a call to a function\n') self.header.write(' * that returns the #GType of a #GHashTable\n') self.header.write(' * appropriate for representing a D-Bus\n') self.header.write(' * dictionary of signature\n') self.header.write(' * a{%s}.\n' % impl_sig) self.header.write(' *\n') key, value = members self.header.write(' * Keys (D-Bus type %s,\n' % key.getAttribute('type')) tp_type = key.getAttributeNS(NS_TP, 'type') if tp_type: self.header.write(' * type %s,\n' % tp_type) self.header.write(' * named %s):\n' % key.getAttribute('name')) docstring = get_docstring(key) or '(Undocumented)' self.header.write(' * %s\n' % xml_escape(docstring)) self.header.write(' *\n') self.header.write(' * Values (D-Bus type %s,\n' % value.getAttribute('type')) tp_type = value.getAttributeNS(NS_TP, 'type') if tp_type: self.header.write(' * type %s,\n' % tp_type) self.header.write(' * named %s):\n' % value.getAttribute('name')) docstring = get_docstring(value) or '(Undocumented)' self.header.write(' * %s\n' % xml_escape(docstring)) self.header.write(' *\n') self.header.write(' */\n') self.header.write('#define %s (%s ())\n\n' % (name, impl)) self.need_mappings[impl_sig] = esc_impl_sig def do_struct_header(self, struct): members = struct.getElementsByTagNameNS(NS_TP, 'member') impl_sig = ''.join([elt.getAttribute('type') for elt in members]) esc_impl_sig = escape_as_identifier(impl_sig) name = (self.PREFIX_ + 'STRUCT_TYPE_' + struct.getAttribute('name').upper()) impl = self.prefix_ + 'type_dbus_struct_' + esc_impl_sig docstring = struct.getElementsByTagNameNS(NS_TP, 'docstring') if docstring: docstring = docstring[0].toprettyxml() if docstring.startswith(''): docstring = docstring[14:] if docstring.endswith('\n'): docstring = docstring[:-16] if docstring.strip() in ('', ''): docstring = '(Undocumented)' else: docstring = '(Undocumented)' self.header.write('/**\n * %s:\n\n' % name) self.header.write(' * %s\n' % xml_escape(docstring)) self.header.write(' *\n') self.header.write(' * This macro expands to a call to a function\n') self.header.write(' * that returns the #GType of a #GValueArray\n') self.header.write(' * appropriate for representing a D-Bus struct\n') self.header.write(' * with signature (%s).\n' % impl_sig) self.header.write(' *\n') for i, member in enumerate(members): self.header.write(' * Member %d (D-Bus type ' '%s,\n' % (i, member.getAttribute('type'))) tp_type = member.getAttributeNS(NS_TP, 'type') if tp_type: self.header.write(' * type %s,\n' % tp_type) self.header.write(' * named %s):\n' % member.getAttribute('name')) docstring = get_docstring(member) or '(Undocumented)' self.header.write(' * %s\n' % xml_escape(docstring)) self.header.write(' *\n') self.header.write(' */\n') self.header.write('#define %s (%s ())\n\n' % (name, impl)) array_name = struct.getAttribute('array-name') if array_name != '': array_name = (self.PREFIX_ + 'ARRAY_TYPE_' + array_name.upper()) impl = self.prefix_ + 'type_dbus_array_' + esc_impl_sig self.header.write('/**\n * %s:\n\n' % array_name) self.header.write(' * Expands to a call to a function\n') self.header.write(' * that returns the #GType of a #GPtrArray\n') self.header.write(' * of #%s.\n' % name) self.header.write(' */\n') self.header.write('#define %s (%s ())\n\n' % (array_name, impl)) self.need_arrays[impl_sig] = esc_impl_sig self.need_structs[impl_sig] = esc_impl_sig def __call__(self): mappings = self.dom.getElementsByTagNameNS(NS_TP, 'mapping') structs = self.dom.getElementsByTagNameNS(NS_TP, 'struct') for mapping in mappings: self.do_mapping_header(mapping) for sig in self.need_mappings: self.header.write('GType %stype_dbus_hash_%s (void);\n\n' % (self.prefix_, self.need_mappings[sig])) self.body.write('GType\n%stype_dbus_hash_%s (void)\n{\n' % (self.prefix_, self.need_mappings[sig])) self.body.write(' static GType t = 0;\n\n') self.body.write(' if (G_UNLIKELY (t == 0))\n') # FIXME: translate sig into two GTypes items = tuple(Signature(sig)) gtypes = types_to_gtypes(items) self.body.write(' t = dbus_g_type_get_map ("GHashTable", ' '%s, %s);\n' % (gtypes[0], gtypes[1])) self.body.write(' return t;\n') self.body.write('}\n\n') for struct in structs: self.do_struct_header(struct) for sig in self.need_structs: self.header.write('GType %stype_dbus_struct_%s (void);\n\n' % (self.prefix_, self.need_structs[sig])) self.body.write('GType\n%stype_dbus_struct_%s (void)\n{\n' % (self.prefix_, self.need_structs[sig])) self.body.write(' static GType t = 0;\n\n') self.body.write(' if (G_UNLIKELY (t == 0))\n') self.body.write(' t = dbus_g_type_get_struct ("GValueArray",\n') items = tuple(Signature(sig)) gtypes = types_to_gtypes(items) for gtype in gtypes: self.body.write(' %s,\n' % gtype) self.body.write(' G_TYPE_INVALID);\n') self.body.write(' return t;\n') self.body.write('}\n\n') for sig in self.need_arrays: self.header.write('GType %stype_dbus_array_%s (void);\n\n' % (self.prefix_, self.need_structs[sig])) self.body.write('GType\n%stype_dbus_array_%s (void)\n{\n' % (self.prefix_, self.need_structs[sig])) self.body.write(' static GType t = 0;\n\n') self.body.write(' if (G_UNLIKELY (t == 0))\n') self.body.write(' t = dbus_g_type_get_collection ("GPtrArray", ' '%stype_dbus_struct_%s ());\n' % (self.prefix_, self.need_structs[sig])) self.body.write(' return t;\n') self.body.write('}\n\n') if __name__ == '__main__': argv = sys.argv[1:] dom = xml.dom.minidom.parse(argv[0]) GTypesGenerator(dom, argv[1], argv[2])() telepathy-rakia-0.8.0/tools/c-constants-generator.xsl0000644000175000017500000002552512223047264017647 00000000000000 /** * : * * <![CDATA[ ]]> * * Bitfield/set of flags generated from the Telepathy specification. */ typedef enum { } ; * @ : <![CDATA[ ]]> * @ : <![CDATA[ ]]> s /** * : * * <![CDATA[ ]]> * * Bitfield/set of flags generated from the Telepathy specification. */ typedef enum { } ; /** * NUM_ : * * 1 higher than the highest valid value of # . */ #define NUM_ ( +1) Flag name != suffix = , Enumvalue name != suffix Enum values must be in ascending numeric order, but is less than the previous value = , tp:flag found outside tp:flags tp:enumvalue found outside tp:enum mixed-case-prefix param must be set /* Generated from , version */ #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif telepathy-rakia-0.8.0/tools/glib-errors-enum-header.xsl0000644000175000017500000000466512223047264020050 00000000000000 * @TP_ERROR_: : * TP_ERROR_, /* Generated from the Telepathy spec */ #include <glib-object.h> G_BEGIN_DECLS GType tp_error_get_type (void); /** * TP_TYPE_ERROR: * * The GType of the Telepathy error enumeration. */ #define TP_TYPE_ERROR (tp_error_get_type()) /** * TpError: * * Enumerated type representing the Telepathy D-Bus errors. */ typedef enum { } TpError; G_END_DECLS telepathy-rakia-0.8.0/tools/glib-interfaces-generator.xsl0000644000175000017500000000437412223047264020450 00000000000000 /** * _IFACE_QUARK_ : * * Expands to a call to a function that returns a quark for the interface name " " */ #define _IFACE_QUARK_ \ ( _iface_quark_ ()) GQuark _iface_quark_ (void); telepathy-rakia-0.8.0/tools/check-whitespace.sh0000644000175000017500000000032312223047264016427 00000000000000#!/bin/sh fail=0 if grep -n ' $' "$@" then echo "^^^ The above files contain unwanted trailing spaces" fail=1 fi if grep -n ' ' "$@" then echo "^^^ The above files contain tabs" fail=1 fi exit $fail telepathy-rakia-0.8.0/install-sh0000755000175000017500000003325512223050267013537 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: telepathy-rakia-0.8.0/rakia/0000755000175000017500000000000012223050362012666 500000000000000telepathy-rakia-0.8.0/rakia/base-connection.h0000644000175000017500000000664412223047264016047 00000000000000/* * sip-base-connection.h - Header for SipBaseConnection * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_BASE_CONNECTION_H__ #define __RAKIA_BASE_CONNECTION_H__ #include #include #include #include #include G_BEGIN_DECLS typedef struct _RakiaBaseConnection RakiaBaseConnection; typedef struct _RakiaBaseConnectionClass RakiaBaseConnectionClass; typedef struct _RakiaBaseConnectionPrivate RakiaBaseConnectionPrivate; struct _RakiaBaseConnectionClass { TpBaseConnectionClass parent_class; TpContactsMixinClass contacts_mixin_class; nua_handle_t *(*create_handle) (RakiaBaseConnection *, TpHandle contact); void (*add_auth_handler) (RakiaBaseConnection *, RakiaEventTarget *); }; struct _RakiaBaseConnection { TpBaseConnection parent; TpContactsMixin contacts_mixin; RakiaBaseConnectionPrivate *priv; }; GType rakia_base_connection_get_type (void) G_GNUC_CONST; /* TYPE MACROS */ #define RAKIA_TYPE_BASE_CONNECTION \ (rakia_base_connection_get_type()) #define RAKIA_BASE_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ RAKIA_TYPE_BASE_CONNECTION, RakiaBaseConnection)) #define RAKIA_BASE_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ RAKIA_TYPE_BASE_CONNECTION, RakiaBaseConnectionClass)) #define RAKIA_IS_BASE_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_BASE_CONNECTION)) #define RAKIA_IS_BASE_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_BASE_CONNECTION)) #define RAKIA_BASE_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ RAKIA_TYPE_BASE_CONNECTION, RakiaBaseConnectionClass)) /*********************************************************************** * Functions for accessing Sofia-SIP interface handles ***********************************************************************/ nua_handle_t *rakia_base_connection_create_handle (RakiaBaseConnection *, TpHandle contact); void rakia_base_connection_add_auth_handler (RakiaBaseConnection *self, RakiaEventTarget *target); void rakia_base_connection_save_event (RakiaBaseConnection *self, nua_saved_event_t ret_saved [1]); /** Callback for events delivered by the SIP stack. */ void rakia_base_connection_sofia_callback (nua_event_t event, int status, char const *phrase, nua_t *nua, RakiaBaseConnection *conn, nua_handle_t *nh, RakiaEventTarget *target, sip_t const *sip, tagi_t tags[]); const url_t *rakia_base_connection_handle_to_uri ( RakiaBaseConnection *self, TpHandle handle); G_END_DECLS #endif /* #ifndef __RAKIA_BASE_CONNECTION_H__*/ telepathy-rakia-0.8.0/rakia/call-content.h0000644000175000017500000000532712223047264015360 00000000000000/* * call-content.h - Header for RakiaCallContent * Copyright (C) 2011 Collabora Ltd. * @author Olivier Crete * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CALL_CONTENT_H__ #define __RAKIA_CALL_CONTENT_H__ #include #include #include "rakia/call-channel.h" #include "rakia/sip-session.h" #include "rakia/sip-media.h" G_BEGIN_DECLS typedef struct _RakiaCallContent RakiaCallContent; typedef struct _RakiaCallContentPrivate RakiaCallContentPrivate; typedef struct _RakiaCallContentClass RakiaCallContentClass; struct _RakiaCallContentClass { TpBaseMediaCallContentClass parent_class; }; struct _RakiaCallContent { TpBaseMediaCallContent parent; RakiaCallContentPrivate *priv; }; GType rakia_call_content_get_type (void); /* TYPE MACROS */ #define RAKIA_TYPE_CALL_CONTENT \ (rakia_call_content_get_type ()) #define RAKIA_CALL_CONTENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ RAKIA_TYPE_CALL_CONTENT, RakiaCallContent)) #define RAKIA_CALL_CONTENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ RAKIA_TYPE_CALL_CONTENT, RakiaCallContentClass)) #define RAKIA_IS_CALL_CONTENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_CALL_CONTENT)) #define RAKIA_IS_CALL_CONTENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_CALL_CONTENT)) #define RAKIA_CALL_CONTENT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ RAKIA_TYPE_CALL_CONTENT, RakiaCallContentClass)) RakiaCallContent *rakia_call_content_new (RakiaCallChannel *channel, RakiaSipMedia *media, const gchar *object_path, TpBaseConnection *connection, const gchar *name, TpMediaStreamType media_type, TpHandle creator, TpCallContentDisposition disposition); RakiaSipMedia *rakia_call_content_get_media (RakiaCallContent *self); void rakia_call_content_add_stream (RakiaCallContent *self); void rakia_call_content_remote_accept (RakiaCallContent *content); G_END_DECLS #endif /* #ifndef __RAKIA_CALL_CONTENT_H__*/ telepathy-rakia-0.8.0/rakia/text-channel.h0000644000175000017500000000472612223047264015371 00000000000000/* * sip-text-channel.h - Header for RakiaTextChannel * Copyright (C) 2005-2008 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_TEXT_CHANNEL_H__ #define __RAKIA_TEXT_CHANNEL_H__ #include #include #include #include #include G_BEGIN_DECLS typedef struct _RakiaTextChannel RakiaTextChannel; typedef struct _RakiaTextChannelClass RakiaTextChannelClass; struct _RakiaTextChannelClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_props_class; }; struct _RakiaTextChannel { GObject parent; TpMessageMixin message_mixin; }; GType rakia_text_channel_get_type(void); /* TYPE MACROS */ #define RAKIA_TYPE_TEXT_CHANNEL \ (rakia_text_channel_get_type()) #define RAKIA_TEXT_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_TEXT_CHANNEL, RakiaTextChannel)) #define RAKIA_TEXT_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_TEXT_CHANNEL, RakiaTextChannelClass)) #define RAKIA_IS_TEXT_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_TEXT_CHANNEL)) #define RAKIA_IS_TEXT_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_TEXT_CHANNEL)) #define RAKIA_TEXT_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_TEXT_CHANNEL, RakiaTextChannelClass)) void rakia_text_channel_receive (RakiaTextChannel *obj, const sip_t *sip, TpHandle sender, const char *text, gsize len); G_END_DECLS #endif /* #ifndef __RAKIA_TEXT_CHANNEL_H__*/ telepathy-rakia-0.8.0/rakia/call-channel.c0000644000175000017500000006127712223047264015317 00000000000000/* * call-channel.c - RakiaCallChannel * Copyright © 2011-2012 Collabora Ltd. * @author Olivier Crete * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/call-channel.h" #include #include "rakia/call-content.h" #include "rakia/sip-session.h" #define DEBUG_FLAG RAKIA_DEBUG_CALL #include "rakia/debug.h" #include G_DEFINE_TYPE (RakiaCallChannel, rakia_call_channel, TP_TYPE_BASE_MEDIA_CALL_CHANNEL) static void rakia_call_channel_constructed (GObject *obj); static void rakia_call_channel_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); static void rakia_call_channel_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void rakia_call_channel_dispose (GObject *object); static void rakia_call_channel_finalize (GObject *object); static void rakia_call_channel_close (TpBaseChannel *base); static TpBaseCallContent * rakia_call_channel_add_content ( TpBaseCallChannel *base, const gchar *name, TpMediaStreamType type, TpMediaStreamDirection initial_direction, GError **error); static void rakia_call_channel_hangup ( TpBaseCallChannel *base, TpCallStateChangeReason reason, const gchar *detailed_reason, const gchar *message); static void rakia_call_channel_set_ringing (TpBaseCallChannel *base); static void rakia_call_channel_set_queued (TpBaseCallChannel *base); static void rakia_call_channel_accept (TpBaseMediaCallChannel *channel); static void rakia_call_channel_hold_state_changed (TpBaseMediaCallChannel *self, TpLocalHoldState hold_state, TpLocalHoldStateReason hold_state_reason); static gboolean rakia_call_channel_is_connected (TpBaseCallChannel *self); static void ended_cb (RakiaSipSession *session, gboolean self_actor, guint status, gchar *message, RakiaCallChannel *self); static void ringing_cb (RakiaSipSession *session, RakiaCallChannel *self); static void queued_cb (RakiaSipSession *session, RakiaCallChannel *self); static void in_progress_cb (RakiaSipSession *session, RakiaCallChannel *self); static void media_added_cb (RakiaSipSession *session, RakiaSipMedia *media, RakiaCallChannel *self); static void media_removed_cb (RakiaSipSession *session, RakiaSipMedia *media, RakiaCallChannel *self); static void state_changed_cb (RakiaSipSession *session, RakiaSipSessionState old_state, RakiaSipSessionState new_state, RakiaCallChannel *self); static void remote_held_changed_cb (RakiaSipSession *session, GParamSpec *pspec, RakiaCallChannel *self); static RakiaCallContent *rakia_call_channel_get_content_by_media (RakiaCallChannel *self, RakiaSipMedia *media); static void new_content (RakiaCallChannel *self, const gchar *name, RakiaSipMedia *media, TpCallContentDisposition disposition); /* properties */ enum { PROP_SIP_SESSION = 1, PROP_STUN_SERVER, PROP_STUN_PORT, LAST_PROPERTY }; /* private structure */ struct _RakiaCallChannelPrivate { RakiaSipSession *session; gchar *stun_server; guint stun_port; guint last_content_no; }; static void rakia_call_channel_init (RakiaCallChannel *self) { RakiaCallChannelPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_CALL_CHANNEL, RakiaCallChannelPrivate); self->priv = priv; } static gchar * rakia_call_channel_get_object_path_suffix (TpBaseChannel *base) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (base); return g_strdup_printf ("CallChannel%p", self); } static void rakia_call_channel_class_init ( RakiaCallChannelClass *rakia_call_channel_class) { GObjectClass *object_class = G_OBJECT_CLASS (rakia_call_channel_class); TpBaseChannelClass *base_channel_class = TP_BASE_CHANNEL_CLASS (rakia_call_channel_class); TpBaseCallChannelClass *base_call_class = TP_BASE_CALL_CHANNEL_CLASS (rakia_call_channel_class); TpBaseMediaCallChannelClass *base_media_call_class = TP_BASE_MEDIA_CALL_CHANNEL_CLASS (rakia_call_channel_class); GParamSpec *param_spec; g_type_class_add_private (rakia_call_channel_class, sizeof (RakiaCallChannelPrivate)); object_class->constructed = rakia_call_channel_constructed; object_class->get_property = rakia_call_channel_get_property; object_class->set_property = rakia_call_channel_set_property; object_class->dispose = rakia_call_channel_dispose; object_class->finalize = rakia_call_channel_finalize; base_channel_class->target_handle_type = TP_HANDLE_TYPE_CONTACT; base_channel_class->get_object_path_suffix = rakia_call_channel_get_object_path_suffix; base_channel_class->close = rakia_call_channel_close; base_call_class->add_content = rakia_call_channel_add_content; base_call_class->hangup = rakia_call_channel_hangup; base_call_class->set_ringing = rakia_call_channel_set_ringing; base_call_class->set_queued = rakia_call_channel_set_queued; base_call_class->is_connected = rakia_call_channel_is_connected; base_media_call_class->accept = rakia_call_channel_accept; base_media_call_class->hold_state_changed = rakia_call_channel_hold_state_changed; param_spec = g_param_spec_object ("sip-session", "RakiaSipSession object", "SIP session object that is used for this SIP media channel object.", RAKIA_TYPE_SIP_SESSION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIP_SESSION, param_spec); param_spec = g_param_spec_string ("stun-server", "STUN server", "IP or address of STUN server.", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STUN_SERVER, param_spec); param_spec = g_param_spec_uint ("stun-port", "STUN port", "UDP port of STUN server.", 0, G_MAXUINT16, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STUN_PORT, param_spec); } static void rakia_call_channel_constructed (GObject *obj) { TpBaseChannel *bc = TP_BASE_CHANNEL (obj); TpBaseCallChannel *bcc = TP_BASE_CALL_CHANNEL (obj); RakiaCallChannel *self = RAKIA_CALL_CHANNEL (obj); GObjectClass *parent_object_class = G_OBJECT_CLASS (rakia_call_channel_parent_class); TpHandle actor; TpCallStateChangeReason reason; g_signal_connect_object (self->priv->session, "ended", G_CALLBACK (ended_cb), self, 0); g_signal_connect_object (self->priv->session, "ringing", G_CALLBACK (ringing_cb), self, 0); g_signal_connect_object (self->priv->session, "queued", G_CALLBACK (queued_cb), self, 0); g_signal_connect_object (self->priv->session, "in-progress", G_CALLBACK (in_progress_cb), self, 0); g_signal_connect_object (self->priv->session, "media-added", G_CALLBACK (media_added_cb), self, 0); g_signal_connect_object (self->priv->session, "media-removed", G_CALLBACK (media_removed_cb), self, 0); g_signal_connect_object (self->priv->session, "state-changed", G_CALLBACK (state_changed_cb), self, 0); g_signal_connect_object (self->priv->session, "notify::remote-held", G_CALLBACK (remote_held_changed_cb), self, 0); if (tp_base_channel_is_requested (bc)) { const gchar *initial_audio_name; const gchar *initial_video_name; if (tp_base_call_channel_has_initial_audio (bcc, &initial_audio_name)) rakia_sip_session_add_media (self->priv->session, TP_MEDIA_STREAM_TYPE_AUDIO, initial_audio_name, RAKIA_DIRECTION_BIDIRECTIONAL); if (tp_base_call_channel_has_initial_video (bcc, &initial_video_name)) rakia_sip_session_add_media (self->priv->session, TP_MEDIA_STREAM_TYPE_VIDEO, initial_video_name, RAKIA_DIRECTION_BIDIRECTIONAL); actor = tp_base_channel_get_self_handle (bc); reason = TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED; } else { guint i; GPtrArray *medias = rakia_sip_session_get_medias (self->priv->session); for (i = 0; i < medias->len; i++) { RakiaSipMedia *media = g_ptr_array_index (medias, i); gchar *name; if (media) { name = g_strdup_printf ("initial_%s_%u", sip_media_get_media_type_str (media), i + 1); new_content (self, name, media, TP_CALL_CONTENT_DISPOSITION_INITIAL); g_free (name); } } actor = tp_base_channel_get_target_handle (bc); reason = TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE; } tp_base_call_channel_update_member_flags (bcc, tp_base_channel_get_target_handle (bc), 0, actor, reason, "", "Call Created"); if (parent_object_class->constructed != NULL) parent_object_class->constructed (obj); } static void rakia_call_channel_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (object); RakiaCallChannelPrivate *priv = self->priv; switch (property_id) { case PROP_SIP_SESSION: g_value_set_object (value, priv->session); break; case PROP_STUN_SERVER: g_value_set_string (value, priv->stun_server); break; case PROP_STUN_PORT: g_value_set_uint (value, priv->stun_port); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_call_channel_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (object); RakiaCallChannelPrivate *priv = self->priv; switch (property_id) { case PROP_SIP_SESSION: priv->session = g_value_dup_object (value); break; case PROP_STUN_SERVER: priv->stun_server = g_value_dup_string (value); break; case PROP_STUN_PORT: priv->stun_port = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_call_channel_dispose (GObject *object) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (object); RakiaCallChannelPrivate *priv = self->priv; DEBUG ("disposing"); tp_clear_object (&priv->session); if (G_OBJECT_CLASS (rakia_call_channel_parent_class)->dispose) G_OBJECT_CLASS (rakia_call_channel_parent_class)->dispose (object); } static void rakia_call_channel_finalize (GObject *object) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (object); RakiaCallChannelPrivate *priv = self->priv; g_free (priv->stun_server); G_OBJECT_CLASS (rakia_call_channel_parent_class)->finalize (object); } static void rakia_call_channel_close (TpBaseChannel *base) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (base); RakiaCallChannelPrivate *priv = self->priv; if (priv->session) rakia_sip_session_terminate (priv->session, 480, "Terminated"); DEBUG ("Closed: %s", tp_base_channel_get_object_path (base)); TP_BASE_CHANNEL_CLASS (rakia_call_channel_parent_class)->close (base); } static TpBaseCallContent * rakia_call_channel_add_content ( TpBaseCallChannel *base, const gchar *name, TpMediaStreamType type, TpMediaStreamDirection initial_direction, GError **error) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (base); RakiaCallChannelPrivate *priv = self->priv; RakiaCallContent *content; RakiaSipMedia *media; media = rakia_sip_session_add_media (priv->session, type, name, initial_direction); content = rakia_call_channel_get_content_by_media (self, media); return TP_BASE_CALL_CONTENT (content); } static void rakia_call_channel_hangup ( TpBaseCallChannel *base, TpCallStateChangeReason reason, const gchar *detailed_reason, const gchar *message) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (base); RakiaCallChannelPrivate *priv = self->priv; guint status = 486; const gchar *sipmessage; switch (reason) { break; case TP_CALL_STATE_CHANGE_REASON_NO_ANSWER: status = 480; sipmessage = "No answer"; break; case TP_CALL_STATE_CHANGE_REASON_INVALID_CONTACT: sipmessage = "Not Found"; break; case TP_CALL_STATE_CHANGE_REASON_PERMISSION_DENIED: sipmessage = "Permission denied"; break; case TP_CALL_STATE_CHANGE_REASON_REJECTED: sipmessage = "Rejected"; break; case TP_CALL_STATE_CHANGE_REASON_BUSY: sipmessage = "Busy"; break; case TP_CALL_STATE_CHANGE_REASON_INTERNAL_ERROR: status = 480; sipmessage = "Internal Error"; break; case TP_CALL_STATE_CHANGE_REASON_SERVICE_ERROR: sipmessage = "Service Error"; break; case TP_CALL_STATE_CHANGE_REASON_NETWORK_ERROR: status = 480; sipmessage = "Network error"; break; case TP_CALL_STATE_CHANGE_REASON_MEDIA_ERROR: status = 488; if (!strcmp (detailed_reason, TP_ERROR_STR_MEDIA_UNSUPPORTED_TYPE)) sipmessage = "Unsupported type"; else if (!strcmp (detailed_reason, TP_ERROR_STR_MEDIA_CODECS_INCOMPATIBLE)) sipmessage = "Codecs Incompatible"; else sipmessage = "Media error"; break; case TP_CALL_STATE_CHANGE_REASON_CONNECTIVITY_ERROR: sipmessage = "Connectivity Error"; break; case TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED: sipmessage = "User ended call"; break; case TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE: case TP_CALL_STATE_CHANGE_REASON_UNKNOWN: default: sipmessage = "Terminated by unknown reason"; } rakia_sip_session_terminate (priv->session, status, sipmessage); } static void rakia_call_channel_set_ringing (TpBaseCallChannel *base) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (base); rakia_sip_session_ringing (self->priv->session); } static void rakia_call_channel_set_queued (TpBaseCallChannel *base) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (base); rakia_sip_session_queued (self->priv->session); } static void rakia_call_channel_accept (TpBaseMediaCallChannel *channel) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (channel); rakia_sip_session_accept (self->priv->session); } static void rakia_call_channel_hold_state_changed (TpBaseMediaCallChannel *bmcc, TpLocalHoldState hold_state, TpLocalHoldStateReason hold_state_reason) { RakiaCallChannel *self = RAKIA_CALL_CHANNEL (bmcc); DEBUG ("hold state changed to %d", hold_state); switch (hold_state) { case TP_LOCAL_HOLD_STATE_PENDING_HOLD: case TP_LOCAL_HOLD_STATE_HELD: case TP_LOCAL_HOLD_STATE_PENDING_UNHOLD: rakia_sip_session_set_hold_requested (self->priv->session, TRUE); break; case TP_LOCAL_HOLD_STATE_UNHELD: rakia_sip_session_set_hold_requested (self->priv->session, FALSE); break; default: g_assert_not_reached (); } } static void ended_cb (RakiaSipSession *session, gboolean self_actor, guint status, gchar *message, RakiaCallChannel *self) { TpHandle actor; TpCallStateChangeReason reason; const gchar *detailed_reason = ""; gchar *free_message = NULL; if (self_actor) actor = tp_base_channel_get_self_handle (TP_BASE_CHANNEL (self)); else actor = tp_base_channel_get_target_handle (TP_BASE_CHANNEL (self)); switch (status) { case 400: /* Bad Request */ case 405: /* Method Not Allowed */ case 406: /* Not Acceptable */ case 413: /* Request Entity Too Large */ case 414: /* Request-URI Too Long */ case 415: /* Unsupported Media Type */ case 416: /* Unsupported URI Scheme */ case 420: /* Bad Extension */ case 421: /* Extension Required */ case 483: /* Too Many Hops */ case 484: /* Address incomplete */ case 485: /* Ambiguous */ case 493: /* Undecipherable */ case 606: /* Not Acceptable */ reason = TP_CALL_STATE_CHANGE_REASON_INTERNAL_ERROR; detailed_reason = TP_ERROR_STR_CONFUSED; break; case 500: /* Server Internal Error */ case 501: /* Not Implemented */ case 502: /* Bad Gateway */ case 503: /* Service Unavailable */ case 504: /* Server Time-out */ case 505: /* Version Not Supported */ case 513: /* Message Too Large */ reason = TP_CALL_STATE_CHANGE_REASON_SERVICE_ERROR; detailed_reason = TP_ERROR_STR_SERVICE_CONFUSED; break; case 401: /* Unauthorized */ case 403: /* Forbidden */ reason = TP_CALL_STATE_CHANGE_REASON_PERMISSION_DENIED; detailed_reason = TP_ERROR_STR_PERMISSION_DENIED; break; case 404: /* Not Found */ case 410: /* Gone */ case 604: /* Does Not Exist Anywhere */ reason = TP_CALL_STATE_CHANGE_REASON_INVALID_CONTACT; detailed_reason = TP_ERROR_STR_DOES_NOT_EXIST; break; case 480: /* Temporarily Unavaible */ case 408: /* Request Timeout */ reason = TP_CALL_STATE_CHANGE_REASON_NO_ANSWER; detailed_reason = TP_ERROR_STR_NO_ANSWER; break; case 486: /* Busy Here */ case 600: /* Busy Everywhere */ reason = TP_CALL_STATE_CHANGE_REASON_BUSY; detailed_reason = TP_ERROR_STR_BUSY; break; case 603: /* Decline */ reason = TP_CALL_STATE_CHANGE_REASON_REJECTED; detailed_reason = TP_ERROR_STR_REJECTED; break; default: reason = TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED; break; } if (message[0] == 0 && reason != 0) free_message = message = g_strdup_printf ("SIP status code %d", status); tp_base_call_channel_set_state (TP_BASE_CALL_CHANNEL (self), TP_CALL_STATE_ENDED, actor, reason, detailed_reason, message); g_free (free_message); } static void ringing_cb (RakiaSipSession *session, RakiaCallChannel *self) { tp_base_call_channel_update_member_flags (TP_BASE_CALL_CHANNEL (self), tp_base_channel_get_target_handle (TP_BASE_CHANNEL (self)), TP_CALL_MEMBER_FLAG_RINGING, tp_base_channel_get_target_handle (TP_BASE_CHANNEL (self)), TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", "Remote side has started ringing"); } static void queued_cb (RakiaSipSession *session, RakiaCallChannel *self) { } static void in_progress_cb (RakiaSipSession *session, RakiaCallChannel *self) { } static RakiaCallContent * rakia_call_channel_get_content_by_media (RakiaCallChannel *self, RakiaSipMedia *media) { GList *e; for (e = tp_base_call_channel_get_contents (TP_BASE_CALL_CHANNEL (self)); e != NULL; e = e->next) { RakiaCallContent *content = e->data; if (rakia_call_content_get_media (content) == media) return content; } return NULL; } static void new_content (RakiaCallChannel *self, const gchar *name, RakiaSipMedia *media, TpCallContentDisposition disposition) { TpBaseChannel *bchan = TP_BASE_CHANNEL (self); RakiaCallContent *content; TpMediaStreamType media_type; TpHandle creator; gchar *object_path; gchar *free_name = NULL; const gchar *media_type_name; switch (rakia_sip_media_get_media_type (media)) { case TP_MEDIA_STREAM_TYPE_AUDIO: media_type = TP_MEDIA_STREAM_TYPE_AUDIO; media_type_name = "Audio"; break; case TP_MEDIA_STREAM_TYPE_VIDEO: media_type = TP_MEDIA_STREAM_TYPE_VIDEO; media_type_name = "Video"; break; default: g_assert_not_reached (); } if (rakia_sip_media_is_created_locally (media)) creator = tp_base_channel_get_self_handle (bchan); else creator = tp_base_channel_get_target_handle (bchan); object_path = g_strdup_printf ("%s/Content%u", tp_base_channel_get_object_path (bchan), ++self->priv->last_content_no); if (name == NULL) name = free_name = g_strdup_printf ("%s %u", media_type_name, self->priv->last_content_no); /* We already request bidi for initial media, * the client can change it before accepting. */ if (disposition == TP_CALL_CONTENT_DISPOSITION_INITIAL) rakia_sip_media_set_requested_direction (media, RAKIA_DIRECTION_BIDIRECTIONAL); content = rakia_call_content_new (self, media, object_path, tp_base_channel_get_connection (bchan), name, media_type, creator, disposition); g_free (free_name); g_free (object_path); tp_base_call_channel_add_content (TP_BASE_CALL_CHANNEL (self), TP_BASE_CALL_CONTENT (content)); rakia_call_content_add_stream (content); } static void media_added_cb (RakiaSipSession *session, RakiaSipMedia *media, RakiaCallChannel *self) { TpCallContentDisposition disposition; const gchar *name; DEBUG ("Adding media"); /* Ignore new medias that we have created ourselves */ g_assert (rakia_call_channel_get_content_by_media (self, media) == NULL); switch (rakia_sip_session_get_state (session)) { case RAKIA_SIP_SESSION_STATE_CREATED: case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: disposition = TP_CALL_CONTENT_DISPOSITION_INITIAL; break; default: disposition = TP_CALL_CONTENT_DISPOSITION_NONE; } name = rakia_sip_media_get_name (media); new_content (self, name, media, disposition); } static void media_removed_cb (RakiaSipSession *session, RakiaSipMedia *media, RakiaCallChannel *self) { RakiaCallContent *content; content = rakia_call_channel_get_content_by_media (self, media); if (content == NULL) return; tp_base_call_channel_remove_content (TP_BASE_CALL_CHANNEL (self), TP_BASE_CALL_CONTENT (content), tp_base_channel_get_target_handle (TP_BASE_CHANNEL (self)), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "Removed by remote side"); } static void state_changed_cb (RakiaSipSession *session, RakiaSipSessionState old_state, RakiaSipSessionState new_state, RakiaCallChannel *self) { switch (new_state) { case RAKIA_SIP_SESSION_STATE_INVITE_SENT: /* Do nothing.. we don't have a TP state for this */ break; case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: /* This will never be received here because this is what * triggers RakiaMediaManager to create a Channel in the first place */ break; case RAKIA_SIP_SESSION_STATE_ACTIVE: if (tp_base_channel_is_requested (TP_BASE_CHANNEL (self))) { GList *e; tp_base_call_channel_remote_accept (TP_BASE_CALL_CHANNEL (self)); for (e = tp_base_call_channel_get_contents ( TP_BASE_CALL_CHANNEL (self)); e != NULL; e = e->next) { RakiaCallContent *content = e->data; if (content) rakia_call_content_remote_accept (content); } } case RAKIA_SIP_SESSION_STATE_ENDED: /* the ended callback is used to get more information */ break; default: break; } } static void remote_held_changed_cb (RakiaSipSession *session, GParamSpec *pspec, RakiaCallChannel *self) { TpBaseChannel *bchan = TP_BASE_CHANNEL (self); TpBaseCallChannel *bcc = TP_BASE_CALL_CHANNEL (self); gboolean remote_held; GHashTable *members; TpCallMemberFlags member_flags; TpHandle remote_contact = tp_base_channel_get_target_handle (bchan); g_object_get (session, "remote-held", &remote_held, NULL); members = tp_base_call_channel_get_call_members (bcc); member_flags = GPOINTER_TO_UINT (g_hash_table_lookup (members, GUINT_TO_POINTER (remote_contact))); if (!!(member_flags & TP_CALL_MEMBER_FLAG_HELD) == remote_held) return; if (remote_held) member_flags |= TP_CALL_MEMBER_FLAG_HELD; else member_flags &= ~TP_CALL_MEMBER_FLAG_HELD; tp_base_call_channel_update_member_flags (bcc, remote_contact, member_flags, remote_contact, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", remote_held ? "Held by remote side" : "Unheld by remote side"); } static gboolean rakia_call_channel_is_connected (TpBaseCallChannel *self) { /* We don't support ICE, so we don'T have the concept of connected-ness * yet. */ return TRUE; } void rakia_call_channel_hangup_error (RakiaCallChannel *self, TpCallStateChangeReason reason, const gchar *dbus_reason, const gchar *message) { TpHandle self_handle = tp_base_channel_get_self_handle ( TP_BASE_CHANNEL (self)); rakia_call_channel_hangup (TP_BASE_CALL_CHANNEL (self), reason, dbus_reason, message); tp_base_call_channel_set_state (TP_BASE_CALL_CHANNEL (self), TP_CALL_STATE_ENDED, self_handle, reason, dbus_reason, message); } telepathy-rakia-0.8.0/rakia/util.h0000644000175000017500000000232212223047264013742 00000000000000/* * util.h - declarations for Telepathy-Rakia utilities * Copyright (C) 2009 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef RAKIA_UTIL_H_ #define RAKIA_UTIL_H_ #include G_BEGIN_DECLS gchar * rakia_quote_string (const gchar *src); gchar * rakia_unquote_string (const gchar *src, gssize len); void rakia_string_append_quoted (GString *buf, const gchar *text); gchar const *rakia_version_string (void); G_END_DECLS #endif /* !RAKIA_UTIL_H_ */ telepathy-rakia-0.8.0/rakia/media-manager.h0000644000175000017500000000402312223047264015454 00000000000000/* * rakia/media-manager.h - Media channel manager for SIP * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_MEDIA_MANAGER_H__ #define __RAKIA_MEDIA_MANAGER_H__ #include G_BEGIN_DECLS typedef struct _RakiaMediaManager RakiaMediaManager; typedef struct _RakiaMediaManagerClass RakiaMediaManagerClass; typedef struct _RakiaMediaManagerPrivate RakiaMediaManagerPrivate; struct _RakiaMediaManagerClass { GObjectClass parent_class; }; struct _RakiaMediaManager { GObject parent; RakiaMediaManagerPrivate *priv; }; GType rakia_media_manager_get_type(void); /* TYPE MACROS */ #define RAKIA_TYPE_MEDIA_MANAGER \ (rakia_media_manager_get_type()) #define RAKIA_MEDIA_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_MEDIA_MANAGER, RakiaMediaManager)) #define RAKIA_MEDIA_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_MEDIA_MANAGER, RakiaMediaManagerClass)) #define RAKIA_IS_MEDIA_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_MEDIA_MANAGER)) #define RAKIA_IS_MEDIA_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_MEDIA_MANAGER)) #define RAKIA_MEDIA_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_MEDIA_MANAGER, RakiaMediaManagerClass)) G_END_DECLS #endif telepathy-rakia-0.8.0/rakia/handles.c0000644000175000017500000001637612223047264014414 00000000000000/* * rakia/handles.c - Handler helpers * Copyright (C) 2005 Collabora Ltd. * Copyright (C) 2006-2011 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" TpHandle rakia_handle_ensure (TpBaseConnection *conn, url_t const *uri, char const *alias) { TpHandleRepoIface *repo; gchar *str; TpHandle handle; g_return_val_if_fail (TP_IS_BASE_CONNECTION (conn), 0); g_return_val_if_fail (uri != NULL, 0); repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); str = url_as_string (NULL, uri); handle = tp_handle_ensure (repo, str, NULL, NULL); su_free (NULL, str); /* TODO: store the alias somehow (probably by moving this code * into RakiaBaseConnection and using a hash table in priv) */ return handle; } TpHandle rakia_handle_by_requestor (TpBaseConnection *conn, sip_t const *sip) { url_t const *uri; char const *display; g_return_val_if_fail (sip != NULL, 0); g_return_val_if_fail (sip->sip_from != NULL, 0); uri = sip->sip_from->a_url; display = sip->sip_from->a_display; return rakia_handle_ensure (conn, uri, display); } void rakia_handle_unref (TpBaseConnection *conn, TpHandle handle) { /* no longer useful */ } char const * rakia_handle_inspect (TpBaseConnection *conn, TpHandle handle) { TpHandleRepoIface *repo; g_return_val_if_fail (TP_IS_BASE_CONNECTION (conn), NULL); g_return_val_if_fail (handle != 0, NULL); repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); return tp_handle_inspect (repo, handle); } static gboolean priv_is_host (const gchar* str) { static GRegex *host_regex = NULL; #define DOMAIN "[a-z0-9]([-a-z0-9]*[a-z0-9])?" #define TLD "[a-z]([-a-z0-9]*[a-z0-9])?" if (host_regex == NULL) { GError *error = NULL; host_regex = g_regex_new ("^(" "("DOMAIN"\\.)*"TLD"\\.?|" /* host name */ "[0-9]{1,3}(\\.[0-9]{1,3}){3}|" /* IPv4 address */ "\\[[0-9a-f:.]\\]" /* IPv6 address, sloppily */ ")$", G_REGEX_CASELESS | G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &error); if (error != NULL) g_error ("failed to compile the host regex: %s", error->message); } #undef DOMAIN #undef TLD return g_regex_match (host_regex, str, 0, NULL); } static gboolean priv_is_tel_num (const gchar *str) { static GRegex *tel_num_regex = NULL; if (tel_num_regex == NULL) { GError *error = NULL; tel_num_regex = g_regex_new ( "^\\s*[\\+(]?\\s*[0-9][-.0-9()\\s]*$", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &error); if (error != NULL) g_error ("failed to compile the telephone number regex: %s", error->message); } return g_regex_match (tel_num_regex, str, 0, NULL); } /* Strip the non-essential characters from a string regarded as * a telephone number */ static gchar * priv_strip_tel_num (const gchar *fuzzy) { static GRegex *cruft_regex = NULL; if (cruft_regex == NULL) { GError *error = NULL; cruft_regex = g_regex_new ("[^+0-9]+", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &error); if (error != NULL) g_error ("failed to compile the non-essential " "telephone number cruft regex: %s", error->message); } return g_regex_replace_literal (cruft_regex, fuzzy, -1, 0, "", 0, NULL); } static const char * priv_lowercase_url_part (su_home_t *home, const char *src) { size_t n = 0; size_t i; char *res; for (i = 0; src[i]; i++) { if (g_ascii_isupper (src[i])) { n = i + strlen (src + i); break; } } if (!src[i]) return src; res = su_alloc (home, n + 1); memcpy (res, src, i); for (; i < n; i++) res[i] = g_ascii_tolower (src[i]); res[i] = '\0'; return (const char *) res; } #define RAKIA_RESERVED_CHARS_ALLOWED_IN_USERNAME "!*'()&=+$,;?/" gchar * rakia_normalize_contact (const gchar *sipuri, const url_t *base_url, const gchar *transport, GError **error) { su_home_t home[1] = { SU_HOME_INIT(home) }; url_t *url; gchar *retval = NULL; char *c; url = url_make (home, sipuri); if (url == NULL || (url->url_scheme == NULL && url->url_user == NULL)) { /* we got username or phone number, local to our domain */ gchar *user; if (base_url == NULL || base_url->url_host == NULL) { WARNING ("bare name given, but no account URL is set"); goto error; } if (priv_is_tel_num (sipuri)) { user = priv_strip_tel_num (sipuri); } else { user = g_uri_escape_string (sipuri, RAKIA_RESERVED_CHARS_ALLOWED_IN_USERNAME, FALSE); } if (base_url->url_type == url_sips) url = url_format (home, "sips:%s@%s", user, base_url->url_host); else url = url_format (home, "sip:%s@%s", user, base_url->url_host); g_free (user); if (!url) goto error; } else if (url->url_scheme == NULL) { /* Set the scheme to SIP or SIPS accordingly to the connection's * transport preference */ if (transport != NULL && g_ascii_strcasecmp (transport, "tls") == 0) { url->url_type = url_sips; url->url_scheme = "sips"; } else { url->url_type = url_sip; url->url_scheme = "sip"; } } if (url_sanitize (url) != 0) goto error; /* scheme should've been set by now */ if (url->url_scheme == NULL || (url->url_scheme[0] == 0)) goto error; /* convert the scheme to lowercase */ /* Note: we can't do it in place because url->url_scheme may point to * a static string */ url->url_scheme = priv_lowercase_url_part (home, url->url_scheme); /* Check that if we have '@', the username isn't empty. * Note that we rely on Sofia-SIP to canonize the user name */ if (url->url_user) { if (url->url_user[0] == 0) goto error; } /* host should be set and valid */ if (url->url_host == NULL || !priv_is_host (url->url_host)) goto error; /* convert host to lowercase */ for (c = (char *) url->url_host; *c; c++) { *c = g_ascii_tolower (*c); } retval = g_strdup (url_as_string (home, url)); error: if (retval == NULL) g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "invalid SIP URI"); su_home_deinit (home); return retval; } telepathy-rakia-0.8.0/rakia/Makefile.in0000644000175000017500000005756412223050267014700 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile.am for telepathy-rakia/rakia # # Copyright (C) 2008 Nokia Corporation # Contact: Mikhail Zabaluev # Licensed under LGPL. See file COPYING. # VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = rakia DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(rakia_include_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) librakia_la_LIBADD = am_librakia_la_OBJECTS = base-connection.lo base-connection-sofia.lo \ connection-aliasing.lo call-channel.lo call-content.lo \ call-stream.lo codec-param-formats.lo event-target.lo \ handles.lo debug.lo media-manager.lo sip-media.lo \ sip-session.lo text-channel.lo text-manager.lo util.lo nodist_librakia_la_OBJECTS = signals-marshal.lo librakia_la_OBJECTS = $(am_librakia_la_OBJECTS) \ $(nodist_librakia_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(librakia_la_SOURCES) $(nodist_librakia_la_SOURCES) DIST_SOURCES = $(librakia_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(rakia_includedir)" HEADERS = $(rakia_include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = librakia.la AM_CPPFLAGS = @GLIB_CFLAGS@ @TELEPATHY_GLIB_CFLAGS@ @SOFIA_SIP_UA_CFLAGS@ \ -I$(top_builddir) -I$(top_srcdir) AM_CFLAGS = $(ERROR_CFLAGS) $(COVERAGE_CFLAGS) AM_LDFLAGS = $(ERROR_LDFLAGS) rakia_includedir = $(includedir)/telepathy-rakia-0.7/rakia rakia_include_HEADERS = \ base-connection.h \ connection-aliasing.h \ sofia-decls.h \ codec-param-formats.h \ event-target.h \ handles.h \ debug.h \ media-manager.h \ text-manager.h \ util.h BUILT_SOURCES = \ signals-marshal.h \ signals-marshal.c librakia_la_SOURCES = \ base-connection.c \ base-connection-sofia.c \ connection-aliasing.c \ call-channel.h \ call-channel.c \ call-content.h \ call-content.c \ call-stream.h \ call-stream.c \ codec-param-formats.c \ event-target.c \ handles.c \ debug.c \ media-manager.c \ sip-media.c \ sip-media.h \ sip-session.c \ sip-session.h \ text-channel.h \ text-channel.c \ text-manager.c \ util.c nodist_librakia_la_SOURCES = \ signals-marshal.h \ signals-marshal.c EXTRA_DIST = signals-marshal.list CLEANFILES = $(BUILT_SOURCES) *.gcno all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rakia/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu rakia/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } librakia.la: $(librakia_la_OBJECTS) $(librakia_la_DEPENDENCIES) $(EXTRA_librakia_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(librakia_la_OBJECTS) $(librakia_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base-connection-sofia.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base-connection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/call-channel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/call-content.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/call-stream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/codec-param-formats.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-aliasing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event-target.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/media-manager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals-marshal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sip-media.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sip-session.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text-channel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text-manager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-rakia_includeHEADERS: $(rakia_include_HEADERS) @$(NORMAL_INSTALL) @list='$(rakia_include_HEADERS)'; test -n "$(rakia_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(rakia_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(rakia_includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(rakia_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(rakia_includedir)" || exit $$?; \ done uninstall-rakia_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(rakia_include_HEADERS)'; test -n "$(rakia_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(rakia_includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(rakia_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-rakia_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-rakia_includeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-rakia_includeHEADERS \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-rakia_includeHEADERS signals-marshal.c: ${srcdir}/signals-marshal.list ( echo '#include "signals-marshal.h"' && \ glib-genmarshal --body --prefix=_rakia_marshal $< ) >$@ || rm -f $@ signals-marshal.h: ${srcdir}/signals-marshal.list glib-genmarshal --header --prefix=_rakia_marshal $< >$@ || rm -f $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/rakia/text-channel.c0000644000175000017500000006500412223047264015360 00000000000000/* * sip-text-channel.c - Source for RakiaTextChannel * Copyright (C) 2005-2008 Collabora Ltd. * Copyright (C) 2005-2009 Nokia Corporation * @author Martti Mela * @author Mikhail Zabaluev * * Based on telepathy-gabble implementation (gabble-im-channel). * @author See gabble-im-channel.c * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/text-channel.h" #include #include #include #include #include #include #include #include #include #include #include #include "rakia/event-target.h" #include "rakia/base-connection.h" #include #include #define DEBUG_FLAG RAKIA_DEBUG_IM #include "rakia/debug.h" static gboolean rakia_text_channel_nua_r_message_cb (RakiaTextChannel *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo); static void channel_iface_init (gpointer, gpointer); static void destroyable_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (RakiaTextChannel, rakia_text_channel, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (RAKIA_TYPE_EVENT_TARGET, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, tp_message_mixin_text_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_MESSAGES, tp_message_mixin_messages_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_DESTROYABLE, destroyable_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL)); static const char *rakia_text_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_DESTROYABLE, TP_IFACE_CHANNEL_INTERFACE_MESSAGES, NULL }; /* properties */ enum { PROP_CONNECTION = 1, PROP_OBJECT_PATH, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_REQUESTED, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, LAST_PROPERTY }; /* private structures */ typedef struct _RakiaTextPendingMessage RakiaTextPendingMessage; struct _RakiaTextPendingMessage { nua_handle_t *nh; gchar *token; TpMessageSendingFlags flags; }; typedef struct _RakiaTextChannelPrivate RakiaTextChannelPrivate; struct _RakiaTextChannelPrivate { RakiaBaseConnection *conn; gchar *object_path; TpHandle handle; TpHandle initiator; guint sent_id; GQueue *sending_messages; gboolean closed; gboolean dispose_has_run; }; #define _rakia_text_pending_new0() \ (g_slice_new0(RakiaTextPendingMessage)) #define RAKIA_TEXT_CHANNEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RAKIA_TYPE_TEXT_CHANNEL, RakiaTextChannelPrivate)) static void rakia_text_pending_free (RakiaTextPendingMessage *msg) { if (msg->nh) nua_handle_unref (msg->nh); g_free (msg->token); g_slice_free (RakiaTextPendingMessage, msg); } static void rakia_text_channel_init (RakiaTextChannel *obj) { RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (obj); DEBUG("enter"); priv->sending_messages = g_queue_new (); } static void rakia_text_channel_send_message (GObject *object, TpMessage *message, TpMessageSendingFlags flags); static void rakia_text_channel_constructed (GObject *obj) { RakiaTextChannelPrivate *priv; TpBaseConnection *base_conn; TpDBusDaemon *bus; TpChannelTextMessageType types[] = { TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, }; const gchar * supported_content_types[] = { "text/plain", NULL }; GObjectClass *parent_object_class = G_OBJECT_CLASS (rakia_text_channel_parent_class); if (parent_object_class->constructed != NULL) parent_object_class->constructed (obj); priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE(RAKIA_TEXT_CHANNEL(obj)); base_conn = (TpBaseConnection *) priv->conn; g_assert (priv->initiator != 0); rakia_base_connection_add_auth_handler (priv->conn, RAKIA_EVENT_TARGET (obj)); g_signal_connect (obj, "nua-event::nua_r_message", G_CALLBACK (rakia_text_channel_nua_r_message_cb), NULL); tp_message_mixin_init (obj, G_STRUCT_OFFSET (RakiaTextChannel, message_mixin), base_conn); tp_message_mixin_implement_sending (obj, rakia_text_channel_send_message, G_N_ELEMENTS (types), types, 0, TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_FAILURES | TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_SUCCESSES, supported_content_types); bus = tp_base_connection_get_dbus_daemon (base_conn); tp_dbus_daemon_register_object (bus, priv->object_path, obj); } static void rakia_text_channel_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void rakia_text_channel_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); static void rakia_text_channel_dispose(GObject *object); static void rakia_text_channel_finalize(GObject *object); static void rakia_text_channel_class_init(RakiaTextChannelClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "TargetID", "target-id", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { "Requested", "requested", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { NULL } }; GObjectClass *object_class = G_OBJECT_CLASS (klass); GParamSpec *param_spec; DEBUG("enter"); g_type_class_add_private (klass, sizeof (RakiaTextChannelPrivate)); object_class->get_property = rakia_text_channel_get_property; object_class->set_property = rakia_text_channel_set_property; object_class->constructed = rakia_text_channel_constructed; object_class->dispose = rakia_text_channel_dispose; object_class->finalize = rakia_text_channel_finalize; g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object("connection", "RakiaConnection object", "SIP connection object that owns this SIP media channel object.", RAKIA_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property(object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Addition Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's SIP URI", "The URI string obtained by inspecting the peer handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's URI", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); klass->dbus_props_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (RakiaTextChannelClass, dbus_props_class)); tp_message_mixin_init_dbus_properties (object_class); } static void rakia_text_channel_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaTextChannel *chan = RAKIA_TEXT_CHANNEL(object); RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE(chan); TpBaseConnection *base_conn = (TpBaseConnection *) priv->conn; switch (property_id) { case PROP_CONNECTION: g_value_set_object(value, priv->conn); break; case PROP_OBJECT_PATH: g_value_set_string(value, priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_string(value, TP_IFACE_CHANNEL_TYPE_TEXT); break; case PROP_HANDLE_TYPE: g_value_set_uint(value, TP_HANDLE_TYPE_CONTACT); break; case PROP_HANDLE: g_value_set_uint(value, priv->handle); break; case PROP_TARGET_ID: { TpHandleRepoIface *repo = tp_base_connection_get_handles ( base_conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (repo, priv->handle)); } break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, priv->initiator); break; case PROP_INITIATOR_ID: { TpHandleRepoIface *repo = tp_base_connection_get_handles ( base_conn, TP_HANDLE_TYPE_CONTACT); g_assert (priv->initiator != 0); g_value_set_string (value, tp_handle_inspect (repo, priv->initiator)); } break; case PROP_REQUESTED: g_value_set_boolean (value, (priv->initiator == base_conn->self_handle)); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, priv->closed); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "MessagePartSupportFlags", TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "DeliveryReportingSupport", TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "SupportedContentTypes", TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "MessageTypes", NULL)); break; case PROP_INTERFACES: g_value_set_static_boxed (value, rakia_text_channel_interfaces); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); } } static void rakia_text_channel_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaTextChannel *chan = RAKIA_TEXT_CHANNEL (object); RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (chan); switch (property_id) { case PROP_CONNECTION: priv->conn = g_value_get_object (value); break; case PROP_OBJECT_PATH: g_assert (priv->object_path == NULL); priv->object_path = g_value_dup_string (value); break; case PROP_CHANNEL_TYPE: case PROP_HANDLE_TYPE: /* this property is writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_HANDLE: /* we don't ref it here because we don't necessarily have access to the * contact repo yet - instead we ref it in the constructed */ priv->handle = g_value_get_uint(value); break; case PROP_INITIATOR_HANDLE: /* similarly we can't ref this yet */ priv->initiator = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void rakia_text_channel_dispose(GObject *object) { RakiaTextChannel *self = RAKIA_TEXT_CHANNEL (object); RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (self); if (priv->dispose_has_run) return; priv->dispose_has_run = TRUE; if (!priv->closed) { priv->closed = TRUE; tp_svc_channel_emit_closed (self); } if (G_OBJECT_CLASS (rakia_text_channel_parent_class)->dispose) G_OBJECT_CLASS (rakia_text_channel_parent_class)->dispose (object); } static void zap_pending_messages (GQueue *pending_messages) { g_queue_foreach (pending_messages, (GFunc) rakia_text_pending_free, NULL); g_queue_clear (pending_messages); } static void rakia_text_channel_finalize(GObject *object) { RakiaTextChannel *self = RAKIA_TEXT_CHANNEL (object); RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (self); DEBUG ("%u pending outgoing message requests", g_queue_get_length (priv->sending_messages)); zap_pending_messages (priv->sending_messages); g_queue_free (priv->sending_messages); g_free (priv->object_path); tp_message_mixin_finalize (object); G_OBJECT_CLASS (rakia_text_channel_parent_class)->finalize (object); } static gint rakia_acknowledged_messages_compare(gconstpointer msg, gconstpointer id) { RakiaTextPendingMessage *message = (RakiaTextPendingMessage *)msg; nua_handle_t *nh = (nua_handle_t *) id; return (message->nh != nh); } /** * rakia_text_channel_close * * Implements DBus method Close * on interface org.freedesktop.Telepathy.Channel */ static void rakia_text_channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { RakiaTextChannel *self = RAKIA_TEXT_CHANNEL (iface); RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE(self); if (priv->closed) { DEBUG ("already closed, doing nothing"); } else { if (!tp_message_mixin_has_pending_messages ((GObject *) self, NULL)) { DEBUG ("actually closing, no pending messages"); priv->closed = TRUE; } else { DEBUG ("not really closing, there are pending messages left"); tp_message_mixin_set_rescued ((GObject *) self); if (priv->initiator != priv->handle) { g_assert (priv->initiator != 0); g_assert (priv->handle != 0); priv->initiator = priv->handle; } } tp_svc_channel_emit_closed (self); } tp_svc_channel_return_from_close (context); } /** * rakia_text_channel_destroy * * Implements D-Bus method Destroy * on interface org.freedesktop.Telepathy.Channel.Interface.Destroyable */ static void rakia_text_channel_destroy (TpSvcChannelInterfaceDestroyable *iface, DBusGMethodInvocation *context) { RakiaTextChannel *self = RAKIA_TEXT_CHANNEL (iface); tp_message_mixin_clear ((GObject *) iface); /* Close() and Destroy() have the same signature, so we can safely * chain to the other function now */ rakia_text_channel_close ((TpSvcChannel *) self, context); } /** * rakia_text_channel_get_channel_type * * Implements DBus method GetChannelType * on interface org.freedesktop.Telepathy.Channel */ static void rakia_text_channel_get_channel_type (TpSvcChannel *iface, DBusGMethodInvocation *context) { DEBUG("enter"); tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_TEXT); } /** * rakia_text_channel_get_handle * * Implements DBus method GetHandle * on interface org.freedesktop.Telepathy.Channel */ static void rakia_text_channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { RakiaTextChannel *obj = RAKIA_TEXT_CHANNEL (iface); RakiaTextChannelPrivate *priv; DEBUG("enter"); priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE(obj); tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT, priv->handle); } /** * rakia_text_channel_get_interfaces * * Implements DBus method GetInterfaces * on interface org.freedesktop.Telepathy.Channel */ static void rakia_text_channel_get_interfaces(TpSvcChannel *iface, DBusGMethodInvocation *context) { DEBUG("enter"); tp_svc_channel_return_from_get_interfaces (context, rakia_text_channel_interfaces); } static void rakia_text_channel_send_message (GObject *object, TpMessage *message, TpMessageSendingFlags flags) { RakiaTextChannel *self = RAKIA_TEXT_CHANNEL(object); RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (self); RakiaTextPendingMessage *msg = NULL; nua_handle_t *msg_nh = NULL; GError *error = NULL; const GHashTable *part; guint n_parts; const gchar *content_type; const gchar *text; DEBUG("enter"); #define INVALID_ARGUMENT(msg, ...) \ G_STMT_START { \ DEBUG (msg , ## __VA_ARGS__); \ g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, \ msg , ## __VA_ARGS__); \ goto fail; \ } G_STMT_END part = tp_message_peek (message, 0); if (tp_asv_lookup (part, "message-type") != NULL) { if (tp_asv_get_uint32 (part, "message-type", NULL) != TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL) INVALID_ARGUMENT ("invalid message type"); } n_parts = tp_message_count_parts (message); if (n_parts != 2) INVALID_ARGUMENT ("message must contain exactly 1 part, not %u", (n_parts - 1)); part = tp_message_peek (message, 1); content_type = tp_asv_get_string (part, "content-type"); text = tp_asv_get_string (part, "content"); if (content_type == NULL || tp_strdiff (content_type, "text/plain")) INVALID_ARGUMENT ("message must be text/plain"); if (text == NULL) INVALID_ARGUMENT ("content must be a UTF-8 string"); /* Okay, it's valid. Let's send it. */ msg_nh = rakia_base_connection_create_handle (priv->conn, priv->handle); if (msg_nh == NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Request creation failed"); goto fail; } rakia_event_target_attach (msg_nh, (GObject *) self); nua_message(msg_nh, SIPTAG_CONTENT_TYPE_STR("text/plain"), SIPTAG_PAYLOAD_STR(text), TAG_END()); msg = _rakia_text_pending_new0 (); msg->nh = msg_nh; msg->token = g_strdup_printf ("%u", priv->sent_id++); msg->flags = flags; tp_message_mixin_sent (object, message, flags, msg->token, NULL); g_queue_push_tail (priv->sending_messages, msg); DEBUG ("message queued for delivery"); return; fail: g_assert (error != NULL); tp_message_mixin_sent (object, message, 0, NULL, error); g_error_free (error); } static gchar * text_send_error_to_dbus_error (TpChannelTextSendError error) { switch (error) { case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE: return TP_ERROR_STR_OFFLINE; case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT: return TP_ERROR_STR_INVALID_HANDLE; case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED: return TP_ERROR_STR_PERMISSION_DENIED; case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG: return TP_ERROR_STR_INVALID_ARGUMENT; case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED: return TP_ERROR_STR_NOT_IMPLEMENTED; case TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN: default: return TP_ERROR_STR_INVALID_ARGUMENT; } return NULL; } static void delivery_report (RakiaTextChannel *self, const gchar *token, TpDeliveryStatus status, TpChannelTextSendError send_error) { RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (self); TpBaseConnection *base_conn; TpMessage *msg; base_conn = (TpBaseConnection *) priv->conn; msg = tp_cm_message_new (base_conn, 1); tp_cm_message_set_sender (msg, priv->handle); tp_message_set_uint32 (msg, 0, "message-type", TP_CHANNEL_TEXT_MESSAGE_TYPE_DELIVERY_REPORT); tp_message_set_string (msg, 0, "delivery-token", token); tp_message_set_uint32 (msg, 0, "delivery-status", status); if (status == TP_DELIVERY_STATUS_TEMPORARILY_FAILED || status == TP_DELIVERY_STATUS_PERMANENTLY_FAILED) { if (send_error != TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN) tp_message_set_uint32 (msg, 0, "delivery-error", send_error); tp_message_set_string (msg, 0, "delivery-dbus-error", text_send_error_to_dbus_error (send_error)); } tp_message_mixin_take_received((GObject *) self, msg); } static gboolean rakia_text_channel_nua_r_message_cb (RakiaTextChannel *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo) { RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (self); RakiaTextPendingMessage *msg; TpChannelTextSendError send_error; GList *node; /* ignore provisional responses */ if (ev->status < 200) return TRUE; node = g_queue_find_custom (priv->sending_messages, ev->nua_handle, rakia_acknowledged_messages_compare); /* Shouldn't happen... */ if (node == NULL) { WARNING ("message pending sent acknowledgement not found"); return FALSE; } msg = (RakiaTextPendingMessage *)node->data; g_assert (msg != NULL); /* FIXME: generate a delivery report */ if (ev->status >= 200 && ev->status < 300) { DEBUG ("message delivered"); if (msg->flags & TP_MESSAGE_SENDING_FLAG_REPORT_DELIVERY) { DEBUG ("Sending delivery report"); delivery_report (self, msg->token, TP_DELIVERY_STATUS_DELIVERED, 0); } } else { switch (ev->status) { case 401: case 403: case 407: case 603: send_error = TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED; break; case 604: send_error = TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT; break; case 405: case 406: case 415: case 416: case 488: case 501: case 505: case 606: send_error = TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED; break; case 410: send_error = TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT /* TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE? */; break; case 404: case 480: send_error = TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE; break; case 413: case 513: send_error = TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG; break; default: send_error = TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN; } delivery_report (self, msg->token, TP_DELIVERY_STATUS_PERMANENTLY_FAILED, send_error); } g_queue_remove(priv->sending_messages, msg); rakia_text_pending_free (msg); return TRUE; } void rakia_text_channel_receive(RakiaTextChannel *chan, const sip_t *sip, TpHandle sender, const char *text, gsize len) { RakiaTextChannelPrivate *priv = RAKIA_TEXT_CHANNEL_GET_PRIVATE (chan); TpMessage *msg; TpBaseConnection *base_conn; sip_call_id_t *hdr_call_id; sip_cseq_t *hdr_cseq; sip_date_t *hdr_date_sent; base_conn = (TpBaseConnection *) priv->conn; msg = tp_cm_message_new (base_conn, 2); DEBUG ("Received message from contact %u: %s", sender, text); /* Header */ tp_cm_message_set_sender (msg, sender); tp_message_set_int64 (msg, 0, "message-received", time (NULL)); hdr_date_sent = sip_date (sip); if (hdr_date_sent != NULL) { tp_message_set_int64 (msg, 0, "message-sent", hdr_date_sent->d_time - SU_TIME_EPOCH); } /* Create a message token out of globally unique SIP header values. * As MESSAGE requests can be sent within a dialog, we have to append * the Call-ID value with the sequence number in CSeq. */ hdr_call_id = sip_call_id (sip); hdr_cseq = sip_cseq (sip); if (hdr_call_id != NULL && hdr_cseq != NULL) { tp_message_set_string_printf (msg, 0, "message-token", "%s;cseq=%u", hdr_call_id->i_id, (guint) hdr_cseq->cs_seq); } /* Body */ tp_message_set_string (msg, 1, "content-type", "text/plain"); tp_message_set_string (msg, 1, "content", text); tp_message_mixin_take_received (G_OBJECT (chan), msg); } static void destroyable_iface_init (gpointer g_iface, gpointer iface_data) { TpSvcChannelInterfaceDestroyableClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_channel_interface_destroyable_implement_##x (\ klass, rakia_text_channel_##x) IMPLEMENT(destroy); #undef IMPLEMENT } static void channel_iface_init(gpointer g_iface, gpointer iface_data) { TpSvcChannelClass *klass = (TpSvcChannelClass *)g_iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (\ klass, rakia_text_channel_##x) IMPLEMENT(close); IMPLEMENT(get_channel_type); IMPLEMENT(get_handle); IMPLEMENT(get_interfaces); #undef IMPLEMENT } telepathy-rakia-0.8.0/rakia/sip-session.h0000644000175000017500000001071312223047264015244 00000000000000/* * rakia-sip-session.h - Header for RakiaSipSession * Copyright (C) 2005-2012 Collabora Ltd. * Copyright (C) 2005-2010 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_SIP_SESSION_H__ #define __RAKIA_SIP_SESSION_H__ #include #include #include #include G_BEGIN_DECLS typedef enum { RAKIA_SIP_SESSION_STATE_CREATED = 0, RAKIA_SIP_SESSION_STATE_INVITE_SENT, RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED, RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED, RAKIA_SIP_SESSION_STATE_ACTIVE, RAKIA_SIP_SESSION_STATE_REINVITE_SENT, RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED, RAKIA_SIP_SESSION_STATE_REINVITE_PENDING, RAKIA_SIP_SESSION_STATE_ENDED, NUM_RAKIA_SIP_SESSION_STATES } RakiaSipSessionState; /* RakiaSipSession is defined in sip-media.h */ /* typedef struct _RakiaSipSession RakiaSipSession; */ typedef struct _RakiaSipSessionClass RakiaSipSessionClass; typedef struct _RakiaSipSessionPrivate RakiaSipSessionPrivate; struct _RakiaSipSessionClass { GObjectClass parent_class; }; struct _RakiaSipSession { GObject parent; RakiaSipSessionPrivate *priv; }; GType rakia_sip_session_get_type(void); /* TYPE MACROS */ #define RAKIA_TYPE_SIP_SESSION \ (rakia_sip_session_get_type()) #define RAKIA_SIP_SESSION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_SIP_SESSION, RakiaSipSession)) #define RAKIA_SIP_SESSION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_SIP_SESSION, RakiaSipSessionClass)) #define RAKIA_IS_SIP_SESSION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_SIP_SESSION)) #define RAKIA_IS_SIP_SESSION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_SIP_SESSION)) #define RAKIA_SIP_SESSION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_SIP_SESSION, RakiaSipSessionClass)) /* For use by RakiaSipMedia */ gboolean rakia_sdp_rtcp_bandwidth_throttled (const sdp_bandwidth_t *b); gchar * rakia_sdp_get_string_attribute (const sdp_attribute_t *attrs, const char *name); /* For use by the upper layers */ RakiaSipSession * rakia_sip_session_new (nua_handle_t *nh, RakiaBaseConnection *conn, gboolean incoming, gboolean immutable_streams); void rakia_sip_session_terminate (RakiaSipSession *session, guint status, const gchar *reason); RakiaSipSessionState rakia_sip_session_get_state (RakiaSipSession *session); RakiaSipMedia* rakia_sip_session_add_media (RakiaSipSession *self, TpMediaStreamType media_type, const gchar *name, RakiaDirection direction); gboolean rakia_sip_session_remove_media (RakiaSipSession *self, RakiaSipMedia *media, guint status, const gchar *reason); void rakia_sip_session_ringing (RakiaSipSession *self); void rakia_sip_session_queued (RakiaSipSession *self); void rakia_sip_session_accept (RakiaSipSession *self); void rakia_sip_session_media_changed (RakiaSipSession *self); GPtrArray *rakia_sip_session_get_medias (RakiaSipSession *self); /* What is for ? */ gboolean rakia_sip_session_pending_offer (RakiaSipSession *self); /* Should be private */ void rakia_sip_session_change_state (RakiaSipSession *session, RakiaSipSessionState new_state); /* Obsolete */ void rakia_sip_session_respond (RakiaSipSession *self, gint status, const char *message); gboolean rakia_sip_session_is_accepted (RakiaSipSession *self); gboolean rakia_sip_session_has_media (RakiaSipSession *self, TpMediaStreamType media_type); gint rakia_sip_session_rate_native_transport (RakiaSipSession *session, const GValue *transport); void rakia_sip_session_set_hold_requested (RakiaSipSession *session, gboolean hold_requested); gboolean rakia_sip_session_is_held (RakiaSipSession *session); G_END_DECLS #endif /* #ifndef __RAKIA_SIP_SESSION_H__*/ telepathy-rakia-0.8.0/rakia/sip-media.c0000644000175000017500000007662312223047264014647 00000000000000/* * rakia-sip-media.c - Source for RakiaSipMedia * Copyright (C) 2005-2012 Collabora Ltd. * @author Olivier Crete * Copyright (C) 2005-2010 Nokia Corporation * @author Kai Vehmanen * @author Mikhail Zabaluev * * Based on telepathy-gabble implementation * @author Ole Andre Vadla Ravnaas * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/sip-media.h" #include #include #include #define DEBUG_FLAG RAKIA_DEBUG_MEDIA #include "rakia/debug.h" #include "rakia/codec-param-formats.h" #include "rakia/sip-session.h" #ifdef ENABLE_DEBUG #define MEDIA_DEBUG(media, format, ...) \ rakia_log (DEBUG_FLAG, G_LOG_LEVEL_DEBUG, "media %s %p: " format, \ priv_media_type_to_str ((media)->priv->media_type), (media), \ ##__VA_ARGS__) #define MEDIA_MESSAGE(media, format, ...) \ rakia_log (DEBUG_FLAG, G_LOG_LEVEL_MESSAGE, "media %s %p: " format, \ priv_media_type_to_str ((media)->priv->media_type), (media), \ ##__VA_ARGS__) #else #define MEDIA_DEBUG(media, format, ...) G_STMT_START { } G_STMT_END #define MEDIA_MESSAGE(media, format, ...) G_STMT_START { } G_STMT_END #endif /* The timeout for outstanding re-INVITE transactions in seconds. * Chosen to match the allowed cancellation timeout for proxies * described in RFC 3261 Section 13.3.1.1 */ #define RAKIA_REINVITE_TIMEOUT 180 G_DEFINE_TYPE(RakiaSipMedia, rakia_sip_media, G_TYPE_OBJECT) /* signals */ enum { SIG_LOCAL_NEGOTIATION_COMPLETE, SIG_REMOTE_CODEC_OFFER_UPDATED, SIG_REMOTE_CANDIDATES_UPDATED, SIG_LOCAL_UPDATED, SIG_DIRECTION_CHANGED, NUM_SIGNALS }; static guint signals[NUM_SIGNALS] = { 0 }; /* private structure */ struct _RakiaSipMediaPrivate { TpMediaStreamType media_type; RakiaSipSession *session; gchar *name; GPtrArray *local_codecs; GPtrArray *local_candidates; gboolean local_candidates_prepared; RakiaDirection direction; RakiaDirection requested_direction; gboolean hold_requested; gboolean created_locally; const sdp_media_t *remote_media; /* pointer to the SDP media structure * owned by the session object */ gboolean codec_intersect_pending; /* codec intersection is pending */ gboolean push_remote_codecs_pending; /* SetRemoteCodecs emission is pending */ gboolean push_candidates_on_new_codecs; GPtrArray *remote_codec_offer; GPtrArray *remote_candidates; gboolean can_receive; }; #define RAKIA_SIP_MEDIA_GET_PRIVATE(media) ((media)->priv) static void push_remote_candidates (RakiaSipMedia *media); static void rakia_sip_media_dispose (GObject *object); static void rakia_sip_media_finalize (GObject *object); static void rakia_sip_media_init (RakiaSipMedia *self) { RakiaSipMediaPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_SIP_MEDIA, RakiaSipMediaPrivate); self->priv = priv; } static void rakia_sip_media_class_init (RakiaSipMediaClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (RakiaSipMediaPrivate)); object_class->dispose = rakia_sip_media_dispose; object_class->finalize = rakia_sip_media_finalize; signals[SIG_LOCAL_NEGOTIATION_COMPLETE] = g_signal_new ("local-negotiation-complete", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); signals[SIG_REMOTE_CODEC_OFFER_UPDATED] = g_signal_new ("remote-codec-offer-updated", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); signals[SIG_REMOTE_CANDIDATES_UPDATED] = g_signal_new ("remote-candidates-updated", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); signals[SIG_LOCAL_UPDATED] = g_signal_new ("local-updated", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); signals[SIG_DIRECTION_CHANGED] = g_signal_new ("direction-changed", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } static void rakia_sip_media_dispose (GObject *object) { // RakiaSipMedia *self = RAKIA_SIP_MEDIA (object); DEBUG("enter"); if (G_OBJECT_CLASS (rakia_sip_media_parent_class)->dispose) G_OBJECT_CLASS (rakia_sip_media_parent_class)->dispose (object); DEBUG("exit"); } static void rakia_sip_media_finalize (GObject *object) { RakiaSipMedia *self = RAKIA_SIP_MEDIA (object); RakiaSipMediaPrivate *priv = self->priv; if (priv->local_candidates) g_ptr_array_unref (priv->local_candidates); if (priv->local_codecs) g_ptr_array_unref (priv->local_codecs); if (priv->remote_candidates) g_ptr_array_unref (priv->remote_candidates); if (priv->remote_codec_offer) g_ptr_array_unref (priv->remote_codec_offer); g_free (priv->name); G_OBJECT_CLASS (rakia_sip_media_parent_class)->finalize (object); DEBUG("exit"); } TpMediaStreamType rakia_sip_media_get_media_type (RakiaSipMedia *self) { return self->priv->media_type; } static const char * priv_media_type_to_str(TpMediaStreamType media_type) { switch (media_type) { case TP_MEDIA_STREAM_TYPE_AUDIO: return "audio"; case TP_MEDIA_STREAM_TYPE_VIDEO: return "video"; default: g_assert_not_reached (); return "-"; } } const gchar * sip_media_get_media_type_str (RakiaSipMedia *self) { g_return_val_if_fail (RAKIA_IS_SIP_MEDIA (self), ""); return priv_media_type_to_str (self->priv->media_type); } static void priv_append_rtpmaps (TpMediaStreamType media_type, const GPtrArray *codecs, GString *mline, GString *alines) { guint i; for (i = 0; i < codecs->len; i++) { RakiaSipCodec *codec = g_ptr_array_index (codecs, i); /* Add rtpmap entry to the a= lines */ g_string_append_printf (alines, "a=rtpmap:%u %s/%u", codec->id, codec->encoding_name, codec->clock_rate); if (codec->channels > 1) g_string_append_printf (alines, "/%u", codec->channels); g_string_append (alines, "\r\n"); /* Marshal parameters into the fmtp attribute */ if (codec->params != NULL) { GString *fmtp_value; g_string_append_printf (alines, "a=fmtp:%u ", codec->id); fmtp_value = g_string_new (NULL); rakia_codec_param_format (media_type, codec, fmtp_value); g_string_append (alines, fmtp_value->str); g_string_free (fmtp_value, TRUE); g_string_append (alines, "\r\n"); } /* Add PT id to the m= line */ g_string_append_printf (mline, " %u", codec->id); } } static void priv_get_preferred_local_candidates (RakiaSipMedia *media, RakiaSipCandidate **rtp_cand, RakiaSipCandidate **rtcp_cand) { RakiaSipMediaPrivate *priv = media->priv; guint i; g_assert (priv->local_candidates); g_assert (priv->local_candidates->len > 0); *rtp_cand = NULL; for (i = 0; i < priv->local_candidates->len; i++) { RakiaSipCandidate *tmpcand = g_ptr_array_index (priv->local_candidates, i); if (tmpcand->component != 1) continue; if (*rtp_cand == NULL) *rtp_cand = tmpcand; else if ((*rtp_cand)->priority > tmpcand->priority) *rtp_cand = tmpcand; } g_assert (*rtp_cand != NULL); if (rtcp_cand == NULL) return; *rtcp_cand = NULL; for (i = 0; i < priv->local_candidates->len; i++) { RakiaSipCandidate *tmpcand = g_ptr_array_index (priv->local_candidates, i); if (tmpcand->component != 2) continue; if (((*rtp_cand)->foundation == NULL && tmpcand->foundation == NULL) || ((*rtp_cand)->foundation != NULL && tmpcand->foundation != NULL && !strcmp ((*rtp_cand)->foundation, tmpcand->foundation))) { if (*rtcp_cand == NULL) *rtcp_cand = g_ptr_array_index (priv->local_candidates, i); else if ((*rtcp_cand)->priority > tmpcand->priority) *rtcp_cand = tmpcand; } } } static void rakia_sip_media_set_direction (RakiaSipMedia *media, RakiaDirection direction) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); priv->direction = direction; g_signal_emit (media, signals[SIG_DIRECTION_CHANGED], 0); } static RakiaDirection priv_get_sdp_direction (RakiaSipMedia *media, gboolean authoritative) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); RakiaDirection direction = priv->requested_direction; DEBUG ("req: %s auth: %d remote: %p %s hold: %d", rakia_direction_to_string (direction), authoritative, priv->remote_media, rakia_direction_to_string (rakia_sip_media_get_remote_direction (media)), priv->hold_requested); if (!authoritative && priv->remote_media) direction &= rakia_sip_media_get_remote_direction (media); /* Don't allow send, only receive if a hold is requested */ if (priv->hold_requested) direction &= RAKIA_DIRECTION_SEND; if (!authoritative) rakia_sip_media_set_direction (media, direction); return direction; } /** * Produces the SDP description of the media based on Farsight state and * current object state. * * @param media The media object * @param signal_update If true, emit the signal "local-media-updated". */ void rakia_sip_media_generate_sdp (RakiaSipMedia *media, GString *out, gboolean authoritative) { RakiaSipMediaPrivate *priv = media->priv; GString *alines; const gchar *dirline; RakiaSipCandidate *rtp_cand, *rtcp_cand; priv_get_preferred_local_candidates (media, &rtp_cand, &rtcp_cand); g_return_if_fail (rtp_cand != NULL); g_string_append (out, "m="); g_string_append_printf (out, "%s %u RTP/AVP", priv_media_type_to_str (priv->media_type), rtp_cand->port); switch (priv_get_sdp_direction (media, authoritative)) { case RAKIA_DIRECTION_BIDIRECTIONAL: dirline = ""; break; case RAKIA_DIRECTION_SEND: dirline = "a=sendonly\r\n"; break; case RAKIA_DIRECTION_RECEIVE: dirline = "a=recvonly\r\n"; break; case RAKIA_DIRECTION_NONE: dirline = "a=inactive\r\n"; break; default: g_assert_not_reached(); } alines = g_string_new (dirline); if (rtcp_cand != NULL) { /* Add RTCP attribute as per RFC 3605 */ if (strcmp (rtcp_cand->ip, rtp_cand->ip) != 0) { g_string_append_printf (alines, "a=rtcp:%u IN %s %s\r\n", rtcp_cand->port, (strchr (rtcp_cand->ip, ':') == NULL) ? "IP4" : "IP6", rtcp_cand->ip); } else if (rtcp_cand->port != rtp_cand->port + 1) { g_string_append_printf (alines, "a=rtcp:%u\r\n", rtcp_cand->port); } } priv_append_rtpmaps (priv->media_type, priv->local_codecs, out, alines); g_string_append_printf (out, "\r\nc=IN %s %s\r\n", (strchr (rtp_cand->ip, ':') == NULL)? "IP4" : "IP6", rtp_cand->ip); g_string_append (out, alines->str); g_string_free (alines, TRUE); } RakiaSipCodec* rakia_sip_codec_new (guint id, const gchar *encoding_name, guint clock_rate, guint channels) { RakiaSipCodec *codec = g_slice_new (RakiaSipCodec); codec->id = id; codec->encoding_name = g_strdup (encoding_name); codec->clock_rate = clock_rate; codec->channels = channels; codec->params = NULL; return codec; } static void rakia_sip_codec_param_free (RakiaSipCodecParam *param) { g_free (param->name); g_free (param->value); g_slice_free (RakiaSipCodecParam, param); } void rakia_sip_codec_add_param (RakiaSipCodec *codec, const gchar *name, const gchar *value) { RakiaSipCodecParam *param; if (codec->params == NULL) codec->params = g_ptr_array_new_with_free_func ( (GDestroyNotify) rakia_sip_codec_param_free); param = g_slice_new (RakiaSipCodecParam); param->name = g_strdup (name); param->value = g_strdup (value); g_ptr_array_add (codec->params, param); } void rakia_sip_codec_free (RakiaSipCodec *codec) { g_free (codec->encoding_name); if (codec->params) g_ptr_array_unref (codec->params); g_slice_free (RakiaSipCodec, codec); } RakiaSipCandidate* rakia_sip_candidate_new (guint component, const gchar *ip, guint port, const gchar *foundation, guint priority) { RakiaSipCandidate *candidate = g_slice_new (RakiaSipCandidate); candidate->component = component; candidate->ip = g_strdup (ip); candidate->port = port; candidate->foundation = g_strdup (foundation); candidate->priority = priority; return candidate; } void rakia_sip_candidate_free (RakiaSipCandidate *candidate) { g_free (candidate->ip); g_free (candidate->foundation); g_slice_free (RakiaSipCandidate, candidate); } RakiaDirection rakia_direction_from_remote_media (const sdp_media_t *media) { sdp_mode_t mode = media->m_mode; return ((mode & sdp_recvonly)? RAKIA_DIRECTION_SEND : 0) | ((mode & sdp_sendonly)? RAKIA_DIRECTION_RECEIVE : 0); } static gboolean rakia_sdp_codecs_differ (const sdp_rtpmap_t *m1, const sdp_rtpmap_t *m2) { while (m1 != NULL && m2 != NULL) { if (sdp_rtpmap_cmp (m1, m2) != 0) return TRUE; m1 = m1->rm_next; m2 = m2->rm_next; } return m1 != NULL || m2 != NULL; } gchar * rakia_sdp_get_string_attribute (const sdp_attribute_t *attrs, const char *name) { sdp_attribute_t *attr; attr = sdp_attribute_find (attrs, name); if (attr == NULL) return NULL; return g_strdup (attr->a_value); } RakiaDirection rakia_sip_media_get_remote_direction (RakiaSipMedia *media) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); if (priv->remote_media == NULL) return RAKIA_DIRECTION_NONE; return rakia_direction_from_remote_media (priv->remote_media); } static void priv_update_sending (RakiaSipMedia *media, RakiaDirection send_direction) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); RakiaDirection recv_direction; /* Only keep the receiving bit from the current direction */ recv_direction = priv->direction & RAKIA_DIRECTION_RECEIVE; /* And only the sending bit from the new direction */ send_direction &= RAKIA_DIRECTION_SEND; rakia_sip_media_set_direction (media, send_direction | recv_direction); } void rakia_sip_media_set_requested_direction (RakiaSipMedia *media, RakiaDirection direction) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); if (priv->requested_direction == direction) return; priv->requested_direction = direction; if (priv->requested_direction == priv->direction) return; rakia_sip_media_local_updated (media); } static void push_remote_codecs (RakiaSipMedia *media) { RakiaSipMediaPrivate *priv; GPtrArray *codecs; const sdp_media_t *sdpmedia; const sdp_rtpmap_t *rtpmap; gchar *ptime = NULL; gchar *max_ptime = NULL; DEBUG ("enter"); priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); sdpmedia = priv->remote_media; if (sdpmedia == NULL) { MEDIA_DEBUG (media, "remote media description is not received yet"); return; } ptime = rakia_sdp_get_string_attribute (sdpmedia->m_attributes, "ptime"); if (ptime == NULL) { g_object_get (priv->session, "remote-ptime", &ptime, NULL); } max_ptime = rakia_sdp_get_string_attribute (sdpmedia->m_attributes, "maxptime"); if (max_ptime == NULL) { g_object_get (priv->session, "remote-max-ptime", &max_ptime, NULL); } codecs = g_ptr_array_new_with_free_func ( (GDestroyNotify) rakia_sip_codec_free); rtpmap = sdpmedia->m_rtpmaps; while (rtpmap) { RakiaSipCodec *codec; codec = rakia_sip_codec_new (rtpmap->rm_pt, rtpmap->rm_encoding, rtpmap->rm_rate, rtpmap->rm_params ? atoi(rtpmap->rm_params) : 0); rakia_codec_param_parse (priv->media_type, codec, rtpmap->rm_fmtp); if (ptime != NULL) rakia_sip_codec_add_param (codec, "ptime", ptime); if (max_ptime != NULL) rakia_sip_codec_add_param (codec, "maxptime", max_ptime); g_ptr_array_add (codecs, codec); rtpmap = rtpmap->rm_next; } g_free (ptime); g_free (max_ptime); if (priv->remote_codec_offer) g_ptr_array_unref (priv->remote_codec_offer); priv->remote_codec_offer = codecs; g_signal_emit (media, signals[SIG_REMOTE_CODEC_OFFER_UPDATED], 0, priv->codec_intersect_pending); MEDIA_DEBUG(media, "emitting %d remote codecs to the handler", codecs->len); } static void push_remote_candidates (RakiaSipMedia *media) { RakiaSipMediaPrivate *priv; RakiaSipCandidate *rtp_cand; const sdp_media_t *sdp_media; const sdp_connection_t *sdp_conn; GPtrArray *candidates; guint port; DEBUG("enter"); priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); sdp_media = priv->remote_media; if (sdp_media == NULL) { MEDIA_DEBUG (media, "remote media description is not received yet"); return; } /* use the address from SDP c-line as the only remote candidate */ sdp_conn = sdp_media_connections (sdp_media); g_return_if_fail (sdp_conn != NULL); port = (guint) sdp_media->m_port; rtp_cand = rakia_sip_candidate_new (1, sdp_conn->c_address, port, NULL, 0); candidates = g_ptr_array_new_with_free_func ( (GDestroyNotify) rakia_sip_candidate_free); g_ptr_array_add (candidates, rtp_cand); MEDIA_DEBUG (media, "remote RTP address=<%s>, port=<%u>", sdp_conn->c_address, port); if (!rakia_sdp_rtcp_bandwidth_throttled (sdp_media->m_bandwidths)) { gboolean session_rtcp_enabled = TRUE; g_object_get (priv->session, "rtcp-enabled", &session_rtcp_enabled, NULL); if (session_rtcp_enabled) { const sdp_attribute_t *rtcp_attr; const char *rtcp_address; guint rtcp_port; RakiaSipCandidate *rtcp_cand; /* Get the port and optional address for RTCP accordingly to RFC 3605 */ rtcp_address = sdp_conn->c_address; rtcp_attr = sdp_attribute_find (sdp_media->m_attributes, "rtcp"); if (rtcp_attr == NULL || rtcp_attr->a_value == NULL) { rtcp_port = port + 1; } else { const char *rest; rtcp_port = (guint) g_ascii_strtoull (rtcp_attr->a_value, (gchar **) &rest, 10); if (rtcp_port != 0 && (strncmp (rest, " IN IP4 ", 8) == 0 || strncmp (rest, " IN IP6 ", 8) == 0)) rtcp_address = rest + 8; } rtcp_cand = rakia_sip_candidate_new (2, rtcp_address, rtcp_port, NULL, 0); g_ptr_array_add (candidates, rtcp_cand); } } if (priv->remote_candidates != NULL) g_ptr_array_unref (priv->remote_candidates); priv->remote_candidates = candidates; g_signal_emit (media, signals[SIG_REMOTE_CANDIDATES_UPDATED], 0); } /* * Sets the remote candidates and codecs for this stream, as * received via signaling. * * Parses the SDP information, updates TP remote candidates and * codecs if the client is ready. * * Note that the pointer to the media description structure is saved, * implying that the structure shall not go away for the lifetime of * the stream, preferably kept in the memory home attached to * the session object. * * @return TRUE if the remote information has been accepted, * FALSE if the update is not acceptable. */ gboolean rakia_sip_media_set_remote_media (RakiaSipMedia *media, const sdp_media_t *new_media, gboolean authoritative) { RakiaSipMediaPrivate *priv; sdp_connection_t *sdp_conn; const sdp_media_t *old_media; gboolean transport_changed = TRUE; gboolean codecs_changed = TRUE; guint new_direction; RakiaDirection direction_up_mask; DEBUG ("enter"); priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); /* Do sanity checks */ g_return_val_if_fail (new_media != NULL, FALSE); if (new_media->m_rejected || new_media->m_port == 0) { MEDIA_DEBUG (media, "the media is rejected remotely"); return FALSE; } if (new_media->m_proto != sdp_proto_rtp) { MEDIA_MESSAGE (media, "the remote protocol is not RTP/AVP"); return FALSE; } sdp_conn = sdp_media_connections (new_media); if (sdp_conn == NULL) { MEDIA_MESSAGE (media, "no valid remote connections"); return FALSE; } if (new_media->m_rtpmaps == NULL) { MEDIA_MESSAGE (media, "no remote codecs"); return FALSE; } /* Note: always update the pointer to the current media structure * because of memory management done in the session object */ old_media = priv->remote_media; priv->remote_media = new_media; /* Check if there was any media update at all */ new_direction = rakia_direction_from_remote_media (new_media); /* * Do not allow: * 1) an answer to bump up directions beyond what's been offered; * 2) an offer to remove the local hold. */ if (authoritative) direction_up_mask = priv->hold_requested ? RAKIA_DIRECTION_SEND : RAKIA_DIRECTION_BIDIRECTIONAL; else direction_up_mask = 0; /* Make sure the peer can only enable sending or receiving direction * if it's allowed to */ new_direction &= priv->requested_direction | direction_up_mask; if (sdp_media_cmp (old_media, new_media) == 0) { MEDIA_DEBUG (media, "no media changes detected for the media"); goto done; } if (old_media != NULL) { /* Check if the transport candidate needs to be changed */ if (!sdp_connection_cmp (sdp_media_connections (old_media), sdp_conn)) transport_changed = FALSE; /* Check if the codec list needs to be updated */ codecs_changed = rakia_sdp_codecs_differ (old_media->m_rtpmaps, new_media->m_rtpmaps); /* Disable sending at this point if it will be disabled * accordingly to the new direction */ priv_update_sending (media, new_direction & RAKIA_DIRECTION_SEND); } /* First add the new candidate, then update the codec set. * The offerer isn't supposed to send us anything from the new transport * until we accept; if it's the answer, both orderings have problems. */ if (transport_changed) { /* Make sure we stop sending before we use the new set of codecs * intended for the new connection * This only applies if we were already sending to somewhere else before. */ if (codecs_changed && old_media) { priv->push_candidates_on_new_codecs = TRUE; if (priv->remote_candidates != NULL) { g_ptr_array_unref (priv->remote_candidates); priv->remote_candidates = NULL; g_signal_emit (media, signals[SIG_REMOTE_CANDIDATES_UPDATED], 0); } } else { push_remote_candidates (media); } } if (codecs_changed) { if (authoritative) priv->codec_intersect_pending = TRUE; if (priv->remote_codec_offer == NULL) push_remote_codecs (media); else priv->push_remote_codecs_pending = TRUE; } /* TODO: this will go to session change commit code */ done: /* Set the final direction */ rakia_sip_media_set_direction (media, new_direction); return TRUE; } RakiaDirection rakia_sip_media_get_requested_direction (RakiaSipMedia *self) { return self->priv->requested_direction; } gboolean rakia_sip_media_is_codec_intersect_pending (RakiaSipMedia *self) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (self); return priv->codec_intersect_pending; } gboolean rakia_sip_media_is_ready (RakiaSipMedia *self) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (self); MEDIA_DEBUG (self, "is_ready, requested_recv: %d can_recv: %d " "local_cand_prep: %d local_codecs: %p local_inter_pending: %d", priv->requested_direction & RAKIA_DIRECTION_RECEIVE, priv->can_receive, self->priv->local_candidates_prepared, self->priv->local_codecs, priv->codec_intersect_pending); if (priv->requested_direction & RAKIA_DIRECTION_RECEIVE && !priv->can_receive && !priv->hold_requested) return FALSE; return (self->priv->local_candidates_prepared && self->priv->local_codecs && !priv->codec_intersect_pending); } void rakia_sip_media_take_local_codecs (RakiaSipMedia *self, GPtrArray *local_codecs) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (self); if (priv->local_codecs) g_ptr_array_unref (priv->local_codecs); priv->local_codecs = local_codecs; if (priv->push_remote_codecs_pending) { priv->push_remote_codecs_pending = FALSE; push_remote_codecs (self); } else { if (priv->push_candidates_on_new_codecs) { /* Push the new candidates now that we have new codecs */ priv->push_candidates_on_new_codecs = FALSE; push_remote_candidates (self); } if (priv->codec_intersect_pending) { priv->codec_intersect_pending = FALSE; if (rakia_sip_media_is_ready (self)) { g_signal_emit (self, signals[SIG_LOCAL_NEGOTIATION_COMPLETE], 0, TRUE); g_ptr_array_unref (priv->remote_codec_offer); priv->remote_codec_offer = NULL; } } else { rakia_sip_media_local_updated (self); } } } void rakia_sip_media_take_local_candidate (RakiaSipMedia *self, RakiaSipCandidate *candidate) { g_return_if_fail (!self->priv->local_candidates_prepared); if (self->priv->local_candidates == NULL) self->priv->local_candidates = g_ptr_array_new_with_free_func ( (GDestroyNotify) rakia_sip_candidate_free); g_ptr_array_add (self->priv->local_candidates, candidate); } gboolean rakia_sip_media_local_candidates_prepared (RakiaSipMedia *self) { RakiaSipCandidate *rtp_cand = NULL; if (self->priv->local_candidates == NULL) return FALSE; if (self->priv->local_candidates_prepared) return FALSE; priv_get_preferred_local_candidates (self, &rtp_cand, NULL); if (!rtp_cand) return FALSE; self->priv->local_candidates_prepared = TRUE; if (rakia_sip_media_is_ready (self)) { g_signal_emit (self, signals[SIG_LOCAL_NEGOTIATION_COMPLETE], 0, TRUE); } return TRUE; } GPtrArray * rakia_sip_media_get_remote_codec_offer (RakiaSipMedia *self) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (self); return priv->remote_codec_offer; } GPtrArray * rakia_sip_media_get_remote_candidates (RakiaSipMedia *self) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (self); return priv->remote_candidates; } gboolean rakia_sip_media_is_created_locally (RakiaSipMedia *self) { return self->priv->created_locally; } void rakia_sip_media_local_updated (RakiaSipMedia *self) { g_signal_emit (self, signals[SIG_LOCAL_UPDATED], 0); } RakiaSipMedia * rakia_sip_media_new (RakiaSipSession *session, TpMediaStreamType media_type, const gchar *name, RakiaDirection requested_direction, gboolean created_locally, gboolean hold_requested) { RakiaSipMedia *self; g_return_val_if_fail (media_type == TP_MEDIA_STREAM_TYPE_VIDEO || media_type == TP_MEDIA_STREAM_TYPE_AUDIO, NULL); g_return_val_if_fail (requested_direction <= RAKIA_DIRECTION_BIDIRECTIONAL, NULL); self = g_object_new (RAKIA_TYPE_SIP_MEDIA, NULL); self->priv->session = session; self->priv->media_type = media_type; self->priv->name = g_strdup (name); self->priv->requested_direction = requested_direction; self->priv->created_locally = created_locally; self->priv->hold_requested = hold_requested; return self; } const gchar * rakia_sip_media_get_name (RakiaSipMedia *media) { return media->priv->name; } RakiaSipSession * rakia_sip_media_get_session (RakiaSipMedia *media) { return media->priv->session; } void rakia_sip_media_codecs_rejected (RakiaSipMedia *media) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); if (priv->push_remote_codecs_pending) { priv->push_remote_codecs_pending = FALSE; push_remote_codecs (media); } else { priv->codec_intersect_pending = FALSE; g_signal_emit (media, signals[SIG_LOCAL_NEGOTIATION_COMPLETE], 0, FALSE); g_ptr_array_unref (priv->remote_codec_offer); priv->remote_codec_offer = NULL; } } RakiaDirection rakia_sip_media_get_direction (RakiaSipMedia *media) { return media->priv->direction; } void rakia_sip_media_set_hold_requested (RakiaSipMedia *media, gboolean hold_requested) { if (media->priv->hold_requested == hold_requested) return; media->priv->hold_requested = hold_requested; } gboolean rakia_sip_media_get_hold_requested (RakiaSipMedia *media) { return media->priv->hold_requested; } gboolean rakia_sip_media_is_held (RakiaSipMedia *media) { return !(media->priv->direction & RAKIA_DIRECTION_SEND); } void rakia_sip_media_set_can_receive (RakiaSipMedia *media, gboolean can_receive) { RakiaSipMediaPrivate *priv = RAKIA_SIP_MEDIA_GET_PRIVATE (media); if (priv->can_receive == can_receive) return; priv->can_receive = can_receive; if (rakia_sip_media_is_ready (media)) { g_signal_emit (media, signals[SIG_LOCAL_NEGOTIATION_COMPLETE], 0, TRUE); if (priv->remote_codec_offer) { g_ptr_array_unref (priv->remote_codec_offer); priv->remote_codec_offer = NULL; } } } gboolean rakia_sip_media_has_remote_media (RakiaSipMedia *media) { return (media->priv->remote_media != NULL); } const gchar * rakia_direction_to_string (RakiaDirection direction) { switch (direction) { case RAKIA_DIRECTION_NONE: return "none"; case RAKIA_DIRECTION_SEND: return "send"; case RAKIA_DIRECTION_RECEIVE: return "recv"; case RAKIA_DIRECTION_BIDIRECTIONAL: return "bidi"; default: g_warning ("Invalid direction %d", direction); return "broken"; } } telepathy-rakia-0.8.0/rakia/debug.h0000644000175000017500000000442512223047264014061 00000000000000/* * debug.h - Debug helpers for Telepathy-Rakia, headers * Copyright (C) 2007-2008 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __DEBUG_H__ #define __DEBUG_H__ #include #include G_BEGIN_DECLS typedef enum { RAKIA_DEBUG_CONNECTION = 1 << 0, RAKIA_DEBUG_MEDIA = 1 << 1, RAKIA_DEBUG_IM = 1 << 2, RAKIA_DEBUG_EVENTS = 1 << 3, RAKIA_DEBUG_SOFIA = 1 << 4, RAKIA_DEBUG_UTILITIES = 1 << 5, RAKIA_DEBUG_CALL = 1 << 6, } RakiaDebugFlags; void rakia_debug_set_flags_from_env (void); void rakia_debug_set_flags (RakiaDebugFlags flags); gboolean rakia_debug_flag_is_set (RakiaDebugFlags flag); void rakia_log (RakiaDebugFlags flag, GLogLevelFlags level, const gchar *format, ...) G_GNUC_PRINTF (3, 4); void rakia_debug_free (void); void rakia_sofia_log_handler (void *logdata, const char *format, va_list args); G_END_DECLS #if defined(ENABLE_DEBUG) && defined(DEBUG_FLAG) #define DEBUG(format, ...) \ rakia_log(DEBUG_FLAG, G_LOG_LEVEL_DEBUG, "%s: " format, \ G_STRFUNC, ##__VA_ARGS__) #define WARNING(format, ...) \ rakia_log(DEBUG_FLAG, G_LOG_LEVEL_WARNING, "%s: " format, \ G_STRFUNC, ##__VA_ARGS__) #define MESSAGE(format, ...) \ rakia_log(DEBUG_FLAG, G_LOG_LEVEL_MESSAGE, "%s: " format, \ G_STRFUNC, ##__VA_ARGS__) #else /* ENABLE_DEBUG && DEBUG_FLAG */ #define DEBUG(format, ...) G_STMT_START { } G_STMT_END #define WARNING(format, ...) G_STMT_START { } G_STMT_END #define MESSAGE(format, ...) G_STMT_START { } G_STMT_END #endif /* ENABLE_DEBUG && DEBUG_FLAG */ #endif /* __DEBUG_H__ */ telepathy-rakia-0.8.0/rakia/sofia-decls.h0000644000175000017500000000400012223047264015151 00000000000000/* * sofia-decls.h - A header file to pull in Sofia APIs * Copyright (C) 2006-2009 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _RAKIA_SOFIA_DECLS_H_ #define _RAKIA_SOFIA_DECLS_H_ /* note: As one Sofia-SIP NUA instance is created per SIP connection, * RakiaConnection is used as the context pointer. * See {top}/docs/design.txt for further information. * * Each NUA handle managed by Telepathy-Rakia is bound to an object * implementing RakiaEventTarget. The managed NUA handle survives at * least as long as the bound object. When the object is destroyed, * the handle is bound to a special end-of-life event handler object. * Thus, any NUA handle has either the magic value of NULL, or * pointing to an event target object attached to this handle. */ #define NUA_MAGIC_T struct _RakiaBaseConnection #define NUA_HMAGIC_T struct _RakiaEventTarget #define SU_ROOT_MAGIC_T struct _RakiaConnectionManager #define SU_TIMER_ARG_T struct _RakiaBaseConnection #define SU_WAKEUP_ARG_T void #define RAKIA_DEFAULT_STUN_PORT 3478 /* Maximum defer timeout for deferrable Sofia timers */ #define RAKIA_DEFER_TIMEOUT 30 #include #include #endif /* _RAKIA_SOFIA_DECLS_H_*/ telepathy-rakia-0.8.0/rakia/event-target.h0000644000175000017500000000602012223047264015371 00000000000000/* * event-target.h - Header for RakiaEventTarget interface and related utilities * Copyright (C) 2008 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_EVENT_TARGET_H__ #define __RAKIA_EVENT_TARGET_H__ #include #include G_BEGIN_DECLS typedef struct _RakiaNuaEvent RakiaNuaEvent; /** * RakiaNuaEvent: * @nua_event: The NUA event identifier * @status: a SIP status code, or a status value used by Sofia-SIP * @text: The text corresponding to the status code * @nua: Pointer to the NUA stack * @nua_handle: The NUA operation handle for the event * @sip: Headers in the parsed incoming message, or NULL * * This structure contains data passed to the NUA event callback. * The event tag list is not included and passed as a separate parameter. */ struct _RakiaNuaEvent { nua_event_t nua_event; gint status; const gchar *text; nua_t *nua; nua_handle_t *nua_handle; const sip_t *sip; }; /** * RakiaEventTarget: * * A typedef representing any implementation of this interface. */ typedef struct _RakiaEventTarget RakiaEventTarget; typedef struct _RakiaEventTargetInterface RakiaEventTargetInterface; /* TYPE MACROS */ #define RAKIA_TYPE_EVENT_TARGET \ (rakia_event_target_get_type ()) #define RAKIA_EVENT_TARGET(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_EVENT_TARGET, RakiaEventTarget)) #define RAKIA_IS_EVENT_TARGET(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_EVENT_TARGET)) #define RAKIA_EVENT_TARGET_GET_INTERFACE(obj) \ (G_TYPE_INSTANCE_GET_INTERFACE((obj), RAKIA_TYPE_EVENT_TARGET, RakiaEventTargetInterface)) struct _RakiaEventTargetInterface { GTypeInterface base_iface; /* gboolean (* nua_event) (RakiaEventTarget *self, const RakiaEvent *event, tagi_t tags[]); */ }; GType rakia_event_target_get_type (void) G_GNUC_CONST; void rakia_event_target_attach (nua_handle_t *nh, GObject *target); void rakia_event_target_detach (nua_handle_t *nh); gboolean rakia_event_target_emit_nua_event (gpointer instance, const RakiaNuaEvent *event, tagi_t tags[]); G_END_DECLS #endif /*__RAKIA_EVENT_TARGET_H__*/ telepathy-rakia-0.8.0/rakia/base-connection-sofia.c0000644000175000017500000001120412223047264017125 00000000000000/* * sip-connection-sofia.c - Source for RakiaConnection Sofia event handling * Copyright (C) 2006-2007 Nokia Corporation * Copyright (C) 2007-2008 Collabora Ltd. * @author Kai Vehmanen * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #define DEBUG_FLAG RAKIA_DEBUG_EVENTS #include "rakia/debug.h" static void priv_r_shutdown(int status, nua_t *nua) { GSource *source; gboolean source_recursive; if (status < 200) return; /* Should be the source of the Sofia root */ source = g_main_current_source (); /* XXX: temporarily allow recursion in the Sofia source to work around * nua_destroy() requiring nested mainloop iterations to complete * (Sofia-SIP bug #1624446). Actual recursion safety of the source is to be * examined. */ source_recursive = g_source_get_can_recurse (source); if (!source_recursive) { DEBUG("forcing Sofia root GSource to be recursive"); g_source_set_can_recurse (source, TRUE); } DEBUG("destroying Sofia-SIP NUA at address %p", nua); nua_destroy (nua); if (!source_recursive) g_source_set_can_recurse (source, FALSE); } #if 0 static void priv_r_unregister (int status, char const *phrase, nua_handle_t *nh) { DEBUG("un-REGISTER got response: %03d %s", status, phrase); if (status < 200) return; if (status == 401 || status == 407) { /* In SIP, de-registration can fail! However, there's not a lot we can * do about this in the Telepathy model - once you've gone DISCONNECTED * you're really not meant to go "oops, I'm still CONNECTED after all". * So we ignore it and hope it goes away. */ WARNING ("Registrar won't let me unregister: %d %s", status, phrase); } } #endif #ifdef ENABLE_DEBUG static void priv_r_get_params (int status, nua_t *nua, nua_handle_t *nh, tagi_t tags[]) { if (status < 200) return; if (nh != NULL) return; /* note: print contents of all tags to stdout */ tl_print(stdout, "Sofia-SIP NUA stack parameters:\n", tags); } #endif /** * Callback for events delivered by the SIP stack. * * See libsofia-sip-ua/nua/nua.h documentation. */ void rakia_base_connection_sofia_callback (nua_event_t event, int status, char const *phrase, nua_t *nua, RakiaBaseConnection *conn, nua_handle_t *nh, RakiaEventTarget *target, sip_t const *sip, tagi_t tags[]) { DEBUG("event %s: %03d %s", nua_event_name (event), status, phrase); switch (event) { #ifdef ENABLE_DEBUG case nua_r_get_params: priv_r_get_params (status, nua, nh, tags); return; #endif case nua_r_shutdown: priv_r_shutdown (status, nua); return; default: break; } g_assert (conn != NULL); DEBUG("connection %p, refcount %d", conn, ((GObject *)conn)->ref_count); { RakiaNuaEvent ev = { event, status, phrase, nua, nh, sip }; if (target == NULL) { target = (RakiaEventTarget *) conn; DEBUG("dispatching to connection %p (unbound handle %p)", conn, nh); } else { g_assert (nh != NULL); DEBUG("dispatching to target %p (handle %p)", target, nh); } if (!rakia_event_target_emit_nua_event (target, &ev, tags)) { DEBUG("event %s for target %p was not consumed", nua_event_name (event), target); } } DEBUG ("exit"); } telepathy-rakia-0.8.0/rakia/debug.c0000644000175000017500000001151012223047264014045 00000000000000/* * debug.h - Debug helpers for Telepathy-Rakia, implementation * Copyright (C) 2007-2008 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "debug.h" #include #include #include #include "config.h" static RakiaDebugFlags rakia_debug_flags = 0; static const GDebugKey rakia_debug_keys[] = { { "media", RAKIA_DEBUG_MEDIA }, { "connection", RAKIA_DEBUG_CONNECTION }, { "im", RAKIA_DEBUG_IM }, { "events", RAKIA_DEBUG_EVENTS }, { "sofia", RAKIA_DEBUG_SOFIA }, { "utilities", RAKIA_DEBUG_UTILITIES }, { "call", RAKIA_DEBUG_CALL }, }; static GHashTable *flag_to_domains = NULL; #ifdef ENABLE_DEBUG static GString *sofia_log_buf = NULL; #endif static void rakia_sofia_log_close (void); void rakia_debug_set_flags_from_env (void) { const gchar *flags_string; flags_string = g_getenv ("RAKIA_DEBUG"); if (flags_string == NULL) flags_string = g_getenv ("TPSIP_DEBUG"); if (flags_string != NULL) { tp_debug_set_flags (flags_string); rakia_debug_set_flags (g_parse_debug_string (flags_string, rakia_debug_keys, G_N_ELEMENTS(rakia_debug_keys))); } } void rakia_debug_set_flags (RakiaDebugFlags new_flags) { rakia_debug_flags |= new_flags; } gboolean rakia_debug_flag_is_set (RakiaDebugFlags flag) { return (flag & rakia_debug_flags) ? TRUE : FALSE; } static const gchar * debug_flag_to_domain (RakiaDebugFlags flag) { if (G_UNLIKELY (flag_to_domains == NULL)) { guint i; flag_to_domains = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); for (i = 0; i < G_N_ELEMENTS(rakia_debug_keys); i++) { GDebugKey key = (GDebugKey) rakia_debug_keys[i]; gchar *val; val = g_strdup_printf ("%s/%s", "rakia", key.key); g_hash_table_insert (flag_to_domains, GUINT_TO_POINTER (key.value), val); } } return g_hash_table_lookup (flag_to_domains, GUINT_TO_POINTER (flag)); } void rakia_debug_free (void) { rakia_sofia_log_close (); if (flag_to_domains == NULL) return; g_hash_table_unref (flag_to_domains); flag_to_domains = NULL; } void rakia_log (RakiaDebugFlags flag, GLogLevelFlags level, const gchar *format, ...) { TpDebugSender *dbg; gchar *message = NULL; gchar **message_out; va_list args; message_out = (level > G_LOG_LEVEL_DEBUG || (flag & rakia_debug_flags) != 0)? &message : NULL; dbg = tp_debug_sender_dup (); va_start (args, format); tp_debug_sender_add_message_vprintf (dbg, NULL, message_out, debug_flag_to_domain (flag), level, format, args); va_end (args); g_object_unref (dbg); if (message_out != NULL) { g_log (G_LOG_DOMAIN, level, "%s", message); g_free (message); } } void rakia_sofia_log_handler (void *logdata, const char *format, va_list args) { #ifdef ENABLE_DEBUG if (G_UNLIKELY (sofia_log_buf == NULL)) sofia_log_buf = g_string_sized_new ( g_printf_string_upper_bound (format, args)); /* Append the formatted message at the end of the buffer */ g_string_append_vprintf (sofia_log_buf, format, args); /* If we have a newline-terminated line, log it, stripping the newline */ if (sofia_log_buf->str[sofia_log_buf->len - 1] == '\n') { g_string_truncate (sofia_log_buf, sofia_log_buf->len - 1); rakia_log (RAKIA_DEBUG_SOFIA, G_LOG_LEVEL_DEBUG, "%s", sofia_log_buf->str); g_string_truncate (sofia_log_buf, 0); } #endif } static void rakia_sofia_log_close (void) { #ifdef ENABLE_DEBUG if (sofia_log_buf == NULL) return; if (sofia_log_buf->len != 0) { rakia_log (RAKIA_DEBUG_SOFIA, G_LOG_LEVEL_DEBUG, "%s", sofia_log_buf->str); rakia_log (RAKIA_DEBUG_SOFIA, G_LOG_LEVEL_DEBUG, "(the preceding message may have been deferred" " due to not being newline-terminated)"); } g_string_free (sofia_log_buf, TRUE); sofia_log_buf = NULL; #endif } telepathy-rakia-0.8.0/rakia/text-manager.h0000644000175000017500000000362312223047264015366 00000000000000/* * rakia/text-manager.h - Text channel manager for SIP * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007-2011 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_TEXT_MANAGER_H__ #define __RAKIA_TEXT_MANAGER_H__ #include G_BEGIN_DECLS typedef struct _RakiaTextManager RakiaTextManager; typedef struct _RakiaTextManagerClass RakiaTextManagerClass; struct _RakiaTextManagerClass { GObjectClass parent_class; }; struct _RakiaTextManager { GObject parent; }; GType rakia_text_manager_get_type(void); /* TYPE MACROS */ #define RAKIA_TYPE_TEXT_MANAGER \ (rakia_text_manager_get_type()) #define RAKIA_TEXT_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_TEXT_MANAGER, RakiaTextManager)) #define RAKIA_TEXT_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_TEXT_MANAGER, RakiaTextManagerClass)) #define RAKIA_IS_TEXT_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_TEXT_MANAGER)) #define RAKIA_IS_TEXT_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_TEXT_MANAGER)) #define RAKIA_TEXT_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_TEXT_MANAGER, RakiaTextManagerClass)) G_END_DECLS #endif telepathy-rakia-0.8.0/rakia/connection-aliasing.c0000644000175000017500000002534512223047264016716 00000000000000/* * connection-aliasing.c - Implementation for RakiaConnectionAliasing interface * Copyright (C) 2008-2011 Nokia Corporation * @author Mikhail Zabaluev * @author Pekka Pessi * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include #include #include #include "rakia/handles.h" #include #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" enum { PROP_NONE, PROP_ALIAS, }; static void rakia_connection_aliasing_base_init (gpointer klass) { static gboolean initialized = FALSE; if (!initialized) { initialized = TRUE; g_object_interface_install_property (klass, g_param_spec_string ("alias", "Alias", "User's display name", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } } GType rakia_connection_aliasing_get_type (void) { static GType type = 0; if (G_UNLIKELY (type == 0)) { static const GTypeInfo info = { sizeof (RakiaConnectionAliasingInterface), rakia_connection_aliasing_base_init, /* base_init */ NULL, /* base_finalize */ NULL, /* class_init */ NULL, /* class_finalize */ NULL, /* class_data */ 0, 0, /* n_preallocs */ NULL /* instance_init */ }; type = g_type_register_static (G_TYPE_INTERFACE, "RakiaConnectionAliasingInterface", &info, 0); g_type_interface_add_prerequisite (type, RAKIA_TYPE_BASE_CONNECTION); g_type_interface_add_prerequisite (type, TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING); } return type; } static void rakia_connection_get_alias_flags (TpSvcConnectionInterfaceAliasing *iface, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (iface); TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); /* No server-side aliasing yet */ tp_svc_connection_interface_aliasing_return_from_get_alias_flags ( context, 0); } static gchar * conn_get_default_alias (TpBaseConnection *base, TpHandleRepoIface *contact_handles, TpHandle handle) { const url_t *url; gchar *alias = NULL; url = rakia_base_connection_handle_to_uri (RAKIA_BASE_CONNECTION (base), handle); switch (url->url_type) { case url_sip: /* Return the SIP URI stripped down to [user@]host */ if (url->url_user != NULL) alias = g_strdup_printf ("%s@%s", url->url_user, url->url_host); else alias = g_strdup (url->url_host); break; case url_tel: /* Retrieve the telephone number */ alias = g_strdup (url->url_host); break; default: /* Return the handle string as is */ alias = g_strdup (tp_handle_inspect (contact_handles, handle)); } return alias; } static gchar * conn_get_alias (TpBaseConnection *base, TpHandleRepoIface *contact_handles, TpHandle handle) { gchar *alias = NULL; if (handle == base->self_handle) { /* Get our user-settable alias from the connection property */ g_object_get (base, "alias", &alias, NULL); } if (alias == NULL) alias = conn_get_default_alias (base, contact_handles, handle); g_assert (alias != NULL); DEBUG("handle %u got alias %s", handle, alias); return alias; } static void rakia_connection_request_aliases (TpSvcConnectionInterfaceAliasing *iface, const GArray *contacts, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (iface); TpHandleRepoIface *contact_handles; GArray *aliases; gchar **res; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); contact_handles = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); if (!tp_handles_are_valid (contact_handles, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } aliases = g_array_sized_new (TRUE, FALSE, sizeof (gchar *), contacts->len); for (i = 0; i < contacts->len; i++) { TpHandle handle; gchar *alias; handle = g_array_index (contacts, TpHandle, i); alias = conn_get_alias (base, contact_handles, handle); g_array_append_val (aliases, alias); } res = (gchar **) g_array_free (aliases, FALSE); tp_svc_connection_interface_aliasing_return_from_request_aliases ( context, (const gchar **) res); g_strfreev (res); } static void rakia_connection_get_aliases (TpSvcConnectionInterfaceAliasing *iface, const GArray *contacts, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (iface); TpHandleRepoIface *contact_handles; GHashTable *result; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); contact_handles = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); if (!tp_handles_are_valid (contact_handles, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); for (i = 0; i < contacts->len; i++) { TpHandle handle; gchar *alias; handle = g_array_index (contacts, TpHandle, i); alias = conn_get_alias (base, contact_handles, handle); g_hash_table_insert (result, GUINT_TO_POINTER (handle), alias); } tp_svc_connection_interface_aliasing_return_from_get_aliases (context, result); g_hash_table_unref (result); } static void emit_self_alias_change (TpBaseConnection *base, const gchar *alias) { GPtrArray *change_data; GValue change_pair = { 0, }; g_value_init (&change_pair, TP_STRUCT_TYPE_ALIAS_PAIR); g_value_take_boxed (&change_pair, dbus_g_type_specialized_construct (TP_STRUCT_TYPE_ALIAS_PAIR)); dbus_g_type_struct_set (&change_pair, 0, base->self_handle, 1, alias, G_MAXUINT); change_data = g_ptr_array_sized_new (1); g_ptr_array_add (change_data, g_value_get_boxed (&change_pair)); tp_svc_connection_interface_aliasing_emit_aliases_changed (base, change_data); g_ptr_array_unref (change_data); g_value_unset (&change_pair); } static const gchar * collapse_whitespace (const gchar *str, gchar **to_free) { static GRegex *whitespace_regex = NULL; const gchar *p; gchar *subst_res; p = (const gchar *) strpbrk (str, " \t\r\n"); if (p == NULL) return str; if (whitespace_regex == NULL) { whitespace_regex = g_regex_new ("[[:space:]]+", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); } subst_res = g_regex_replace_literal (whitespace_regex, str, -1, p - str, " ", 0, NULL); *to_free = subst_res; return subst_res; } static void rakia_connection_set_aliases (TpSvcConnectionInterfaceAliasing *iface, GHashTable *aliases, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (iface); TpHandleRepoIface *contact_handles; const gchar *alias; gchar *default_alias; gchar *to_free = NULL; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); /* We only care about the self alias */ alias = g_hash_table_lookup (aliases, GINT_TO_POINTER (base->self_handle)); if (alias == NULL || g_hash_table_size (aliases) > 1) { /* One of the handles (if there are any) cannot be the self handle */ GError err = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Cannot set aliases for any contact except self" }; dbus_g_method_return_error (context, &err); return; } alias = collapse_whitespace (alias, &to_free); contact_handles = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); default_alias = conn_get_default_alias (base, contact_handles, base->self_handle); if (strcmp (alias, default_alias) == 0) { DEBUG("using default alias for self"); g_object_set (base, "alias", NULL, NULL); } else { DEBUG("setting alias for self: %s", alias); g_object_set (base, "alias", alias, NULL); } emit_self_alias_change (base, alias); g_free (default_alias); g_free (to_free); tp_svc_connection_interface_aliasing_return_from_set_aliases (context); } static void rakia_conn_aliasing_fill_contact_attributes (GObject *obj, const GArray *contacts, GHashTable *attributes_hash) { TpBaseConnection *base = TP_BASE_CONNECTION (obj); TpHandleRepoIface *contact_handles; guint i; contact_handles = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); for (i = 0; i < contacts->len; i++) { TpHandle handle; GValue *val; handle = g_array_index (contacts, TpHandle, i); val = tp_g_value_slice_new (G_TYPE_STRING); g_value_take_string (val, conn_get_alias (base, contact_handles, handle)); tp_contacts_mixin_set_contact_attribute (attributes_hash, handle, TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias", val); } } void rakia_connection_aliasing_init (gpointer instance) { tp_contacts_mixin_add_contact_attributes_iface (G_OBJECT (instance), TP_IFACE_CONNECTION_INTERFACE_ALIASING, rakia_conn_aliasing_fill_contact_attributes); } void rakia_connection_aliasing_svc_iface_init (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceAliasingClass *klass = (TpSvcConnectionInterfaceAliasingClass *) g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_aliasing_implement_##x (\ klass, rakia_connection_##x) IMPLEMENT(get_alias_flags); IMPLEMENT(request_aliases); IMPLEMENT(get_aliases); IMPLEMENT(set_aliases); #undef IMPLEMENT } telepathy-rakia-0.8.0/rakia/signals-marshal.list0000644000175000017500000000004712223047264016600 00000000000000BOOLEAN:POINTER,POINTER VOID:UINT,UINT telepathy-rakia-0.8.0/rakia/sip-session.c0000644000175000017500000014630412223047264015245 00000000000000/* * rakia-sip-session.c - Source for RakiaSipSession * Copyright (C) 2005-2012 Collabora Ltd. * @author Olivier Crete * Copyright (C) 2005-2010 Nokia Corporation * @author Kai Vehmanen * @author Mikhail Zabaluev * * Based on telepathy-gabble implementation * @author Ole Andre Vadla Ravnaas * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/sip-session.h" #include #include #define DEBUG_FLAG RAKIA_DEBUG_MEDIA #include "rakia/debug.h" #include "rakia/base-connection.h" #include "rakia/event-target.h" #include "rakia/sip-media.h" /* The timeout for outstanding re-INVITE transactions in seconds. * Chosen to match the allowed cancellation timeout for proxies * described in RFC 3261 Section 13.3.1.1 */ #define RAKIA_REINVITE_TIMEOUT 180 static void event_target_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE(RakiaSipSession, rakia_sip_session, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (RAKIA_TYPE_EVENT_TARGET, event_target_init) ) #ifdef ENABLE_DEBUG /** * Sip session states: * - created, objects created, local cand/codec query ongoing * - invite-sent, an INVITE with local SDP sent, awaiting response * - invite-received, a remote INVITE received, response is pending * - response-received, a 200 OK received, codec intersection is in progress * - active, codecs and candidate pairs have been negotiated (note, * SteamEngine might still fail to verify connectivity and report * an error) * - reinvite-sent, a local re-INVITE sent, response is pending * - reinvite-received, a remote re-INVITE received, response is pending * - ended, session has ended */ static const char *const session_states[NUM_RAKIA_SIP_SESSION_STATES] = { "created", "invite-sent", "invite-received", "response-received", "active", "reinvite-sent", "reinvite-received", "reinvite-pending", "ended" }; #define SESSION_DEBUG(session, format, ...) \ rakia_log (DEBUG_FLAG, G_LOG_LEVEL_DEBUG, "%s [%-17s]: " format, \ G_STRFUNC, session_states[(session)->priv->state],##__VA_ARGS__) #define SESSION_MESSAGE(session, format, ...) \ rakia_log (DEBUG_FLAG, G_LOG_LEVEL_MESSAGE, "%s [%-17s]: " format, \ G_STRFUNC, session_states[(session)->priv->state],##__VA_ARGS__) #else /* !ENABLE_DEBUG */ #define SESSION_DEBUG(session, format, ...) G_STMT_START { } G_STMT_END #define SESSION_MESSAGE(session, format, ...) G_STMT_START { } G_STMT_END #endif /* ENABLE_DEBUG */ /* properties */ enum { PROP_REMOTE_PTIME = 1, PROP_REMOTE_MAX_PTIME, PROP_RTCP_ENABLED, PROP_HOLD_STATE, PROP_REMOTE_HELD, LAST_PROPERTY }; /* signals */ enum { SIG_ENDED, SIG_RINGING, SIG_QUEUED, SIG_IN_PROGRESS, SIG_INCOMING_CALL, SIG_MEDIA_ADDED, SIG_MEDIA_REMOVED, SIG_STATE_CHANGED, SIG_START_RECEIVING, NUM_SIGNALS }; static guint signals[NUM_SIGNALS] = { 0 }; /* private structure */ struct _RakiaSipSessionPrivate { nua_handle_t *nua_op; /* see gobj. prop. 'nua-handle' */ RakiaSipSessionState state; /* session state */ gboolean immutable_streams; /* immutable streams */ GPtrArray *medias; gboolean incoming; /* Is this an incoming call ? (or outgoing */ RakiaBaseConnection *conn; nua_saved_event_t saved_event[1]; /* Saved incoming request event */ TpLocalHoldState hold_state; /* local hold state aggregated from stream directions */ gboolean hold_requested; /* if the local hold has been requested by the user */ gchar *remote_ptime; /* see gobj. prop. 'remote-ptime' */ gchar *remote_max_ptime; /* see gobj. prop. 'remote-max-ptime' */ guint remote_media_count; /* number of m= last seen in a remote offer */ gboolean rtcp_enabled; /* see gobj. prop. 'rtcp-enabled' */ gchar *local_sdp; /* local session as SDP string */ su_home_t *home; /* Sofia memory home for remote SDP session structure */ su_home_t *backup_home; /* Sofia memory home for previous generation remote SDP session*/ sdp_session_t *remote_sdp; /* last received remote session */ sdp_session_t *backup_remote_sdp; /* previous remote session */ gboolean accepted; /*< session has been locally accepted for use */ gboolean pending_offer; /*< local media have been changed, but a re-INVITE is pending */ guint glare_timer_id; gboolean remote_held; }; #define RAKIA_SIP_SESSION_GET_PRIVATE(session) ((session)->priv) static void rakia_sip_session_dispose (GObject *object); static void rakia_sip_session_finalize (GObject *object); static TpMediaStreamType rakia_media_type (sdp_media_e sip_mtype); static void priv_session_invite (RakiaSipSession *session, gboolean reinvite); static gboolean priv_update_remote_media (RakiaSipSession *self, gboolean authoritative); static void priv_request_response_step (RakiaSipSession *session); static void event_target_init(gpointer g_iface, gpointer iface_data) { } static void null_safe_unref (gpointer data) { if (data) g_object_unref (data); } static void rakia_sip_session_init (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_SIP_SESSION, RakiaSipSessionPrivate); self->priv = priv; priv->state = RAKIA_SIP_SESSION_STATE_CREATED; priv->rtcp_enabled = TRUE; /* allocate any data required by the object here */ priv->medias = g_ptr_array_new_with_free_func (null_safe_unref); } static void rakia_sip_session_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaSipSession *session = RAKIA_SIP_SESSION (object); RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); switch (property_id) { case PROP_REMOTE_PTIME: g_value_set_string (value, priv->remote_ptime); break; case PROP_REMOTE_MAX_PTIME: g_value_set_string (value, priv->remote_max_ptime); break; case PROP_RTCP_ENABLED: g_value_set_boolean (value, priv->rtcp_enabled); break; case PROP_HOLD_STATE: g_value_set_uint (value, priv->hold_state); break; case PROP_REMOTE_HELD: g_value_set_boolean (value, priv->remote_held); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_sip_session_class_init (RakiaSipSessionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (RakiaSipSessionPrivate)); object_class->get_property = rakia_sip_session_get_property; object_class->dispose = rakia_sip_session_dispose; object_class->finalize = rakia_sip_session_finalize; param_spec = g_param_spec_string ("remote-ptime", "a=ptime value of remote media session", "Value of the a=ptime attribute of the remote media session, or NULL", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REMOTE_PTIME, param_spec); param_spec = g_param_spec_string ("remote-max-ptime", "a=maxptime value of remote media session", "Value of the a=maxptime attribute of the remote media session, or NULL", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REMOTE_MAX_PTIME, param_spec); param_spec = g_param_spec_boolean ("rtcp-enabled", "RTCP enabled", "Is RTCP enabled session-wide", TRUE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_RTCP_ENABLED, param_spec); param_spec = g_param_spec_uint ("hold-state", "Local Hold State", "Is the call held or not", 0, NUM_TP_LOCAL_HOLD_STATES - 1, TP_LOCAL_HOLD_STATE_UNHELD, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_HOLD_STATE, param_spec); param_spec = g_param_spec_boolean ("remote-held", "Remote Held", "Are we remotely held", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REMOTE_HELD, param_spec); signals[SIG_ENDED] = g_signal_new ("ended", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 3, G_TYPE_BOOLEAN, G_TYPE_UINT, G_TYPE_STRING); signals[SIG_RINGING] = g_signal_new ("ringing", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0); signals[SIG_QUEUED] = g_signal_new ("queued", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0); signals[SIG_IN_PROGRESS] = g_signal_new ("in-progress", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0); signals[SIG_INCOMING_CALL] = g_signal_new ("incoming-call", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0); signals[SIG_MEDIA_ADDED] = g_signal_new ("media-added", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, RAKIA_TYPE_SIP_MEDIA); signals[SIG_MEDIA_REMOVED] = g_signal_new ("media-removed", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, RAKIA_TYPE_SIP_MEDIA); signals[SIG_STATE_CHANGED] = g_signal_new ("state-changed", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); signals[SIG_START_RECEIVING] = g_signal_new ("start-receiving", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0); } static void rakia_sip_session_dispose (GObject *object) { RakiaSipSession *self = RAKIA_SIP_SESSION (object); SESSION_DEBUG (self, "enter"); if (self->priv->medias) { g_ptr_array_unref (self->priv->medias); self->priv->medias = NULL; } if (self->priv->glare_timer_id) { g_source_remove (self->priv->glare_timer_id); self->priv->glare_timer_id = 0; } tp_clear_object (&self->priv->conn); if (self->priv->remote_sdp != NULL) { self->priv->remote_sdp = NULL; g_assert (self->priv->home != NULL); su_home_unref (self->priv->home); self->priv->home = NULL; } if (self->priv->backup_remote_sdp != NULL) { self->priv->backup_remote_sdp = NULL; g_assert (self->priv->backup_home != NULL); su_home_unref (self->priv->backup_home); self->priv->backup_home = NULL; } if (G_OBJECT_CLASS (rakia_sip_session_parent_class)->dispose) G_OBJECT_CLASS (rakia_sip_session_parent_class)->dispose (object); SESSION_DEBUG (self, "exit"); } static void rakia_sip_session_finalize (GObject *object) { RakiaSipSession *self = RAKIA_SIP_SESSION (object); RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); g_assert (priv->nua_op == NULL); g_free (priv->local_sdp); G_OBJECT_CLASS (rakia_sip_session_parent_class)->finalize (object); DEBUG("exit"); } void rakia_sip_session_change_state (RakiaSipSession *self, RakiaSipSessionState new_state) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); guint old_state; if (priv->state == new_state) return; SESSION_DEBUG (self, "changing state to %s", session_states[new_state]); old_state = priv->state; priv->state = new_state; switch (new_state) { case RAKIA_SIP_SESSION_STATE_CREATED: case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: case RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED: case RAKIA_SIP_SESSION_STATE_INVITE_SENT: case RAKIA_SIP_SESSION_STATE_REINVITE_SENT: case RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED: case RAKIA_SIP_SESSION_STATE_REINVITE_PENDING: case RAKIA_SIP_SESSION_STATE_ACTIVE: break; case RAKIA_SIP_SESSION_STATE_ENDED: SESSION_DEBUG (self, "destroying the NUA handle %p", priv->nua_op); if (priv->nua_op != NULL) { nua_handle_destroy (priv->nua_op); priv->nua_op = NULL; } break; case NUM_RAKIA_SIP_SESSION_STATES: g_assert_not_reached(); /* Don't add default because we want to be warned by the compiler * about unhandled states */ } g_signal_emit (self, signals[SIG_STATE_CHANGED], 0, old_state, new_state); if (new_state == RAKIA_SIP_SESSION_STATE_ACTIVE && priv->pending_offer) priv_session_invite (self, TRUE); } static void priv_zap_event (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); if (priv->saved_event[0]) { nua_event_data_t const *ev_data = nua_event_data (priv->saved_event); g_assert (ev_data != NULL); WARNING ("zapping unhandled saved event '%s'", nua_event_name (ev_data->e_event)); nua_destroy_event (priv->saved_event); } } static void priv_save_event (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); priv_zap_event (self); rakia_base_connection_save_event (priv->conn, priv->saved_event); #ifdef ENABLE_DEBUG { nua_event_data_t const *ev_data = nua_event_data (priv->saved_event); g_assert (ev_data != NULL); DEBUG("saved the last event: %s %hd %s", nua_event_name (ev_data->e_event), ev_data->e_status, ev_data->e_phrase); } #endif } static void rakia_sip_session_receive_reinvite (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); /* Check for permitted state transitions */ switch (priv->state) { case RAKIA_SIP_SESSION_STATE_ACTIVE: case RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED: break; case RAKIA_SIP_SESSION_STATE_REINVITE_PENDING: g_source_remove (priv->glare_timer_id); break; default: g_return_if_reached (); } priv_save_event (self); rakia_sip_session_change_state (self, RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED); } static gboolean priv_nua_i_invite_cb (RakiaSipSession *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo) { /* nua_i_invite delivered for a bound handle means a re-INVITE */ rakia_sip_session_receive_reinvite (self); return TRUE; } static gboolean priv_nua_i_bye_cb (RakiaSipSession *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo) { g_signal_emit (self, signals[SIG_ENDED], 0, FALSE, 0, ""); return TRUE; } static gboolean priv_nua_i_cancel_cb (RakiaSipSession *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo) { const sip_reason_t *reason; guint cause = 0; const gchar *message = NULL; gboolean self_actor = FALSE; /* FIXME: implement cancellation of an incoming re-INVITE, if ever * found in real usage and not caused by a request timeout */ if (ev->sip != NULL) for (reason = ev->sip->sip_reason; reason != NULL; reason = reason->re_next) { const char *protocol = reason->re_protocol; if (protocol == NULL || strcmp (protocol, "SIP") != 0) continue; if (reason->re_cause != NULL) { cause = (guint) g_ascii_strtoull (reason->re_cause, NULL, 10); message = reason->re_text; break; } } switch (cause) { case 200: case 603: /* The user must have acted on another branch of the forked call */ self_actor = TRUE; break; default: self_actor = FALSE; } if (message == NULL || !g_utf8_validate (message, -1, NULL)) message = ""; g_signal_emit (self, signals[SIG_ENDED], 0, self_actor, cause, message); return TRUE; } void rakia_sip_session_ringing (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); g_return_if_fail (priv->state == RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED); nua_respond (priv->nua_op, SIP_180_RINGING, TAG_END()); } void rakia_sip_session_queued (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); g_return_if_fail (priv->state == RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED); nua_respond (priv->nua_op, SIP_182_QUEUED, TAG_END()); } static void rakia_sip_session_receive_invite (RakiaSipSession *self) { g_return_if_fail (self->priv->nua_op != NULL); /* We'll do Ringing later instead */ /* nua_respond (priv->nua_op, SIP_183_SESSION_PROGRESS, TAG_END()); */ rakia_sip_session_change_state (self, RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED); } /* * Handles an incoming call, called shortly after the channel * has been created with initiator handle of the sender, when remote SDP * session data are reported by the NUA stack. */ static void rakia_sip_session_handle_incoming_call (RakiaSipSession *self, nua_handle_t *nh, const sdp_session_t *sdp) { g_assert (self->priv->incoming); rakia_sip_session_receive_invite (self); /* Tell the factory to emit NewChannel(s) */ g_signal_emit (self, signals[SIG_INCOMING_CALL], 0); } static void rakia_sip_session_peer_error (RakiaSipSession *self, guint status, const char* message) { if (message == NULL || !g_utf8_validate (message, -1, NULL)) message = ""; g_signal_emit (self, signals[SIG_ENDED], 0, FALSE, status, message); } /* Checks if RTCP is not disabled with bandwidth modifiers * as described in RFC 3556 */ gboolean rakia_sdp_rtcp_bandwidth_throttled (const sdp_bandwidth_t *b) { const sdp_bandwidth_t *b_RS = NULL; const sdp_bandwidth_t *b_RR = NULL; while (b != NULL) { if (b->b_modifier_name != NULL) { if (strcmp (b->b_modifier_name, "RS") == 0) b_RS = b; else if (strcmp (b->b_modifier_name, "RR") == 0) b_RR = b; } b = b->b_next; } return (b_RS != NULL && b_RS->b_value == 0 && b_RR != NULL && b_RR->b_value == 0); } static gboolean rakia_sip_session_supports_media_type (TpMediaStreamType media_type) { switch (media_type) { case TP_MEDIA_STREAM_TYPE_AUDIO: case TP_MEDIA_STREAM_TYPE_VIDEO: return TRUE; default: return FALSE; } } static void priv_session_rollback (RakiaSipSession *session) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); DEBUG("enter"); if (priv->remote_sdp != NULL) { priv->remote_sdp = NULL; g_assert (priv->home != NULL); su_home_unref (priv->home); priv->home = NULL; } if (priv->backup_remote_sdp == NULL) { rakia_sip_session_terminate (session, 0, NULL); return; } /* restore remote SDP from the backup */ priv->remote_sdp = priv->backup_remote_sdp; g_assert (priv->backup_home != NULL); priv->home = priv->backup_home; priv->backup_remote_sdp = NULL; priv->backup_home = NULL; priv_update_remote_media (session, FALSE); if (priv->saved_event[0]) { nua_respond (priv->nua_op, SIP_488_NOT_ACCEPTABLE, NUTAG_WITH(nua_saved_event_request (priv->saved_event)), TAG_END()); nua_destroy_event (priv->saved_event); } else { nua_respond (priv->nua_op, SIP_488_NOT_ACCEPTABLE, TAG_END()); } rakia_sip_session_change_state (session, RAKIA_SIP_SESSION_STATE_ACTIVE); } static void priv_media_local_negotiation_complete_cb (RakiaSipMedia *media, gboolean success, RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); SESSION_DEBUG (self, "negotiation complete %d", success); if (!success) { /* This remote media description got no codec intersection. */ switch (priv->state) { case RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED: case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: SESSION_DEBUG (self, "no codec intersection, closing the stream"); rakia_sip_session_remove_media (self, media, 488, "No codec intersection"); break; case RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED: /* In this case, we have the stream negotiated already, * and we don't want to close it just because the remote party * offers a different set of codecs. * Roll back the whole session to the previously negotiated state. */ priv_session_rollback (self); return; case RAKIA_SIP_SESSION_STATE_ACTIVE: /* We've most likely rolled back from * RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED, * but we may receive more than one empty codec intersection * in the session, so we ignore the rest */ return; default: g_assert_not_reached(); } } priv_request_response_step (self); } static gboolean priv_has_all_media_ready (RakiaSipSession *self) { guint i; for (i = 0; i < self->priv->medias->len; i++) { RakiaSipMedia *media = g_ptr_array_index (self->priv->medias, i);;;; if (media == NULL) continue; if (!rakia_sip_media_is_ready (media)) return FALSE; } return TRUE; } void rakia_sip_session_media_changed (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); SESSION_DEBUG (self, "media changed"); switch (priv->state) { case RAKIA_SIP_SESSION_STATE_CREATED: /* If all medias are ready, send an offer now */ priv_request_response_step (self); break; case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: case RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED: /* The changes to existing medias will be included in the * eventual answer (FIXME: implement postponed direction changes, * which are applied after the remote offer has been processed). * Check, however, if there are new medias not present in the * remote offer, that will need another offer-answer round */ if (priv->remote_media_count < priv->medias->len) priv->pending_offer = TRUE; break; case RAKIA_SIP_SESSION_STATE_INVITE_SENT: case RAKIA_SIP_SESSION_STATE_REINVITE_SENT: case RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED: /* Cannot send another offer right now */ priv->pending_offer = TRUE; break; case RAKIA_SIP_SESSION_STATE_ACTIVE: /* Check if we are allowed to send re-INVITES */ if (priv->immutable_streams) { SESSION_MESSAGE (self, "sending of a local media update disabled" " by parameter 'immutable-streams'"); break; } /* Fall through to the next case */ case RAKIA_SIP_SESSION_STATE_REINVITE_PENDING: if (priv_has_all_media_ready (self)) priv_session_invite (self, TRUE); else priv->pending_offer = TRUE; break; case RAKIA_SIP_SESSION_STATE_ENDED: /* We've already ended the call, ignore any change request */ break; default: g_assert_not_reached(); } } static RakiaSipMedia * rakia_sip_session_add_media_internal (RakiaSipSession *self, TpMediaStreamType media_type, const gchar *name, RakiaDirection direction, const sdp_media_t *sdp_media, gboolean authoritative, gint slot) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); RakiaSipMedia *media = NULL; gboolean created_locally = (sdp_media == NULL); SESSION_DEBUG (self, "enter"); if ((!sdp_media || !sdp_media->m_rejected) && rakia_sip_session_supports_media_type (media_type)) { media = rakia_sip_media_new (self, media_type, name, direction, created_locally, priv->hold_requested); g_signal_connect_object (media, "local-negotiation-complete", G_CALLBACK (priv_media_local_negotiation_complete_cb), self, 0); g_signal_connect_object (media, "local-updated", G_CALLBACK (rakia_sip_session_media_changed), self, G_CONNECT_SWAPPED); if (sdp_media == NULL || rakia_sip_media_set_remote_media (media, sdp_media, authoritative)) { g_signal_emit (self, signals[SIG_MEDIA_ADDED], 0, media); } else { rakia_sip_session_remove_media (self, media, 488, "Can not process this SDP"); media = NULL; } } /* note: we add an entry even for unsupported media types */ if (slot >= 0) { if ((guint) slot < priv->medias->len) { g_assert (g_ptr_array_index (priv->medias, slot) == NULL); g_ptr_array_index (priv->medias, slot) = media; } else { g_assert ((guint) slot == priv->medias->len); g_ptr_array_add (priv->medias, media); } } else { g_ptr_array_add (priv->medias, media); } SESSION_DEBUG (self, "exit"); return media; } RakiaSipMedia * rakia_sip_session_add_media (RakiaSipSession *self, TpMediaStreamType media_type, const gchar *name, RakiaDirection direction) { return rakia_sip_session_add_media_internal (self, media_type, name, direction, NULL, TRUE, -1); } static void priv_update_remote_hold (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); RakiaSipMedia *media; gboolean has_medias = FALSE; gboolean remote_held = TRUE; guint i; /* The call is remotely unheld if there's at least one sending media */ for (i = 0; i < priv->medias->len; i++) { media = g_ptr_array_index(priv->medias, i); if (media != NULL) { if (rakia_sip_media_get_direction (media) & RAKIA_DIRECTION_SEND || !(rakia_sip_media_get_requested_direction (media) & RAKIA_DIRECTION_SEND)) remote_held = FALSE; has_medias = TRUE; } } if (!has_medias) return; SESSION_DEBUG (self, "is remotely %s", remote_held? "held" : "unheld"); priv->remote_held = remote_held; g_object_notify (G_OBJECT (self), "remote-held"); } static gboolean priv_update_remote_media (RakiaSipSession *self, gboolean authoritative) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); const sdp_session_t *sdp = priv->remote_sdp; const sdp_media_t *sdp_media; gboolean has_supported_media = FALSE; guint i; g_return_val_if_fail (sdp != NULL, FALSE); /* Update the session-wide parameters * before updating medias */ priv->remote_ptime = rakia_sdp_get_string_attribute ( sdp->sdp_attributes, "ptime"); priv->remote_max_ptime = rakia_sdp_get_string_attribute ( sdp->sdp_attributes, "maxptime"); priv->rtcp_enabled = !rakia_sdp_rtcp_bandwidth_throttled ( sdp->sdp_bandwidths); sdp_media = sdp->sdp_media; /* note: for each session, we maintain an ordered list of * medias (SDP m-lines) which are matched 1:1 to * the medias of the remote SDP */ for (i = 0; sdp_media != NULL; sdp_media = sdp_media->m_next, i++) { RakiaSipMedia *media = NULL; TpMediaStreamType media_type; media_type = rakia_media_type (sdp_media->m_type); if (i < priv->medias->len) media = g_ptr_array_index(priv->medias, i); /* Check if the media type has changed, if it has * just replace the media with the new one. */ if (media != NULL && rakia_sip_media_get_media_type (media) != media_type) { g_object_ref (media); g_ptr_array_index (self->priv->medias, i) = NULL; g_signal_emit (self, signals[SIG_MEDIA_REMOVED], 0, media); g_object_unref (media); media = NULL; } /* Add the new media if it hasn't been rejected */ if (media == NULL && !sdp_media->m_rejected) { media = rakia_sip_session_add_media_internal ( self, media_type, NULL, /* Don't start sending unless requested by the user */ rakia_direction_from_remote_media (sdp_media) & RAKIA_DIRECTION_RECEIVE, sdp_media, authoritative, i); if (media != NULL) has_supported_media = TRUE; continue; } /* note: it is ok for the media to be NULL (unsupported media type) */ if (media == NULL) continue; SESSION_DEBUG (self, "setting remote SDP for media %u", i); /* Remove rejected medias */ if (sdp_media->m_rejected) { SESSION_DEBUG (self, "the media has been rejected, closing"); rakia_sip_session_remove_media (self, media, 488, "Can not process this media type"); continue; } if (!rakia_sip_media_set_remote_media (media, sdp_media, authoritative)) { rakia_sip_session_remove_media (self, media, 488, "Can not process this media type"); continue; } has_supported_media = TRUE; } g_assert(sdp_media == NULL); g_assert(i <= priv->medias->len); g_assert(!authoritative || i == priv->remote_media_count); if (i < priv->medias->len && !priv->pending_offer) { /* * It's not defined what we should do if there are previously offered * medias not accounted in the remote SDP, in violation of RFC 3264. * Closing them off serves resource preservation and gives better * clue to the client as to the real state of the session. * Note that this situation is masked if any local media updates * have been requested and are pending until the present remote session * answer is received and applied. In such a case, we'll issue a new offer * at the closest available time, with the "overhanging" media entries * intact. */ do { RakiaSipMedia *media; media = g_ptr_array_index(priv->medias, i); if (media != NULL) { SESSION_MESSAGE (self, "removing a mismatched media %u", i); rakia_sip_session_remove_media (self, media, 488, "Media type mismatch"); } } while (++i < priv->medias->len); } if (has_supported_media) priv_update_remote_hold (self); DEBUG("exit"); return has_supported_media; } static GString * priv_session_generate_sdp (RakiaSipSession *session, gboolean authoritative) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); GString *user_sdp; guint len; guint i; g_return_val_if_fail (priv_has_all_media_ready (session), NULL); user_sdp = g_string_new ("v=0\r\n"); len = priv->medias->len; if (!authoritative && len > priv->remote_media_count) { len = priv->remote_media_count; SESSION_DEBUG (session, "clamped response to %u medias seen in the offer", len); } for (i = 0; i < len; i++) { RakiaSipMedia *media = g_ptr_array_index (priv->medias, i); if (media) rakia_sip_media_generate_sdp (media, user_sdp, authoritative); else g_string_append (user_sdp, "m=audio 0 RTP/AVP 0\r\n"); } return user_sdp; } static void priv_session_invite (RakiaSipSession *session, gboolean reinvite) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); GString *user_sdp; DEBUG("enter"); g_return_if_fail (priv->nua_op != NULL); user_sdp = priv_session_generate_sdp (session, TRUE); g_return_if_fail (user_sdp != NULL); if (!reinvite || priv->state == RAKIA_SIP_SESSION_STATE_REINVITE_PENDING || tp_strdiff (priv->local_sdp, user_sdp->str)) { g_free (priv->local_sdp); priv->local_sdp = g_string_free (user_sdp, FALSE); /* We need to be prepared to receive media right after the * offer is sent, so we must set the streams to playing */ g_signal_emit (session, signals[SIG_START_RECEIVING], 0); nua_invite (priv->nua_op, SOATAG_USER_SDP_STR(priv->local_sdp), SOATAG_RTP_SORT(SOA_RTP_SORT_REMOTE), SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL), SOATAG_ORDERED_USER(1), NUTAG_AUTOANSWER(0), TAG_IF(reinvite, NUTAG_INVITE_TIMER (RAKIA_REINVITE_TIMEOUT)), TAG_END()); priv->pending_offer = FALSE; rakia_sip_session_change_state ( session, reinvite? RAKIA_SIP_SESSION_STATE_REINVITE_SENT : RAKIA_SIP_SESSION_STATE_INVITE_SENT); } else { SESSION_DEBUG (session, "SDP unchanged, not sending a re-INVITE"); g_string_free (user_sdp, TRUE); } } static void priv_session_respond (RakiaSipSession *session) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); msg_t *msg; g_return_if_fail (priv->nua_op != NULL); { GString *user_sdp = priv_session_generate_sdp (session, FALSE); g_free (priv->local_sdp); priv->local_sdp = g_string_free (user_sdp, FALSE); } /* We need to be prepared to receive media right after the * answer is sent, so we must set the streams to playing */ g_signal_emit (session, signals[SIG_START_RECEIVING], 0); msg = (priv->saved_event[0]) ? nua_saved_event_request (priv->saved_event) : NULL; nua_respond (priv->nua_op, SIP_200_OK, TAG_IF(msg, NUTAG_WITH(msg)), SOATAG_USER_SDP_STR(priv->local_sdp), SOATAG_RTP_SORT(SOA_RTP_SORT_REMOTE), SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL), NUTAG_AUTOANSWER(0), TAG_END()); if (priv->saved_event[0]) nua_destroy_event (priv->saved_event); rakia_sip_session_change_state (session, RAKIA_SIP_SESSION_STATE_ACTIVE); } static gboolean priv_is_codec_intersect_pending (RakiaSipSession *session) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); guint i; for (i = 0; i < priv->medias->len; i++) { RakiaSipMedia *media = g_ptr_array_index (priv->medias, i); if (media != NULL && rakia_sip_media_is_codec_intersect_pending (media)) return TRUE; } return FALSE; } /** * Sends requests and responses with an outbound offer/answer * if all streams of the session are prepared. * * Following inputs are considered in decision making: * - state of the session (is remote INVITE being handled) * - status of local streams (set up with stream-engine) * - whether session is locally accepted */ static void priv_request_response_step (RakiaSipSession *session) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); if (!priv_has_all_media_ready (session)) { SESSION_DEBUG (session, "there are local streams not ready, postponed"); return; } switch (priv->state) { case RAKIA_SIP_SESSION_STATE_CREATED: priv_session_invite (session, FALSE); break; case RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED: if (priv->accepted && !priv_is_codec_intersect_pending (session)) rakia_sip_session_change_state (session, RAKIA_SIP_SESSION_STATE_ACTIVE); break; case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: /* TODO: if the call has not yet been accepted locally * and the remote endpoint supports 100rel, send them * an early session answer in a reliable 183 response */ if (priv->accepted && !priv_is_codec_intersect_pending (session)) priv_session_respond (session); break; case RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED: if (!priv_is_codec_intersect_pending (session)) priv_session_respond (session); break; case RAKIA_SIP_SESSION_STATE_ACTIVE: case RAKIA_SIP_SESSION_STATE_REINVITE_PENDING: if (priv->pending_offer) priv_session_invite (session, TRUE); break; default: SESSION_DEBUG (session, "no action taken in the current state"); } } static gboolean rakia_sip_session_set_remote_media (RakiaSipSession *self, const sdp_session_t* sdp) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); gboolean authoritative; SESSION_DEBUG (self, "enter"); if (priv->state == RAKIA_SIP_SESSION_STATE_INVITE_SENT || priv->state == RAKIA_SIP_SESSION_STATE_REINVITE_SENT) { rakia_sip_session_change_state ( self, RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED); } else { /* Remember the m= line count in the remote offer, * to match it with exactly this number of answer lines */ sdp_media_t *media; guint count = 0; for (media = sdp->sdp_media; media != NULL; media = media->m_next) ++count; priv->remote_media_count = count; } /* Shortcut session non-updates */ if (!sdp_session_cmp (priv->remote_sdp, sdp)) goto finally; /* Delete a backup session structure, if any */ if (priv->backup_remote_sdp != NULL) { priv->backup_remote_sdp = NULL; g_assert (priv->backup_home != NULL); su_home_unref (priv->backup_home); priv->backup_home = NULL; } /* Back up the old session. * The medias still need the old media descriptions */ if (priv->remote_sdp != NULL) { g_assert (priv->home != NULL); g_assert (priv->backup_home == NULL); priv->backup_home = priv->home; priv->backup_remote_sdp = priv->remote_sdp; } /* Store the session description structure */ priv->home = su_home_create (); priv->remote_sdp = sdp_session_dup (priv->home, sdp); g_return_val_if_fail (priv->remote_sdp != NULL, FALSE); authoritative = (priv->state == RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED || priv->state == RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED); if (!priv_update_remote_media (self, authoritative)) return FALSE; finally: /* Make sure to always transition states and send out the response, * even if no stream-engine roundtrips were initiated */ priv_request_response_step (self); return TRUE; } static gboolean priv_glare_retry (gpointer session) { RakiaSipSession *self = session; RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); SESSION_DEBUG (self, "glare resolution interval is over"); if (priv->state == RAKIA_SIP_SESSION_STATE_REINVITE_PENDING) priv_session_invite (self, TRUE); /* Reap the timer */ priv->glare_timer_id = 0; return FALSE; } static void rakia_sip_session_resolve_glare (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); guint interval; if (priv->state != RAKIA_SIP_SESSION_STATE_REINVITE_SENT) { SESSION_DEBUG (self, "glare resolution triggered in unexpected state"); return; } /* * Set the grace interval accordinlgly to RFC 3261 section 14.1: * * 1. If the UAC is the owner of the Call-ID of the dialog ID * (meaning it generated the value), T has a randomly chosen value * between 2.1 and 4 seconds in units of 10 ms. * 2. If the UAC is not the owner of the Call-ID of the dialog ID, T * has a randomly chosen value of between 0 and 2 seconds in units * of 10 ms. */ if (priv->pending_offer) interval = 0; /* cut short, we have new things to negotiate */ else if (priv->incoming) interval = g_random_int_range (0, 200) * 10; else interval = g_random_int_range (210, 400) * 10; if (priv->glare_timer_id != 0) g_source_remove (priv->glare_timer_id); priv->glare_timer_id = g_timeout_add (interval, priv_glare_retry, self); SESSION_DEBUG (self, "glare resolution interval %u msec", interval); rakia_sip_session_change_state ( self, RAKIA_SIP_SESSION_STATE_REINVITE_PENDING); } static gboolean priv_nua_i_state_cb (RakiaSipSession *self, const RakiaNuaEvent *ev, tagi_t tags[], gpointer foo) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); const sdp_session_t *r_sdp = NULL; int offer_recv = 0; int answer_recv = 0; int ss_state = nua_callstate_init; gint status = ev->status; tl_gets(tags, NUTAG_CALLSTATE_REF(ss_state), NUTAG_OFFER_RECV_REF(offer_recv), NUTAG_ANSWER_RECV_REF(answer_recv), SOATAG_REMOTE_SDP_REF(r_sdp), TAG_END()); DEBUG("call with handle %p is %s", ev->nua_handle, nua_callstate_name (ss_state)); if (r_sdp) { g_return_val_if_fail (answer_recv || offer_recv, FALSE); if (!rakia_sip_session_set_remote_media (self, r_sdp)) { rakia_sip_session_terminate (self, 0, NULL); return TRUE; } } if (ss_state == nua_callstate_received && priv->state == RAKIA_SIP_SESSION_STATE_CREATED) { /* Let's announce the new call now that the initial streams have * been created */ rakia_sip_session_handle_incoming_call (self, ev->nua_handle, r_sdp); } switch ((enum nua_callstate)ss_state) { case nua_callstate_proceeding: switch (status) { case 180: g_signal_emit (self, signals[SIG_RINGING], 0); break; case 182: g_signal_emit (self, signals[SIG_QUEUED], 0); break; case 183: g_signal_emit (self, signals[SIG_IN_PROGRESS], 0); break; } break; case nua_callstate_completing: /* In auto-ack mode, we don't need to call nua_ack(), see NUTAG_AUTOACK() */ break; case nua_callstate_ready: /* FIXME: Clear any pre-establishment call states */ /* This are queued/ringing/in-progress */ if (status < 300) { rakia_sip_session_accept (self); } else if (status == 491) rakia_sip_session_resolve_glare (self); else { /* Was something wrong with our re-INVITE? We can't cope anyway. */ MESSAGE ("can't handle non-fatal response %d %s", status, ev->text); rakia_sip_session_terminate (self, 480, "Re-invite rejected"); } break; case nua_callstate_terminated: /* In cases of self-inflicted termination, * we should have already gone through the moves */ if (priv->state == RAKIA_SIP_SESSION_STATE_ENDED) break; if (status >= 300) { rakia_sip_session_peer_error (self, status, ev->text); } rakia_sip_session_change_state (self, RAKIA_SIP_SESSION_STATE_ENDED); break; default: break; } return TRUE; } static void rakia_sip_session_attach_to_nua_handle (RakiaSipSession *self, nua_handle_t *nh, RakiaBaseConnection *conn) { rakia_event_target_attach (nh, (GObject *) self); /* have the connection handle authentication, before all other * response callbacks */ rakia_base_connection_add_auth_handler (conn, RAKIA_EVENT_TARGET (self)); g_signal_connect (self, "nua-event::nua_i_invite", G_CALLBACK (priv_nua_i_invite_cb), NULL); g_signal_connect (self, "nua-event::nua_i_bye", G_CALLBACK (priv_nua_i_bye_cb), NULL); g_signal_connect (self, "nua-event::nua_i_cancel", G_CALLBACK (priv_nua_i_cancel_cb), NULL); g_signal_connect (self, "nua-event::nua_i_state", G_CALLBACK (priv_nua_i_state_cb), NULL); } RakiaSipSession * rakia_sip_session_new (nua_handle_t *nh, RakiaBaseConnection *conn, gboolean incoming, gboolean immutable_streams) { RakiaSipSession *self = g_object_new (RAKIA_TYPE_SIP_SESSION, NULL); self->priv->incoming = incoming; self->priv->nua_op = nh; self->priv->conn = g_object_ref (conn); self->priv->immutable_streams = immutable_streams; nua_handle_ref (self->priv->nua_op); rakia_sip_session_attach_to_nua_handle (self, nh, conn); return self; } /** * Converts a sofia-sip media type enum to Telepathy media type. * See and . * * @return G_MAXUINT if the media type cannot be mapped */ static TpMediaStreamType rakia_media_type (sdp_media_e sip_mtype) { switch (sip_mtype) { case sdp_media_audio: return TP_MEDIA_STREAM_TYPE_AUDIO; case sdp_media_video: return TP_MEDIA_STREAM_TYPE_VIDEO; default: /* some invalid value */ return G_MAXINT; } } gboolean rakia_sip_session_remove_media (RakiaSipSession *self, RakiaSipMedia *media, guint status, const gchar *reason) { guint i; gboolean has_removed_media = FALSE; gboolean has_media = TRUE; g_return_val_if_fail (RAKIA_IS_SIP_MEDIA (media), FALSE); for (i = 0; i < self->priv->medias->len; i++) { if (media == g_ptr_array_index (self->priv->medias, i)) { g_object_ref (media); g_ptr_array_index (self->priv->medias, i) = NULL; g_signal_emit (self, signals[SIG_MEDIA_REMOVED], 0, media); g_object_unref (media); has_removed_media = TRUE; } else if (g_ptr_array_index (self->priv->medias, i) != NULL) has_media = TRUE; } if (!has_media) rakia_sip_session_terminate (self, status, reason); return has_removed_media; } gboolean rakia_sip_session_has_media (RakiaSipSession *self, TpMediaStreamType media_type) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); guint i; for (i = 0; i < priv->medias->len; i++) { RakiaSipMedia *media = g_ptr_array_index (priv->medias, i); if (media == NULL) continue; if (rakia_sip_media_get_media_type (media) == media_type) return TRUE; } return FALSE; } void rakia_sip_session_respond (RakiaSipSession *self, gint status, const char *message) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); SESSION_DEBUG (self, "responding: %03d %s", status, message ? message : ""); if (message != NULL && !message[0]) message = NULL; if (priv->nua_op) nua_respond (priv->nua_op, status, message, TAG_END()); } void rakia_sip_session_accept (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); if (priv->accepted) return; SESSION_DEBUG (self, "accepting the session"); priv->accepted = TRUE; /* Will change session state to active when streams are ready */ priv_request_response_step (self); } gboolean rakia_sip_session_is_accepted (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); return priv->accepted; } void rakia_sip_session_terminate (RakiaSipSession *session, guint status, const gchar *reason) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); DEBUG ("enter"); if (priv->state == RAKIA_SIP_SESSION_STATE_ENDED) return; if (status == 0) { status = SIP_480_TEMPORARILY_UNAVAILABLE; reason = "Terminated"; } if (priv->nua_op != NULL) { /* XXX: should the stack do pretty much the same * (except freeing the saved event) upon nua_handle_destroy()? */ switch (priv->state) { case RAKIA_SIP_SESSION_STATE_ACTIVE: case RAKIA_SIP_SESSION_STATE_RESPONSE_RECEIVED: case RAKIA_SIP_SESSION_STATE_REINVITE_SENT: case RAKIA_SIP_SESSION_STATE_REINVITE_PENDING: SESSION_DEBUG (session, "sending BYE"); nua_bye (priv->nua_op, TAG_END()); break; case RAKIA_SIP_SESSION_STATE_INVITE_SENT: SESSION_DEBUG (session, "sending CANCEL"); nua_cancel (priv->nua_op, TAG_END()); break; case RAKIA_SIP_SESSION_STATE_INVITE_RECEIVED: SESSION_DEBUG (session, "sending the %d response to an incoming INVITE", status); nua_respond (priv->nua_op, status, reason, TAG_END()); break; case RAKIA_SIP_SESSION_STATE_REINVITE_RECEIVED: if (priv->saved_event[0]) { SESSION_DEBUG (session, "sending the %d response to an incoming re-INVITE", status); nua_respond (priv->nua_op, status, reason, NUTAG_WITH(nua_saved_event_request (priv->saved_event)), TAG_END()); nua_destroy_event (priv->saved_event); } SESSION_DEBUG (session, "sending BYE to terminate the call itself"); nua_bye (priv->nua_op, TAG_END()); break; default: /* let the Sofia stack decide what do to */; } } rakia_sip_session_change_state (session, RAKIA_SIP_SESSION_STATE_ENDED); } gboolean rakia_sip_session_pending_offer (RakiaSipSession *self) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (self); return priv->pending_offer; } RakiaSipSessionState rakia_sip_session_get_state (RakiaSipSession *session) { return session->priv->state; } gboolean rakia_sip_session_is_held (RakiaSipSession *session) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); guint i; for (i = 0; i < priv->medias->len; i++) { RakiaSipMedia *media = g_ptr_array_index (priv->medias, i); if (!media) continue; if (!rakia_sip_media_is_held (media)) return FALSE; } return TRUE; } void rakia_sip_session_set_hold_requested (RakiaSipSession *session, gboolean hold_requested) { RakiaSipSessionPrivate *priv = RAKIA_SIP_SESSION_GET_PRIVATE (session); guint i; if (session->priv->hold_requested == hold_requested) return; SESSION_DEBUG (session, "set hold: %d", hold_requested); session->priv->hold_requested = hold_requested; for (i = 0; i < priv->medias->len; i++) { RakiaSipMedia *media = g_ptr_array_index (priv->medias, i); if (media == NULL) continue; rakia_sip_media_set_hold_requested (media, hold_requested); } rakia_sip_session_media_changed (session); } GPtrArray * rakia_sip_session_get_medias (RakiaSipSession *self) { return self->priv->medias; } telepathy-rakia-0.8.0/rakia/handles.h0000644000175000017500000000315712223047264014412 00000000000000/* * rakia/handle.h - Telepathy SIP handle management * Copyright (C) 2011 Nokia Corporation * @author Pekka Pessi * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef RAKIA_HANDLE_H #define RAKIA_HANDLE_H #include #include G_BEGIN_DECLS TpHandle rakia_handle_ensure (TpBaseConnection *, url_t const *, char const *); TpHandle rakia_handle_by_requestor (TpBaseConnection *, sip_t const *sip); char const *rakia_handle_inspect (TpBaseConnection *, TpHandle handle); gchar * rakia_handle_normalize (TpHandleRepoIface *repo, const gchar *sipuri, gpointer context, GError **error); gchar *rakia_normalize_contact (const gchar *sipuri, const url_t *base_url, const gchar *transport, GError **error); /* no longer does anything */ G_DEPRECATED void rakia_handle_unref (TpBaseConnection *, TpHandle handle); G_END_DECLS #endif /* !RAKIA_HANDLE_H */ telepathy-rakia-0.8.0/rakia/call-stream.h0000644000175000017500000000467012223047264015201 00000000000000/* * call-stream.h - Header for RakiaCallStream * Copyright (C) 2011 Collabora Ltd. * @author Olivier Crete * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CALL_STREAM_H__ #define __RAKIA_CALL_STREAM_H__ #include #include #include "rakia/call-content.h" #include "rakia/sip-media.h" G_BEGIN_DECLS typedef struct _RakiaCallStream RakiaCallStream; typedef struct _RakiaCallStreamPrivate RakiaCallStreamPrivate; typedef struct _RakiaCallStreamClass RakiaCallStreamClass; struct _RakiaCallStreamClass { TpBaseMediaCallStreamClass parent_class; }; struct _RakiaCallStream { TpBaseMediaCallStream parent; RakiaCallStreamPrivate *priv; }; GType rakia_call_stream_get_type (void); /* TYPE MACROS */ #define RAKIA_TYPE_CALL_STREAM \ (rakia_call_stream_get_type ()) #define RAKIA_CALL_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_CALL_STREAM, RakiaCallStream)) #define RAKIA_CALL_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_CALL_STREAM, \ RakiaCallStreamClass)) #define RAKIA_IS_CALL_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_CALL_STREAM)) #define RAKIA_IS_CALL_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_CALL_STREAM)) #define RAKIA_CALL_STREAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_CALL_STREAM, \ RakiaCallStreamClass)) RakiaCallStream * rakia_call_stream_new ( RakiaCallContent *content, RakiaSipMedia *media, const gchar *object_path, TpStreamTransportType transport, TpBaseConnection *connection); void rakia_call_stream_update_direction (RakiaCallStream *self); G_END_DECLS #endif /* #ifndef __RAKIA_CALL_STREAM_H__*/ telepathy-rakia-0.8.0/rakia/event-target.c0000644000175000017500000001753412223047264015400 00000000000000/* * event-target.c - Implementation for RakiaEventTarget interface * Copyright (C) 2008 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "event-target.h" #include "signals-marshal.h" #define DEBUG_FLAG RAKIA_DEBUG_EVENTS #include "debug.h" /* Define to the highest known nua_event_e enumeration member */ #define RAKIA_NUA_EVENT_LAST nua_i_register /* Mapping of the event enumeration to signal detail quarks */ static GQuark event_quarks[RAKIA_NUA_EVENT_LAST + 1] = {0}; /* Signals */ enum { SIG_NUA_EVENT, NUM_SIGNALS }; static guint signals[NUM_SIGNALS] = {0}; static RakiaEventTarget * rakia_event_target_gone_instance (void); static void rakia_event_target_base_init (gpointer klass) { static gboolean initialized = FALSE; gint i; if (!initialized) { initialized = TRUE; /** * RakiaEventTarget::nua-event: * @instance: an object implementing #RakiaEventTarget that emitted the signal * @event: Pointer to the event data structure * @tags: Tag list containing dynamically typed information about the event * * Emitted by the NUA event handler for an object bound * to a NUA operation handle. * Returns: a handler returns TRUE to indicate that further handling * of the signal should cease. */ signals[SIG_NUA_EVENT] = g_signal_new ("nua-event", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST|G_SIGNAL_DETAILED, 0 /* G_STRUCT_OFFSET (RakiaEventTargetInterface, nua_event) */, g_signal_accumulator_true_handled, NULL, _rakia_marshal_BOOLEAN__POINTER_POINTER, G_TYPE_BOOLEAN, 2, G_TYPE_POINTER, G_TYPE_POINTER); for (i = 0; i <= RAKIA_NUA_EVENT_LAST; i++) event_quarks[i] = g_quark_from_static_string (nua_event_name ((nua_event_t) i)); } } GType rakia_event_target_get_type (void) { static GType type = 0; if (G_UNLIKELY (type == 0)) { static const GTypeInfo info = { sizeof (RakiaEventTargetInterface), rakia_event_target_base_init, /* base_init */ NULL, /* base_finalize */ NULL, /* class_init */ NULL, /* class_finalize */ NULL, /* class_data */ 0, 0, /* n_preallocs */ NULL /* instance_init */ }; type = g_type_register_static (G_TYPE_INTERFACE, "RakiaEventTargetInterface", &info, 0); } return type; } static void rakia_event_target_retire_nua_handle (nua_handle_t *nh) { static RakiaEventTarget *target_gone = NULL; if (G_UNLIKELY (target_gone == NULL)) target_gone = rakia_event_target_gone_instance (); nua_handle_bind (nh, target_gone); nua_handle_unref (nh); } static void _rakia_event_target_finalized (gpointer data, GObject *former_obj) { rakia_event_target_retire_nua_handle ((nua_handle_t *) data); } /** * rakia_event_target_attach: * @nh: The NUA handle * @obj: an object implementing #RakiaEventTarget * * Attach an event target object to the NUA handle using nua_handle_bind(). * The reference count of the NUA handle is incremented. * When the attached object is finalized, the reference count of the NUA handle * is decremented, and the handle is bound to a special end-of-life event * handler for debugging purposes. */ void rakia_event_target_attach (nua_handle_t *nh, GObject *obj) { g_assert (nh != NULL); nua_handle_bind (nh, RAKIA_EVENT_TARGET (obj)); nua_handle_ref (nh); g_object_weak_ref (obj, _rakia_event_target_finalized, nh); } /** * rakia_event_target_detach: * @nh: The NUA handle * * Detach the event target object previously attached to the NUA handle * using rakia_event_target_attach(). * The reference count of the NUA handle is decremented, and the handle * is bound to a special end-of-life event handler for debugging purposes. */ void rakia_event_target_detach (nua_handle_t *nh) { GObject *obj; g_assert (nh != NULL); obj = G_OBJECT (nua_handle_magic (nh)); g_object_weak_unref (obj, _rakia_event_target_finalized, nh); rakia_event_target_retire_nua_handle (nh); } /** * rakia_event_target_emit_nua_event: * @instance: The object implementing this interface * @event: Pointer to the event data structure * @tags: Tag list containing dynamically typed information about the event * * Emit the signal #RakiaEventTarget::nua-event, detailed with the event name, * on an instance of a class implementing this interface. * This function is normally called by the NUA callback. * Returns: TRUE if a signal handler handled the event and returned TRUE. */ gboolean rakia_event_target_emit_nua_event (gpointer instance, const RakiaNuaEvent *ev, tagi_t tags[]) { gboolean retval = FALSE; gint nua_event; GQuark detail; g_assert (RAKIA_IS_EVENT_TARGET (instance)); nua_event = ev->nua_event; detail = G_LIKELY (nua_event >= 0 && nua_event <= RAKIA_NUA_EVENT_LAST) ? event_quarks[nua_event] : g_quark_from_static_string (nua_event_name (nua_event)); g_signal_emit (instance, signals[SIG_NUA_EVENT], detail, ev, tags, &retval); return retval; } /* RakiaEventTargetGone: * a special private implementation of RakiaEventTarget for a singleton * catch-all object to associate with handles that have been detached from * other event targets. */ typedef struct _RakiaEventTargetGone RakiaEventTargetGone; typedef struct _RakiaEventTargetGoneClass RakiaEventTargetGoneClass; static GType rakia_event_target_gone_get_type (void); struct _RakiaEventTargetGone { GObject parent; }; struct _RakiaEventTargetGoneClass { GObjectClass parent_class; }; static gboolean rakia_late_nua_event_cb (RakiaEventTargetGone *self, const RakiaNuaEvent *event, tagi_t tags[], gpointer foo) { DEBUG ("%s received for the retired handle %p: %03d %s", nua_event_name (event->nua_event), event->nua_handle, event->status, event->text); return TRUE; } static void rakia_event_target_gone_iface_init (gpointer g_iface, gpointer iface_data) { } G_DEFINE_TYPE_WITH_CODE (RakiaEventTargetGone, rakia_event_target_gone, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (RAKIA_TYPE_EVENT_TARGET, rakia_event_target_gone_iface_init)) static void rakia_event_target_gone_class_init (RakiaEventTargetGoneClass *klass) { } static void rakia_event_target_gone_init (RakiaEventTargetGone *self) { g_signal_connect (self, "nua-event", G_CALLBACK (rakia_late_nua_event_cb), NULL); } static gpointer _rakia_event_target_gone_new_instance (gpointer foo) { return g_object_new (rakia_event_target_gone_get_type (), NULL); } static RakiaEventTarget * rakia_event_target_gone_instance (void) { static GOnce init_gone_once = G_ONCE_INIT; g_once (&init_gone_once, _rakia_event_target_gone_new_instance, NULL); return RAKIA_EVENT_TARGET (init_gone_once.retval); } telepathy-rakia-0.8.0/rakia/codec-param-formats.c0000644000175000017500000003013712223047264016611 00000000000000/* * codec-param-formats.c - Implementation of codec parameter formatter infra * Copyright (C) 2009, 2010 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "codec-param-formats.h" #include #include "util.h" #define DEBUG_FLAG RAKIA_DEBUG_UTILITIES #include "debug.h" /** * RakiaCodecParamFormatFunc: * @params: the map of codec parameters * @out: a #GString for the output * * Defines the function pointer signature for codec parameter formatters. * A formatter takes a codec parameter map as passed in * a org.freedesktop.Telepathy.Media.StreamHandler codec structure, * and outputs its SDP representation, as per the value for an * a=fmtp attribute, into the string buffer @out. * * * The function is allowed to delete pairs from the @params hash table. * This is useful to implement a custom formatter that processes the * few parameters treated specially, removes them from the map, and * calls a more generic formatter such as rakia_codec_param_format_generic(). * * */ typedef void (* RakiaCodecParamFormatFunc) (RakiaSipCodec *codec, TpMediaStreamType media_type, GString *out); /** * RakiaCodecParamParseFunc: * @str: a string value with format-specific parameter description * @out: the parameter map to populate * * Defines the function pointer signature for codec parameter parsers. * A parser takes the string value coming from an a=fmtp * SDP attribute, and populates the parameter hash table. */ typedef void (* RakiaCodecParamParseFunc) (const gchar *str, TpMediaStreamType media_type, RakiaSipCodec *codec); /* Regexps for the name and the value parts of the parameter syntax */ #define FMTP_TOKEN_PARAM "[-A-Za-z0-9!#$%&'*+.^_`{|}~]+" #define FMTP_TOKEN_VALUE "[^;\"\\s]+|\"([^\"\\\\]|\\\\.)*\"" /* Indexes of the respective match groups in the whole regexp below */ #define FMTP_MATCH_NAME_PARAM "p" #define FMTP_MATCH_NAME_VALUE "v" typedef struct _RakiaCodecParamFormatting { RakiaCodecParamFormatFunc format; RakiaCodecParamParseFunc parse; } RakiaCodecParamFormatting; static GRegex *fmtp_attr_regex = NULL; static GRegex *dtmf_events_regex = NULL; static GHashTable *codec_param_formats[NUM_TP_MEDIA_STREAM_TYPES]; static void rakia_codec_param_formats_init (void); static void rakia_codec_param_format_generic (RakiaSipCodec *codec, TpMediaStreamType media_type, GString *out); static void rakia_codec_param_parse_generic (const gchar *str, TpMediaStreamType media_type, RakiaSipCodec *codec); static void rakia_codec_param_register_format ( TpMediaStreamType media, const char *name, RakiaCodecParamFormatFunc format, RakiaCodecParamParseFunc parse); /** * rakia_codec_param_format: * @media_type: the media type * @name: name of the codec, as per its MIME subtype registration * @params: the map of codec parameters * @out: a #GString for the output * * Formats the parameters passed in the @params into a string suitable for * a=fmtp attribute for an RTP payload description, * as specified for the media type defined by @media and @name. */ void rakia_codec_param_format (TpMediaStreamType media_type, RakiaSipCodec *codec, GString *out) { RakiaCodecParamFormatting *fmt; rakia_codec_param_formats_init (); /* XXX: thread unsafe, we don't care for now */ fmt = g_hash_table_lookup (codec_param_formats[media_type], codec->encoding_name); if (fmt != NULL && fmt->format != NULL) fmt->format (codec, media_type, out); else rakia_codec_param_format_generic (codec, media_type, out); } /** * rakia_codec_param_parse: * @media_type: the media type * @name: name of the codec, as per its MIME subtype registration * @fmtp: a string with the codec-specific parameter data. May be #NULL. * @out: the parameter map to populate * * Parses the payload-specific parameter description as coming from an * a=fmtp attribute of an RTP payload description. * The media type is defined by @media_type and @name. */ void rakia_codec_param_parse (TpMediaStreamType media_type, RakiaSipCodec *codec, const gchar *fmtp) { RakiaCodecParamFormatting *fmt; if (fmtp == NULL) return; rakia_codec_param_formats_init (); /* XXX: thread unsafe, we don't care for now */ fmt = g_hash_table_lookup (codec_param_formats[media_type], codec->encoding_name); if (fmt != NULL && fmt->parse != NULL) fmt->parse (fmtp, media_type, codec); else rakia_codec_param_parse_generic (fmtp, media_type, codec); } /** * rakia_codec_param_register_format: * @media_type: the media type * @name: name of the codec, as per its MIME subtype registration. Must be a static string. * @format: pointer to the formatting function * @parse: pointer to the parsing function * * Registers custom SDP payload parameter formatting routines for a media * type. */ static void rakia_codec_param_register_format (TpMediaStreamType media_type, const char *name, RakiaCodecParamFormatFunc format, RakiaCodecParamParseFunc parse) { RakiaCodecParamFormatting *fmt; rakia_codec_param_formats_init (); fmt = g_slice_new (RakiaCodecParamFormatting); fmt->format = format; fmt->parse = parse; /* XXX: thread unsafe, we don't care for now */ g_hash_table_insert (codec_param_formats[media_type], (gpointer) name, fmt); } /** * rakia_codec_param_format_generic: * @params: the map of codec parameters * @out: a #GString for the output * * Formats the parameters as a semicolon separated list of * parameter=value * pairs, as recommended in IETF RFC 4855 Section 3. */ static void rakia_codec_param_format_generic (RakiaSipCodec *codec, TpMediaStreamType media_type, GString *out) { guint i; if (codec->params == NULL) return; for (i = 0; i < codec->params->len; i++) { RakiaSipCodecParam *param = g_ptr_array_index (codec->params, i); RakiaCodecParamFormatting *fmt; /* Ignore the ones with special functions */ fmt = g_hash_table_lookup (codec_param_formats[media_type], codec->encoding_name); if (fmt != NULL && fmt->format != NULL) continue; if (out->len != 0) g_string_append_c (out, ';'); if (strpbrk (param->value, "; \t") == NULL) g_string_append_printf (out, "%s=%s", param->name, param->value); else { g_string_append (out, param->name); g_string_append_c (out, '='); rakia_string_append_quoted (out, param->value); } } } /** * rakia_codec_param_parse_generic: * @fmtp: a string value with the parameter description * @out: the parameter map to populate * * Parses parameters formatted as a semicolon separated list of * parameter=value * pairs, as recommended in IETF RFC 4855 Section 3. */ static void rakia_codec_param_parse_generic (const gchar *fmtp, TpMediaStreamType media_type, RakiaSipCodec *codec) { GMatchInfo *match = NULL; gint pos; gint value_start; gint value_end; if (fmtp == NULL) return; pos = 0; /* Fast path for trivial cases, not involving the regex engine */ while (g_ascii_isspace (fmtp[pos])) ++pos; if (!fmtp[pos]) return; g_assert (fmtp_attr_regex != NULL); g_regex_match_full (fmtp_attr_regex, fmtp, -1, pos, G_REGEX_MATCH_ANCHORED, &match, NULL); while (g_match_info_matches (match)) { gchar *name; gchar *value; name = g_match_info_fetch_named (match, FMTP_MATCH_NAME_PARAM); g_match_info_fetch_named_pos (match, FMTP_MATCH_NAME_VALUE, &value_start, &value_end); if (value_end - 1 > value_start && fmtp[value_start] == '\"' && fmtp[value_end - 1] == '\"') { value = rakia_unquote_string (fmtp + value_start, value_end - value_start); } else { value = g_strndup (fmtp + value_start, value_end - value_start); } rakia_sip_codec_add_param (codec, name, value); g_match_info_fetch_pos (match, 0, NULL, &pos); if (!fmtp[pos]) break; g_match_info_next (match, NULL); } g_match_info_free (match); if (fmtp[pos]) MESSAGE ("failed to parse part of format parameters" " as an attribute-value list: %s", &fmtp[pos]); } static RakiaSipCodecParam * find_param_by_name (RakiaSipCodec *codec, const gchar *name) { guint i; if (codec->params == NULL) return NULL; for (i = 0; i < codec->params->len; i++) { RakiaSipCodecParam *param = g_ptr_array_index (codec->params, i); if (!strcmp (param->name, name)) return param; } return NULL; } /* Custom format for audio/telephone-event */ static void rakia_codec_param_format_telephone_event (RakiaSipCodec *codec, TpMediaStreamType media_type, GString *out) { RakiaSipCodecParam *events; /* events parameter value comes first without the parameter name */ events = find_param_by_name (codec, "events"); if (events != NULL) { g_string_append (out, events->value); } /* format the rest of the parameters, if any */ rakia_codec_param_format_generic (codec, media_type, out); } static void rakia_codec_param_parse_telephone_event (const gchar *fmtp, TpMediaStreamType media_type, RakiaSipCodec *codec) { GMatchInfo *match = NULL; gint end_pos = 0; g_assert (dtmf_events_regex != NULL); /* Parse the events list */ g_regex_match (dtmf_events_regex, fmtp, 0, &match); if (g_match_info_matches (match)) { gchar *events; events = g_match_info_fetch (match, 1); rakia_sip_codec_add_param (codec, "events", events); g_free (events); g_match_info_fetch_pos (match, 0, NULL, &end_pos); } g_match_info_free (match); /* Parse the remaining parameters, if any */ rakia_codec_param_parse_generic (fmtp + end_pos, media_type, codec); } /* * rakia_codec_param_formats_init: * * Initializes the codec parameter formatting infrastructure. * This function must be called before using any other functions in this module. * Calling the function more than once has no effect. */ static void rakia_codec_param_formats_init (void) { static volatile gsize been_here = 0; int i; if (g_once_init_enter (&been_here)) g_once_init_leave (&been_here, 1); else return; for (i = 0; i < NUM_TP_MEDIA_STREAM_TYPES; ++i) { /* XXX: we ignore deallocation of values for now */ codec_param_formats[i] = g_hash_table_new (g_str_hash, g_str_equal); } rakia_codec_param_register_format ( TP_MEDIA_STREAM_TYPE_AUDIO, "telephone-event", rakia_codec_param_format_telephone_event, rakia_codec_param_parse_telephone_event); fmtp_attr_regex = g_regex_new ( "(?<" FMTP_MATCH_NAME_PARAM ">" FMTP_TOKEN_PARAM ")" "\\s*=\\s*" "(?<" FMTP_MATCH_NAME_VALUE ">" FMTP_TOKEN_VALUE ")" "\\s*(;\\s*|$)", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); g_assert (fmtp_attr_regex != NULL); #define DTMF_RANGE "[0-9]+(-[0-9]+)?" dtmf_events_regex = g_regex_new ( "^(" DTMF_RANGE "(," DTMF_RANGE ")*)\\s*(;|$)", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); g_assert (dtmf_events_regex != NULL); } telepathy-rakia-0.8.0/rakia/media-manager.c0000644000175000017500000005317212223047264015460 00000000000000/* * media-manager.c - Media channel manager for SIP connection manager * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2010 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/media-manager.h" #include #include #include #include #include "rakia/base-connection.h" #include "rakia/call-channel.h" #include "rakia/handles.h" #include "rakia/sip-session.h" #include #define DEBUG_FLAG RAKIA_DEBUG_CONNECTION #include "rakia/debug.h" static void channel_manager_iface_init (gpointer, gpointer); static void rakia_media_manager_constructed (GObject *object); static void rakia_media_manager_close_all (RakiaMediaManager *fac); static RakiaSipSession * new_session (RakiaMediaManager *fac, nua_handle_t *nh, TpHandle handle); G_DEFINE_TYPE_WITH_CODE (RakiaMediaManager, rakia_media_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) enum { PROP_CONNECTION = 1, PROP_STUN_SERVER, PROP_STUN_PORT, LAST_PROPERTY }; struct _RakiaMediaManagerPrivate { /* unreferenced (since it owns this manager) */ TpBaseConnection *conn; /* array of referenced (RakiaCallChannel *) */ GPtrArray *channels; /* for unique channel object paths, currently always increments */ guint channel_index; gulong status_changed_id; gulong invite_received_id; gchar *stun_server; guint16 stun_port; gboolean dispose_has_run; }; #define RAKIA_MEDIA_MANAGER_GET_PRIVATE(fac) ((fac)->priv) static void close_channel_and_unref (gpointer data) { TpBaseChannel *chan = data; tp_base_channel_close (chan); g_object_unref (chan); } static void rakia_media_manager_init (RakiaMediaManager *fac) { RakiaMediaManagerPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (fac, RAKIA_TYPE_MEDIA_MANAGER, RakiaMediaManagerPrivate); fac->priv = priv; priv->conn = NULL; priv->channels = g_ptr_array_new_with_free_func (close_channel_and_unref); priv->channel_index = 0; priv->dispose_has_run = FALSE; } static void rakia_media_manager_dispose (GObject *object) { RakiaMediaManager *fac = RAKIA_MEDIA_MANAGER (object); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); if (priv->dispose_has_run) return; priv->dispose_has_run = TRUE; rakia_media_manager_close_all (fac); g_assert (priv->channels == NULL); if (G_OBJECT_CLASS (rakia_media_manager_parent_class)->dispose) G_OBJECT_CLASS (rakia_media_manager_parent_class)->dispose (object); } static void rakia_media_manager_finalize (GObject *object) { RakiaMediaManager *fac = RAKIA_MEDIA_MANAGER (object); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); g_free (priv->stun_server); } static void rakia_media_manager_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaMediaManager *fac = RAKIA_MEDIA_MANAGER (object); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, priv->conn); break; case PROP_STUN_SERVER: g_value_set_string (value, priv->stun_server); break; case PROP_STUN_PORT: g_value_set_uint (value, priv->stun_port); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_media_manager_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaMediaManager *fac = RAKIA_MEDIA_MANAGER (object); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); switch (property_id) { case PROP_CONNECTION: priv->conn = g_value_get_object (value); break; case PROP_STUN_SERVER: g_free (priv->stun_server); priv->stun_server = g_value_dup_string (value); break; case PROP_STUN_PORT: priv->stun_port = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_media_manager_class_init (RakiaMediaManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (RakiaMediaManagerPrivate)); object_class->constructed = rakia_media_manager_constructed; object_class->get_property = rakia_media_manager_get_property; object_class->set_property = rakia_media_manager_set_property; object_class->dispose = rakia_media_manager_dispose; object_class->finalize = rakia_media_manager_finalize; param_spec = g_param_spec_object ("connection", "RakiaBaseConnection object", "SIP connection that owns this media channel manager", RAKIA_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_string ("stun-server", "STUN server address", "STUN server address", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STUN_SERVER, param_spec); param_spec = g_param_spec_uint ("stun-port", "STUN port", "STUN port.", 0, G_MAXUINT16, RAKIA_DEFAULT_STUN_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STUN_PORT, param_spec); } static void rakia_media_manager_close_all (RakiaMediaManager *fac) { RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); if (priv->status_changed_id != 0) { g_signal_handler_disconnect (priv->conn, priv->status_changed_id); priv->status_changed_id = 0; } if (priv->channels != NULL) { GPtrArray *channels; channels = priv->channels; priv->channels = NULL; g_ptr_array_unref (channels); } } /** * media_channel_closed_cb: * Signal callback for when a media channel is closed. Removes the references * that #RakiaMediaManager holds to them. */ static void call_channel_closed_cb (RakiaCallChannel *chan, gpointer user_data) { RakiaMediaManager *fac = RAKIA_MEDIA_MANAGER (user_data); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); tp_channel_manager_emit_channel_closed_for_object (fac, TP_EXPORTABLE_CHANNEL (chan)); if (priv->channels) { g_ptr_array_remove_fast (priv->channels, chan); } } /** * new_call_channel * * Creates a new empty RakiaCallChannel. */ static RakiaCallChannel * new_call_channel (RakiaMediaManager *fac, TpHandle initiator, TpHandle maybe_peer, GHashTable *request_properties, RakiaSipSession *session) { RakiaMediaManagerPrivate *priv; RakiaCallChannel *chan = NULL; gchar *object_path; gboolean initial_audio = FALSE; gboolean initial_video = FALSE; gboolean immutable_streams = FALSE; const gchar *dtmf_initial_tones = NULL; const gchar *initial_audio_name = NULL; const gchar *initial_video_name = NULL; g_assert (initiator != 0); priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); object_path = g_strdup_printf ("%s/CallChannel%u", priv->conn->object_path, priv->channel_index++); DEBUG("channel object path %s", object_path); if (request_properties != NULL) { initial_audio = tp_asv_get_boolean (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, NULL); initial_video = tp_asv_get_boolean (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, NULL); initial_audio_name = tp_asv_get_string (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO_NAME); initial_video_name = tp_asv_get_string (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO_NAME); dtmf_initial_tones = tp_asv_get_string (request_properties, TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES); } g_object_get (priv->conn, "immutable-streams", &immutable_streams, NULL); chan = g_object_new (RAKIA_TYPE_CALL_CHANNEL, "connection", priv->conn, "object-path", object_path, "handle", maybe_peer, "initiator-handle", initiator, "initial-audio", initial_audio, "initial-video", initial_video, "initial-audio-name", initial_audio_name, "initial-video-name", initial_video_name, "initial-transport", TP_STREAM_TRANSPORT_TYPE_RAW_UDP, "mutable-contents", !immutable_streams, "initial-tones", dtmf_initial_tones, "sip-session", session, "stun-server", priv->stun_server ? priv->stun_server : "", "stun-port", priv->stun_port, "requested", (initiator == priv->conn->self_handle), NULL); g_free (object_path); g_signal_connect (chan, "closed", G_CALLBACK (call_channel_closed_cb), fac); g_ptr_array_add (priv->channels, chan); tp_base_channel_register (TP_BASE_CHANNEL (chan)); return chan; } static RakiaSipSession * new_session (RakiaMediaManager *fac, nua_handle_t *nh, TpHandle handle) { RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); RakiaSipSession *session; gboolean outgoing = (nh == NULL); gboolean immutable_streams = FALSE; g_object_get (priv->conn, "immutable-streams", &immutable_streams, NULL); if (outgoing) { nh = rakia_base_connection_create_handle ( RAKIA_BASE_CONNECTION (priv->conn), handle); } session = rakia_sip_session_new (nh, RAKIA_BASE_CONNECTION (priv->conn), !outgoing, immutable_streams); if (outgoing) { nua_handle_unref (nh); } return session; } struct InviteData { RakiaMediaManager *fac; TpHandle handle; }; static void incoming_call_cb (RakiaSipSession *session, struct InviteData *idata) { RakiaCallChannel *channel; g_signal_handlers_disconnect_by_func (session, G_CALLBACK (incoming_call_cb), idata); channel = new_call_channel (idata->fac, idata->handle, idata->handle, NULL, session); tp_channel_manager_emit_new_channel (idata->fac, TP_EXPORTABLE_CHANNEL (channel), NULL); g_object_unref (session); g_slice_free (struct InviteData, idata); } static gboolean rakia_nua_i_invite_cb (TpBaseConnection *conn, const RakiaNuaEvent *ev, tagi_t tags[], RakiaMediaManager *fac) { TpHandle handle; RakiaSipSession *session; struct InviteData *idata; /* figure out a handle for the identity */ handle = rakia_handle_by_requestor (conn, ev->sip); if (!handle) { MESSAGE ("incoming INVITE with invalid sender information"); nua_respond (ev->nua_handle, 400, "Invalid From address", TAG_END()); return TRUE; } DEBUG("Got incoming invite from <%s>", rakia_handle_inspect (conn, handle)); if (handle == conn->self_handle) { DEBUG("cannot handle calls from self"); nua_respond (ev->nua_handle, 501, "Calls from self are not supported", TAG_END()); /* FIXME: Possible handle leak.. needs double checking ? */ return TRUE; } session = new_session (fac, ev->nua_handle, 0); /* We delay emission of NewChannel(s) until we have the data on * initial media */ idata = g_slice_new (struct InviteData); idata->fac = fac; idata->handle = handle; g_signal_connect (session, "incoming-call", G_CALLBACK (incoming_call_cb), idata); return TRUE; } static void connection_status_changed_cb (RakiaBaseConnection *conn, guint status, guint reason, RakiaMediaManager *self) { RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (self); switch (status) { case TP_CONNECTION_STATUS_CONNECTED: priv->invite_received_id = g_signal_connect (conn, "nua-event::nua_i_invite", G_CALLBACK (rakia_nua_i_invite_cb), self); break; case TP_CONNECTION_STATUS_DISCONNECTED: rakia_media_manager_close_all (self); if (priv->invite_received_id != 0) { g_signal_handler_disconnect (conn, priv->invite_received_id); priv->invite_received_id = 0; } break; default: break; } } static void rakia_media_manager_constructed (GObject *object) { RakiaMediaManager *self = RAKIA_MEDIA_MANAGER (object); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (self); GObjectClass *parent_object_class = G_OBJECT_CLASS (rakia_media_manager_parent_class); if (parent_object_class->constructed != NULL) parent_object_class->constructed (object); priv->status_changed_id = g_signal_connect (priv->conn, "status-changed", (GCallback) connection_status_changed_cb, object); } static void rakia_media_manager_foreach_channel (TpChannelManager *manager, TpExportableChannelFunc foreach, gpointer user_data) { RakiaMediaManager *fac = RAKIA_MEDIA_MANAGER (manager); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (fac); guint i; for (i = 0; i < priv->channels->len; i++) { TpExportableChannel *channel = TP_EXPORTABLE_CHANNEL ( g_ptr_array_index (priv->channels, i)); foreach (channel, user_data); } } static const gchar * const media_channel_fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL }; static const gchar * const named_channel_allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO_NAME, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO_NAME, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_TRANSPORT, TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES, NULL }; /* not advertised in type_foreach_channel_class - can only be requested with * RequestChannel, not with CreateChannel/EnsureChannel */ static const gchar * const anon_channel_allowed_properties[] = { NULL }; static void rakia_media_manager_type_foreach_channel_class (GType type, TpChannelManagerTypeChannelClassFunc func, gpointer user_data) { GHashTable *table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); GValue *value, *handle_type_value; value = tp_g_value_slice_new (G_TYPE_STRING); g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_CALL); g_hash_table_insert (table, TP_PROP_CHANNEL_CHANNEL_TYPE, value); handle_type_value = tp_g_value_slice_new (G_TYPE_UINT); /* no uint value yet - we'll change it for each channel class */ g_hash_table_insert (table, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, handle_type_value); g_value_set_uint (handle_type_value, TP_HANDLE_TYPE_CONTACT); g_hash_table_insert (table, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, tp_g_value_slice_new_boolean (TRUE)); func (type, table, named_channel_allowed_properties, user_data); g_hash_table_remove (table, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO); g_hash_table_insert (table, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, tp_g_value_slice_new_boolean (TRUE)); func (type, table, named_channel_allowed_properties, user_data); g_hash_table_unref (table); } typedef enum { METHOD_REQUEST, METHOD_CREATE, METHOD_ENSURE, } RequestMethod; static gboolean rakia_media_manager_requestotron (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties, RequestMethod method) { RakiaMediaManager *self = RAKIA_MEDIA_MANAGER (manager); RakiaMediaManagerPrivate *priv = RAKIA_MEDIA_MANAGER_GET_PRIVATE (self); TpBaseConnection *conn = (TpBaseConnection *) priv->conn; TpHandleType handle_type; TpHandle handle; RakiaSipSession *session; RakiaCallChannel *channel = NULL; GError *error = NULL; GSList *request_tokens; gboolean valid = FALSE; gboolean initial_audio = FALSE; gboolean initial_video = FALSE; /* Supported modes of operation: * - RequestChannel(Contact, n) where n != 0: * channel has TargetHandle=n; * n is in remote pending; * call is started when caller calls RequestStreams. * - CreateChannel({THT: Contact, TH: n}): * channel has TargetHandle=n * n is not in the group interface at all * call is started when caller calls RequestStreams. * - EnsureChannel({THT: Contact, TH: n}): * look for a channel whose peer is n, and return that if found with * whatever properties and group membership it has; * otherwise the same as into CreateChannel */ if (tp_strdiff (tp_asv_get_string (request_properties, TP_PROP_CHANNEL_CHANNEL_TYPE), TP_IFACE_CHANNEL_TYPE_CALL)) return FALSE; if (tp_asv_get_boolean (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, &valid) && valid) initial_audio = TRUE; if (tp_asv_get_boolean (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, &valid) && valid) initial_audio = TRUE; if (!initial_audio && !initial_video) return FALSE; handle_type = tp_asv_get_uint32 (request_properties, TP_IFACE_CHANNEL ".TargetHandleType", NULL); handle = tp_asv_get_uint32 (request_properties, TP_IFACE_CHANNEL ".TargetHandle", NULL); if (handle_type != TP_HANDLE_TYPE_CONTACT) return FALSE; g_assert (handle != 0); if (tp_channel_manager_asv_has_unknown_properties (request_properties, media_channel_fixed_properties, named_channel_allowed_properties, &error)) goto error; /* Calls to self are problematic in terms of StreamedMedia channel * interface and its semantically required Group member changes; * we disable them until a better API is available through * Call channel type */ if (handle == conn->self_handle) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "Cannot call self"); goto error; } if (method == METHOD_ENSURE) { guint i; TpHandle peer = 0; for (i = 0; i < priv->channels->len; i++) { channel = g_ptr_array_index (priv->channels, i); g_object_get (channel, "peer", &peer, NULL); if (peer == handle) { tp_channel_manager_emit_request_already_satisfied (self, request_token, TP_EXPORTABLE_CHANNEL (channel)); return TRUE; } } } session = new_session (self, NULL, handle); channel = new_call_channel (self, conn->self_handle, handle, request_properties, session); g_object_unref (session); request_tokens = g_slist_prepend (NULL, request_token); tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (channel), request_tokens); g_slist_free (request_tokens); return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean rakia_media_manager_request_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return rakia_media_manager_requestotron (manager, request_token, request_properties, METHOD_REQUEST); } static gboolean rakia_media_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return rakia_media_manager_requestotron (manager, request_token, request_properties, METHOD_CREATE); } static gboolean rakia_media_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return rakia_media_manager_requestotron (manager, request_token, request_properties, METHOD_ENSURE); } static void channel_manager_iface_init (gpointer g_iface, gpointer iface_data) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = rakia_media_manager_foreach_channel; iface->type_foreach_channel_class = rakia_media_manager_type_foreach_channel_class; iface->request_channel = rakia_media_manager_request_channel; iface->create_channel = rakia_media_manager_create_channel; iface->ensure_channel = rakia_media_manager_ensure_channel; } telepathy-rakia-0.8.0/rakia/call-content.c0000644000175000017500000002746012223047264015355 00000000000000/* * call-content.c - RakiaCallContent * Copyright (C) 2011-2012 Collabora Ltd. * @author Olivier Crete * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/call-content.h" #include "rakia/call-stream.h" #define DEBUG_FLAG RAKIA_DEBUG_MEDIA #include "debug.h" static void rakia_call_content_constructed (GObject *object); static void rakia_call_content_dispose (GObject *object); static void rakia_call_content_deinit (TpBaseCallContent *base); static void media_remote_codecs_updated_cb (RakiaSipMedia *media, gboolean is_offer, RakiaCallContent *self); static void local_media_description_updated (RakiaCallContent *self, TpHandle contact, GHashTable *properties, gpointer user_data); static void md_offer_cb (GObject *obj, GAsyncResult *res, gpointer user_data); G_DEFINE_TYPE (RakiaCallContent, rakia_call_content, TP_TYPE_BASE_MEDIA_CALL_CONTENT); /* properties */ enum { PROP_CHANNEL = 1, PROP_SIP_MEDIA, LAST_PROPERTY }; /* private structure */ struct _RakiaCallContentPrivate { RakiaCallChannel *channel; RakiaSipMedia *media; RakiaCallStream *stream; guint codec_offer_id; }; static void rakia_call_content_init (RakiaCallContent *self) { RakiaCallContentPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_CALL_CONTENT, RakiaCallContentPrivate); self->priv = priv; } static void rakia_call_content_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaCallContent *self = RAKIA_CALL_CONTENT (object); RakiaCallContentPrivate *priv = self->priv; switch (property_id) { case PROP_CHANNEL: priv->channel = g_value_dup_object (value); break; case PROP_SIP_MEDIA: priv->media = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_call_content_class_init ( RakiaCallContentClass *rakia_call_content_class) { GObjectClass *object_class = G_OBJECT_CLASS (rakia_call_content_class); TpBaseCallContentClass *bcc_class = TP_BASE_CALL_CONTENT_CLASS (rakia_call_content_class); GParamSpec *param_spec; g_type_class_add_private (rakia_call_content_class, sizeof (RakiaCallContentPrivate)); object_class->constructed = rakia_call_content_constructed; object_class->dispose = rakia_call_content_dispose; object_class->set_property = rakia_call_content_set_property; bcc_class->deinit = rakia_call_content_deinit; param_spec = g_param_spec_object ("channel", "RakiaCallChannel object", "Call Channel.", RAKIA_TYPE_CALL_CHANNEL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CHANNEL, param_spec); param_spec = g_param_spec_object ("sip-media", "RakiaSipMedia object", "SIP media object that is used for this SIP media channel object.", RAKIA_TYPE_SIP_MEDIA, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIP_MEDIA, param_spec); } static void rakia_call_content_constructed (GObject *object) { RakiaCallContent *self = RAKIA_CALL_CONTENT (object); RakiaCallContentPrivate *priv = self->priv; TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel); TpBaseCallContent *bcc = TP_BASE_CALL_CONTENT (self); TpBaseMediaCallContent *bmcc = TP_BASE_MEDIA_CALL_CONTENT (self); TpHandle creator; gchar *object_path; g_signal_connect_object (priv->media, "remote-codec-offer-updated", G_CALLBACK (media_remote_codecs_updated_cb), self, 0); g_signal_connect (self, "local-media-description-updated", G_CALLBACK (local_media_description_updated), NULL); g_object_get (object, "creator", &creator, NULL); if (creator == tp_base_channel_get_self_handle (bchan)) { TpCallContentMediaDescription *md; TpDBusDaemon *bus = tp_base_connection_get_dbus_daemon ( tp_base_call_content_get_connection (bcc)); object_path = g_strdup_printf ("%s/InitialOffer", tp_base_call_content_get_object_path (bcc)); md = tp_call_content_media_description_new (bus, object_path, tp_base_channel_get_target_handle (bchan), FALSE, TRUE); g_free (object_path); tp_base_media_call_content_offer_media_description_async (bmcc, md, md_offer_cb, GUINT_TO_POINTER (TRUE)); } else { media_remote_codecs_updated_cb (priv->media, TRUE, self); } G_OBJECT_CLASS (rakia_call_content_parent_class)->constructed (object); } static void rakia_call_content_dispose (GObject *object) { RakiaCallContent *self = RAKIA_CALL_CONTENT (object); RakiaCallContentPrivate *priv = self->priv; tp_clear_object (&priv->media); if (G_OBJECT_CLASS (rakia_call_content_parent_class)->dispose) G_OBJECT_CLASS (rakia_call_content_parent_class)->dispose (object); } static void rakia_call_content_deinit (TpBaseCallContent *base) { RakiaCallContent *self = RAKIA_CALL_CONTENT (base); RakiaCallContentPrivate *priv = self->priv; RakiaSipSession *session; session = rakia_sip_media_get_session (priv->media); /* If the media was removed, it means it's by user request, so we must * do a re-invite */ if (rakia_sip_session_remove_media (session, priv->media, 0, NULL)) rakia_sip_session_media_changed (session); tp_clear_object (&priv->stream); tp_clear_object (&priv->channel); TP_BASE_CALL_CONTENT_CLASS ( rakia_call_content_parent_class)->deinit (base); } RakiaCallContent * rakia_call_content_new (RakiaCallChannel *channel, RakiaSipMedia *media, const gchar *object_path, TpBaseConnection *connection, const gchar *name, TpMediaStreamType media_type, TpHandle creator, TpCallContentDisposition disposition) { RakiaCallContent *content; content = g_object_new (RAKIA_TYPE_CALL_CONTENT, "channel", channel, "sip-media", media, "object-path", object_path, "connection", connection, "name", name, "media-type", media_type, "creator", creator, "disposition", disposition, "packetization", TP_CALL_CONTENT_PACKETIZATION_TYPE_RTP, NULL); return content; } RakiaSipMedia * rakia_call_content_get_media (RakiaCallContent *self) { return self->priv->media; } static void set_telepathy_codecs (RakiaCallContent *self, GHashTable *md_properties) { RakiaCallContentPrivate *priv = self->priv; guint i; GPtrArray *tpcodecs = tp_asv_get_boxed (md_properties, TP_PROP_CALL_CONTENT_MEDIA_DESCRIPTION_CODECS, TP_ARRAY_TYPE_CODEC_LIST); GPtrArray *sipcodecs = g_ptr_array_new_with_free_func ( (GDestroyNotify) rakia_sip_codec_free); for (i = 0; i < tpcodecs->len; i++) { GValueArray *tpcodec = g_ptr_array_index (tpcodecs, i); guint id; const gchar *name; guint clock_rate; guint channels; gboolean updated; GHashTable *extra_params; RakiaSipCodec *sipcodec; GHashTableIter iter; gpointer key, value; tp_value_array_unpack (tpcodec, 6, &id, &name, &clock_rate, &channels, &updated, &extra_params); sipcodec = rakia_sip_codec_new (id, name, clock_rate, channels); g_hash_table_iter_init (&iter, extra_params); while (g_hash_table_iter_next (&iter, &key, &value)) rakia_sip_codec_add_param (sipcodec, key, value); g_ptr_array_add (sipcodecs, sipcodec); } rakia_sip_media_take_local_codecs (priv->media, sipcodecs); } static void md_offer_cb (GObject *obj, GAsyncResult *res, gpointer user_data) { RakiaCallContent *self = RAKIA_CALL_CONTENT (obj); RakiaCallContentPrivate *priv = self->priv; TpBaseMediaCallContent *bmcc = TP_BASE_MEDIA_CALL_CONTENT (self); GError *error = NULL; gboolean is_initial_offer = GPOINTER_TO_UINT (user_data); if (tp_base_media_call_content_offer_media_description_finish (bmcc, res, &error)) { GHashTable *local_md = tp_base_media_call_content_get_local_media_description (bmcc, tp_base_channel_get_target_handle (TP_BASE_CHANNEL (priv->channel))); set_telepathy_codecs (self, local_md); } else { /* Only reject if the codecs where rejected */ if (error->domain == TP_ERROR && error->code == TP_ERROR_MEDIA_CODECS_INCOMPATIBLE) { g_assert (!is_initial_offer); rakia_sip_media_codecs_rejected (priv->media); DEBUG ("Codecs rejected: %s", error->message); } /* FIXME: We need to allow for partial failures */ g_clear_error (&error); } } static void media_remote_codecs_updated_cb (RakiaSipMedia *media, gboolean is_offer, RakiaCallContent *self) { TpBaseCallContent *bcc = TP_BASE_CALL_CONTENT (self); TpBaseMediaCallContent *bmcc = TP_BASE_MEDIA_CALL_CONTENT (self); RakiaCallContentPrivate *priv = self->priv; GPtrArray *remote_codecs = rakia_sip_media_get_remote_codec_offer (priv->media); TpCallContentMediaDescription *md; TpDBusDaemon *bus = tp_base_connection_get_dbus_daemon ( tp_base_call_content_get_connection (bcc)); gchar *object_path; guint i, j; if (remote_codecs == NULL) return; object_path = g_strdup_printf ("%s/Offer%u", tp_base_call_content_get_object_path (bcc), ++priv->codec_offer_id); md = tp_call_content_media_description_new (bus, object_path, tp_base_channel_get_target_handle (TP_BASE_CHANNEL (priv->channel)), TRUE, is_offer); g_free (object_path); for (i = 0; i < remote_codecs->len; i++) { RakiaSipCodec *codec = g_ptr_array_index (remote_codecs, i); GHashTable *parameters = g_hash_table_new (g_str_hash, g_str_equal); /* No need to copy the values as .._append_codec() will */ if (codec->params) for (j = 0; j < codec->params->len; j++) { RakiaSipCodecParam *param = g_ptr_array_index (codec->params, j); g_hash_table_insert (parameters, param->name, param->value); } tp_call_content_media_description_append_codec (md, codec->id, codec->encoding_name, codec->clock_rate, codec->channels, TRUE, parameters); g_hash_table_unref (parameters); } tp_base_media_call_content_offer_media_description_async (bmcc, md, md_offer_cb, GUINT_TO_POINTER (FALSE)); g_object_unref (md); } void rakia_call_content_add_stream (RakiaCallContent *self) { RakiaCallContentPrivate *priv = self->priv; TpBaseCallContent *bcc = TP_BASE_CALL_CONTENT (self); gchar *object_path; object_path = g_strdup_printf ("%s/Stream", tp_base_call_content_get_object_path (bcc)); priv->stream = rakia_call_stream_new (self, priv->media, object_path, TP_STREAM_TRANSPORT_TYPE_RAW_UDP, tp_base_call_content_get_connection (bcc)); g_free (object_path); tp_base_call_content_add_stream (bcc, TP_BASE_CALL_STREAM (priv->stream)); } static void local_media_description_updated (RakiaCallContent *self, TpHandle contact, GHashTable *properties, gpointer user_data) { set_telepathy_codecs (self, properties); } void rakia_call_content_remote_accept (RakiaCallContent *content) { rakia_call_stream_update_direction (content->priv->stream); } telepathy-rakia-0.8.0/rakia/Makefile.am0000644000175000017500000000307212223047264014653 00000000000000# # Makefile.am for telepathy-rakia/rakia # # Copyright (C) 2008 Nokia Corporation # Contact: Mikhail Zabaluev # Licensed under LGPL. See file COPYING. # noinst_LTLIBRARIES = librakia.la AM_CPPFLAGS = @GLIB_CFLAGS@ @TELEPATHY_GLIB_CFLAGS@ @SOFIA_SIP_UA_CFLAGS@ \ -I$(top_builddir) -I$(top_srcdir) AM_CFLAGS = $(ERROR_CFLAGS) $(COVERAGE_CFLAGS) AM_LDFLAGS = $(ERROR_LDFLAGS) rakia_includedir = $(includedir)/telepathy-rakia-0.7/rakia rakia_include_HEADERS = \ base-connection.h \ connection-aliasing.h \ sofia-decls.h \ codec-param-formats.h \ event-target.h \ handles.h \ debug.h \ media-manager.h \ text-manager.h \ util.h BUILT_SOURCES = \ signals-marshal.h \ signals-marshal.c librakia_la_SOURCES = \ base-connection.c \ base-connection-sofia.c \ connection-aliasing.c \ call-channel.h \ call-channel.c \ call-content.h \ call-content.c \ call-stream.h \ call-stream.c \ codec-param-formats.c \ event-target.c \ handles.c \ debug.c \ media-manager.c \ sip-media.c \ sip-media.h \ sip-session.c \ sip-session.h \ text-channel.h \ text-channel.c \ text-manager.c \ util.c nodist_librakia_la_SOURCES = \ signals-marshal.h \ signals-marshal.c EXTRA_DIST = signals-marshal.list CLEANFILES = $(BUILT_SOURCES) CLEANFILES += *.gcno signals-marshal.c: ${srcdir}/signals-marshal.list ( echo '#include "signals-marshal.h"' && \ glib-genmarshal --body --prefix=_rakia_marshal $< ) >$@ || rm -f $@ signals-marshal.h: ${srcdir}/signals-marshal.list glib-genmarshal --header --prefix=_rakia_marshal $< >$@ || rm -f $@ telepathy-rakia-0.8.0/rakia/text-manager.c0000644000175000017500000004473412223047264015371 00000000000000/* * text-manager.c - Text channel manager for SIP * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2011 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/text-manager.h" #include #include #include #include #include "rakia/text-channel.h" #include "rakia/base-connection.h" #include "rakia/handles.h" #include #include #include #define DEBUG_FLAG RAKIA_DEBUG_IM #include "rakia/debug.h" static void channel_manager_iface_init (gpointer g_iface, gpointer iface_data); static void connection_status_changed_cb (TpBaseConnection *conn, guint status, guint reason, RakiaTextManager *self); static void rakia_text_manager_close_all (RakiaTextManager *self); G_DEFINE_TYPE_WITH_CODE (RakiaTextManager, rakia_text_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) enum { PROP_CONNECTION = 1, LAST_PROPERTY }; typedef struct _RakiaTextManagerPrivate RakiaTextManagerPrivate; struct _RakiaTextManagerPrivate { TpBaseConnection *conn; /* guint handle => RakiaTextChannel *channel */ GHashTable *channels; gulong status_changed_id; gulong message_received_id; gboolean dispose_has_run; }; #define RAKIA_TEXT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RAKIA_TYPE_TEXT_MANAGER, RakiaTextManagerPrivate)) static void rakia_text_manager_init (RakiaTextManager *fac) { RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); priv->conn = NULL; priv->channels = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); priv->dispose_has_run = FALSE; } static void rakia_text_manager_constructed (GObject *object) { RakiaTextManager *fac = RAKIA_TEXT_MANAGER (object); RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); GObjectClass *parent_object_class = G_OBJECT_CLASS (rakia_text_manager_parent_class); if (parent_object_class->constructed != NULL) parent_object_class->constructed (object); priv->status_changed_id = g_signal_connect (priv->conn, "status-changed", (GCallback) connection_status_changed_cb, object); } static void rakia_text_manager_dispose (GObject *object) { RakiaTextManager *fac = RAKIA_TEXT_MANAGER (object); RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); if (priv->dispose_has_run) return; priv->dispose_has_run = TRUE; rakia_text_manager_close_all (fac); g_assert (priv->channels == NULL); if (G_OBJECT_CLASS (rakia_text_manager_parent_class)->dispose) G_OBJECT_CLASS (rakia_text_manager_parent_class)->dispose (object); } static void rakia_text_manager_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaTextManager *fac = RAKIA_TEXT_MANAGER (object); RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, priv->conn); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_text_manager_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaTextManager *fac = RAKIA_TEXT_MANAGER (object); RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); switch (property_id) { case PROP_CONNECTION: priv->conn = TP_BASE_CONNECTION (g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_text_manager_class_init (RakiaTextManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (RakiaTextManagerPrivate)); object_class->constructed = rakia_text_manager_constructed; object_class->get_property = rakia_text_manager_get_property; object_class->set_property = rakia_text_manager_set_property; object_class->dispose = rakia_text_manager_dispose; param_spec = g_param_spec_object ("connection", "RakiaBaseConnection object", "SIP connection that owns this text channel manager", RAKIA_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); } static void rakia_text_manager_close_all (RakiaTextManager *fac) { RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); GHashTable *channels; if (priv->status_changed_id != 0) { g_signal_handler_disconnect (priv->conn, priv->status_changed_id); priv->status_changed_id = 0; } if (!priv->channels) return; channels = priv->channels; priv->channels = NULL; g_hash_table_unref (channels); } struct _ForeachData { TpExportableChannelFunc func; gpointer user_data; }; static void _foreach_slave (gpointer key, gpointer value, gpointer user_data) { struct _ForeachData *data = (struct _ForeachData *)user_data; TpExportableChannel *chan = TP_EXPORTABLE_CHANNEL (value); data->func (chan, data->user_data); } static void rakia_text_manager_foreach_channel (TpChannelManager *manager, TpExportableChannelFunc func, gpointer user_data) { RakiaTextManager *fac = RAKIA_TEXT_MANAGER (manager); RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); struct _ForeachData data; data.func = func; data.user_data = user_data; g_hash_table_foreach (priv->channels, _foreach_slave, &data); } /** * text_channel_closed_cb: * * Signal callback for when a text channel is closed. Removes the references * that #RakiaChannelManager holds to them. */ static void channel_closed (RakiaTextChannel *chan, gpointer user_data) { RakiaTextManager *self = RAKIA_TEXT_MANAGER (user_data); RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (self); TpHandle contact_handle; gboolean really_destroyed = TRUE; tp_channel_manager_emit_channel_closed_for_object (self, (TpExportableChannel *) chan); if (priv->channels == NULL) return; g_object_get (chan, "handle", &contact_handle, "channel-destroyed", &really_destroyed, NULL); if (really_destroyed) { DEBUG ("removing text channel with handle %u", contact_handle); g_hash_table_remove (priv->channels, GINT_TO_POINTER (contact_handle)); } else { DEBUG ("reopening channel with handle %u due to pending messages", contact_handle); tp_channel_manager_emit_new_channel (self, (TpExportableChannel *) chan, NULL); } } /** * new_text_channel * * Creates a new empty RakiaTextChannel. */ static RakiaTextChannel * rakia_text_manager_new_channel (RakiaTextManager *fac, TpHandle handle, TpHandle initiator, gpointer request_token) { RakiaTextManagerPrivate *priv; RakiaTextChannel *chan; gchar *object_path; TpBaseConnection *conn; GSList *request_tokens; priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); conn = priv->conn; object_path = g_strdup_printf ("%s/TextChannel%u", conn->object_path, handle); DEBUG ("object path %s", object_path); chan = g_object_new (RAKIA_TYPE_TEXT_CHANNEL, "connection", priv->conn, "object-path", object_path, "handle", handle, "initiator-handle", initiator, NULL); g_free (object_path); g_signal_connect (chan, "closed", (GCallback) channel_closed, fac); g_hash_table_insert (priv->channels, GUINT_TO_POINTER (handle), chan); if (request_token != NULL) request_tokens = g_slist_prepend (NULL, request_token); else request_tokens = NULL; tp_channel_manager_emit_new_channel (fac, (TpExportableChannel *) chan, request_tokens); g_slist_free (request_tokens); return chan; } static const gchar * const text_channel_fixed_properties[] = { TP_IFACE_CHANNEL ".ChannelType", TP_IFACE_CHANNEL ".TargetHandleType", NULL }; static const gchar * const text_channel_allowed_properties[] = { TP_IFACE_CHANNEL ".TargetHandle", TP_IFACE_CHANNEL ".TargetID", NULL }; static void rakia_text_manager_type_foreach_channel_class (GType type, TpChannelManagerTypeChannelClassFunc func, gpointer user_data) { GHashTable *table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); GValue *value; value = tp_g_value_slice_new (G_TYPE_STRING); g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_TEXT); g_hash_table_insert (table, (gchar *) text_channel_fixed_properties[0], value); value = tp_g_value_slice_new (G_TYPE_UINT); g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); g_hash_table_insert (table, (gchar *) text_channel_fixed_properties[1], value); func (type, table, text_channel_allowed_properties, user_data); g_hash_table_unref (table); } static gboolean rakia_text_manager_requestotron (RakiaTextManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new) { RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (self); TpBaseConnection *base_conn = (TpBaseConnection *) priv->conn; TpHandle handle; GError *error = NULL; TpExportableChannel *channel; if (tp_strdiff (tp_asv_get_string (request_properties, TP_IFACE_CHANNEL ".ChannelType"), TP_IFACE_CHANNEL_TYPE_TEXT)) return FALSE; if (tp_asv_get_uint32 (request_properties, TP_IFACE_CHANNEL ".TargetHandleType", NULL) != TP_HANDLE_TYPE_CONTACT) return FALSE; /* validity already checked by TpBaseConnection */ handle = tp_asv_get_uint32 (request_properties, TP_IFACE_CHANNEL ".TargetHandle", NULL); g_assert (handle != 0); if (tp_channel_manager_asv_has_unknown_properties (request_properties, text_channel_fixed_properties, text_channel_allowed_properties, &error)) goto error; channel = g_hash_table_lookup (priv->channels, GUINT_TO_POINTER (handle)); if (channel == NULL) { rakia_text_manager_new_channel (self, handle, base_conn->self_handle, request_token); return TRUE; } if (require_new) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Already chatting with contact #%u in another channel", handle); goto error; } tp_channel_manager_emit_request_already_satisfied (self, request_token, channel); return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean rakia_text_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { RakiaTextManager *self = RAKIA_TEXT_MANAGER (manager); return rakia_text_manager_requestotron (self, request_token, request_properties, TRUE); } static gboolean rakia_text_manager_request_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { RakiaTextManager *self = RAKIA_TEXT_MANAGER (manager); return rakia_text_manager_requestotron (self, request_token, request_properties, FALSE); } static gboolean rakia_text_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { RakiaTextManager *self = RAKIA_TEXT_MANAGER (manager); return rakia_text_manager_requestotron (self, request_token, request_properties, FALSE); } static inline RakiaTextChannel * rakia_text_manager_lookup_channel (RakiaTextManager *fac, TpHandle handle) { RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (fac); return g_hash_table_lookup (priv->channels, GUINT_TO_POINTER(handle)); } static gboolean rakia_nua_i_message_cb (TpBaseConnection *conn, const RakiaNuaEvent *ev, tagi_t tags[], RakiaTextManager *fac) { RakiaTextChannel *channel; TpHandle handle; const sip_t *sip = ev->sip; const char *text = ""; gsize len = 0; char *allocated_text = NULL; /* Block anything else except text/plain messages (like isComposings) */ if (sip->sip_content_type && (g_ascii_strcasecmp ("text/plain", sip->sip_content_type->c_type))) { nua_respond (ev->nua_handle, SIP_415_UNSUPPORTED_MEDIA, SIPTAG_ACCEPT_STR("text/plain"), NUTAG_WITH_THIS(ev->nua), TAG_END()); goto end; } /* If there is some text, assure it's in UTF-8 encoding */ if (sip->sip_payload && sip->sip_payload->pl_len > 0) { const char *charset = NULL; if (sip->sip_content_type) { charset = msg_header_find_param ( (msg_common_t *) sip->sip_content_type, "charset"); } /* Default charset is UTF-8, we only need to convert if it's a different one */ if (charset && g_ascii_strcasecmp (charset, "UTF-8")) { GError *error; gsize in_len; allocated_text = g_convert ( sip->sip_payload->pl_data, sip->sip_payload->pl_len, "UTF-8", charset, &in_len, &len, &error); if (allocated_text == NULL) { gint status; const char *message = NULL; MESSAGE ("character set conversion failed for the message body: %s", error->message); if (error->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE) { status = 400; message = "Invalid character sequence in the message body"; } else { status = 500; message = "Character set conversion failed for the message body"; } nua_respond (ev->nua_handle, status, message, NUTAG_WITH_THIS(ev->nua), TAG_END()); g_error_free (error); goto end; } text = allocated_text; if (in_len != sip->sip_payload->pl_len) { nua_respond (ev->nua_handle, 400, "Incomplete character sequence at the " "end of the message body", NUTAG_WITH_THIS(ev->nua), TAG_END()); goto end; } } else { if (!g_utf8_validate (sip->sip_payload->pl_data, sip->sip_payload->pl_len, NULL)) { nua_respond (ev->nua_handle, 400, "Invalid character sequence in the message body", NUTAG_WITH_THIS(ev->nua), TAG_END()); goto end; } text = sip->sip_payload->pl_data; len = (gsize) sip->sip_payload->pl_len; } } handle = rakia_handle_by_requestor (conn, sip); if (!handle) { nua_respond (ev->nua_handle, 400, "Invalid From address", NUTAG_WITH_THIS(ev->nua), TAG_END()); goto end; } /* Send the final response immediately as recommended by RFC 3428 */ nua_respond (ev->nua_handle, SIP_200_OK, NUTAG_WITH_THIS(ev->nua), TAG_END()); DEBUG("Got incoming message from <%s>", rakia_handle_inspect (conn, handle)); channel = rakia_text_manager_lookup_channel (fac, handle); if (!channel) channel = rakia_text_manager_new_channel (fac, handle, handle, NULL); rakia_text_channel_receive (channel, sip, handle, text, len); end: g_free (allocated_text); return TRUE; } static void connection_status_changed_cb (TpBaseConnection *conn, guint status, guint reason, RakiaTextManager *self) { RakiaTextManagerPrivate *priv = RAKIA_TEXT_MANAGER_GET_PRIVATE (self); switch (status) { case TP_CONNECTION_STATUS_CONNECTING: priv->message_received_id = g_signal_connect (conn, "nua-event::nua_i_message", G_CALLBACK (rakia_nua_i_message_cb), self); break; case TP_CONNECTION_STATUS_DISCONNECTED: rakia_text_manager_close_all (self); if (priv->message_received_id != 0) { g_signal_handler_disconnect (conn, priv->message_received_id); priv->message_received_id = 0; } break; default: break; } } static void channel_manager_iface_init (gpointer g_iface, gpointer iface_data) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = rakia_text_manager_foreach_channel; iface->type_foreach_channel_class = rakia_text_manager_type_foreach_channel_class; iface->create_channel = rakia_text_manager_create_channel; iface->request_channel = rakia_text_manager_request_channel; iface->ensure_channel = rakia_text_manager_ensure_channel; } telepathy-rakia-0.8.0/rakia/codec-param-formats.h0000644000175000017500000000252012223047264016611 00000000000000/* * codec-param-formats.h - Declarations for codec parameter formatters * Copyright (C) 2009 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CODEC_PARAM_FORMATS_H__ #define __RAKIA_CODEC_PARAM_FORMATS_H__ #include #include #include G_BEGIN_DECLS void rakia_codec_param_format (TpMediaStreamType media_type, RakiaSipCodec *codec, GString *out); void rakia_codec_param_parse (TpMediaStreamType media_type, RakiaSipCodec *codec, const gchar *fmtp); G_END_DECLS #endif /* !__RAKIA_CODEC_PARAM_FORMATS_H__ */ telepathy-rakia-0.8.0/rakia/util.c0000644000175000017500000001053612223047264013743 00000000000000/* * util.c - implementation of Telepathy-Rakia utilities * Copyright (C) 2009, 2010 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "util.h" #include gchar const * rakia_version_string (void) { return "Telepathy-Rakia/" PACKAGE_VERSION; } static const guchar escape_table[256] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, /* Control characters except LF and CR. * NOTE: null character is intentionally flagged */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x10 - 0x1f */ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x22 == '"' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, /* 0x5c == '\\' */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x7f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /** * rakia_string_append_quoted: * @buf: a #GString to append the quoted text to * @text: text to append as a quoted string * * Appends to @buf the content of @text as a quoted string accordingly to SIP * or MIME syntax. */ void rakia_string_append_quoted (GString *buf, const gchar *text) { const gchar *p; gchar quoted_pair[2] = { '\\', }; g_string_append_c (buf, '"'); p = text; while (*p) { const gchar *q; /* Get the following text span to append verbatim */ for (q = p; !escape_table[(guchar) *q]; ++q) { /* do nothing */ } g_string_append_len (buf, p, q - p); if (*q == '\0') break; quoted_pair[1] = *q; g_string_append_len (buf, quoted_pair, 2); p = q + 1; } g_string_append_c (buf, '"'); } /** * rakia_quote_string: * @src: the source string * * Formats the content of @text as a quoted string accordingly to SIP * or MIME syntax. * * Returns: a newly allocated quoted string. * The string is to be freed with g_free(). */ gchar * rakia_quote_string (const gchar *src) { GString *buf; buf = g_string_sized_new (2); rakia_string_append_quoted (buf, src); return g_string_free (buf, FALSE); } /** * rakia_unquote_string: * @src: the quoted string, including the encompassing double quotes * @len: length of the string @src in bytes, * or -1 if the string is null-terminated * * Extracts text out of a quoted string literal accordingly to SIP * or MIME syntax, unescaping characters preceded by backspaces. * * Returns: a newly allocated unquoted string. * The string is to be freed with g_free(). */ gchar * rakia_unquote_string (const gchar *src, gssize len) { gchar *res; gchar *p; gssize i; g_return_val_if_fail (src != NULL, NULL); if (len < 0) len = strlen (src); g_return_val_if_fail (len >= 2, NULL); g_return_val_if_fail (src[0] == '"' && src[len - 1] == '"', NULL); res = g_malloc (len - 2 + 1); p = res; for (i = 1; i < len - 1; ++i) { if (src[i] == '\\') { ++i; if (G_UNLIKELY (i == len - 1)) { g_critical ("the quoted string is missing the termination quote, improperly escaped?"); return NULL; } } *p++ = src[i]; } *p = '\0'; return res; } telepathy-rakia-0.8.0/rakia/connection-aliasing.h0000644000175000017500000000401412223047264016711 00000000000000/* * rakia/connection-aliasing.h - Aliasing interface implementation for SIP * Copyright (C) 2008, 2011 Nokia Corporation * @author Mikhail Zabaluev * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CONNECTION_ALIASING_H__ #define __RAKIA_CONNECTION_ALIASING_H__ #include G_BEGIN_DECLS typedef struct _RakiaConnectionAliasing RakiaConnectionAliasing; typedef struct _RakiaConnectionAliasingInterface RakiaConnectionAliasingInterface; /* TYPE MACROS */ #define RAKIA_TYPE_CONNECTION_ALIASING \ (rakia_connection_aliasing_get_type ()) #define RAKIA_CONNECTION_ALIASING(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ RAKIA_TYPE_CONNECTION_ALIASING, RakiaConnectionAliasing)) #define RAKIA_IS_CONNECTION_ALIASING(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_CONNECTION_ALIASING)) #define RAKIA_CONNECTION_ALIASING_GET_INTERFACE(obj) \ (G_TYPE_INSTANCE_GET_INTERFACE((obj), \ RAKIA_TYPE_CONNECTION_ALIASING, RakiaConnectionAliasingInterface)) struct _RakiaConnectionAliasingInterface { GTypeInterface base_iface; }; GType rakia_connection_aliasing_get_type (void) G_GNUC_CONST; void rakia_connection_aliasing_init (gpointer instance); void rakia_connection_aliasing_svc_iface_init (gpointer g_iface, gpointer iface_data); G_END_DECLS #endif /*__RAKIA_CONN_ALIASING_H__*/ telepathy-rakia-0.8.0/rakia/call-stream.c0000644000175000017500000005137112223047264015174 00000000000000/* * call-stream.c - RakiaCallStream * Copyright (C) 2011-2012 Collabora Ltd. * @author Olivier Crete * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "rakia/call-stream.h" #include "rakia/sip-media.h" #define DEBUG_FLAG RAKIA_DEBUG_MEDIA #include "debug.h" static void rakia_call_stream_report_sending_failure ( TpBaseMediaCallStream *self, TpStreamFlowState old_state, TpCallStateChangeReason reason, const gchar *dbus_reason, const gchar *message); static void rakia_call_stream_report_receiving_failure ( TpBaseMediaCallStream *self, TpStreamFlowState old_state, TpCallStateChangeReason reason, const gchar *dbus_reason, const gchar *message); static gboolean rakia_call_stream_finish_initial_candidates ( TpBaseMediaCallStream *stream, GError **error); static GPtrArray *rakia_call_stream_add_local_candidates ( TpBaseMediaCallStream *stream, const GPtrArray *candidates, GError **error); static gboolean rakia_call_stream_set_sending (TpBaseMediaCallStream *stream, gboolean sending, GError **error); static void rakia_call_stream_request_receiving (TpBaseMediaCallStream *stream, TpHandle contact, gboolean receive); static void rakia_call_stream_constructed (GObject *object); static void rakia_call_stream_dispose (GObject *object); static void rakia_call_stream_finalize (GObject *object); static void media_remote_candidates_updated_cb (RakiaSipMedia *media, RakiaCallStream *self); static void receiving_updated_cb (RakiaCallStream *self); G_DEFINE_TYPE (RakiaCallStream, rakia_call_stream, TP_TYPE_BASE_MEDIA_CALL_STREAM) /* properties */ enum { PROP_SIP_MEDIA = 1, PROP_CAN_REQUEST_RECEIVING, LAST_PROPERTY }; /* private structure */ struct _RakiaCallStreamPrivate { RakiaCallChannel *channel; RakiaSipMedia *media; TpCallStreamEndpoint *endpoint; guint last_endpoint_no; }; static void rakia_call_stream_init (RakiaCallStream *self) { RakiaCallStreamPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_CALL_STREAM, RakiaCallStreamPrivate); self->priv = priv; } static void rakia_call_stream_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaCallStream *self = RAKIA_CALL_STREAM (object); RakiaCallStreamPrivate *priv = self->priv; switch (property_id) { case PROP_SIP_MEDIA: priv->media = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_call_stream_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaCallStream *self = RAKIA_CALL_STREAM (object); RakiaCallStreamPrivate *priv = self->priv; switch (property_id) { case PROP_CAN_REQUEST_RECEIVING: { gboolean mutable_contents; g_object_get (priv->channel, "mutable-contents", &mutable_contents, NULL); g_value_set_boolean (value, mutable_contents); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_call_stream_class_init (RakiaCallStreamClass *rakia_call_stream_class) { GObjectClass *object_class = G_OBJECT_CLASS (rakia_call_stream_class); TpBaseMediaCallStreamClass *bmcs_class = TP_BASE_MEDIA_CALL_STREAM_CLASS (rakia_call_stream_class); GParamSpec *param_spec; g_type_class_add_private (rakia_call_stream_class, sizeof (RakiaCallStreamPrivate)); object_class->constructed = rakia_call_stream_constructed; object_class->set_property = rakia_call_stream_set_property; object_class->get_property = rakia_call_stream_get_property; object_class->dispose = rakia_call_stream_dispose; object_class->finalize = rakia_call_stream_finalize; bmcs_class->report_sending_failure = rakia_call_stream_report_sending_failure; bmcs_class->report_receiving_failure = rakia_call_stream_report_receiving_failure; bmcs_class->add_local_candidates = rakia_call_stream_add_local_candidates; bmcs_class->finish_initial_candidates = rakia_call_stream_finish_initial_candidates; bmcs_class->request_receiving = rakia_call_stream_request_receiving; bmcs_class->set_sending = rakia_call_stream_set_sending; g_object_class_override_property (object_class, PROP_CAN_REQUEST_RECEIVING, "can-request-receiving"); param_spec = g_param_spec_object ("sip-media", "RakiaSipMedia object", "SIP media object that is used for this SIP media channel object.", RAKIA_TYPE_SIP_MEDIA, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIP_MEDIA, param_spec); } static void rakia_call_stream_constructed (GObject *object) { RakiaCallStream *self = RAKIA_CALL_STREAM (object); RakiaCallStreamPrivate *priv = self->priv; TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (object); TpBaseMediaCallStream *bmcs = TP_BASE_MEDIA_CALL_STREAM (object); TpHandle contact; GPtrArray *stun_array; GPtrArray *relay_array; gchar *stun_server = NULL; guint stun_port = 0; g_object_get (self, "channel", &priv->channel, NULL); contact = tp_base_channel_get_target_handle (TP_BASE_CHANNEL (priv->channel)); g_signal_connect_object (priv->media, "remote-candidates-updated", G_CALLBACK (media_remote_candidates_updated_cb), self, 0); g_signal_connect_object (priv->media, "direction-changed", G_CALLBACK (rakia_call_stream_update_direction), self, G_CONNECT_SWAPPED); if (!rakia_sip_media_is_created_locally (priv->media)) media_remote_candidates_updated_cb (priv->media, self); stun_array = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_value_array_free); g_object_get (priv->channel, "stun-server", &stun_server, "stun-port", &stun_port, NULL); if (stun_server && stun_port) { g_ptr_array_add (stun_array, tp_value_array_build (2, G_TYPE_STRING, stun_server, G_TYPE_UINT, stun_port, G_TYPE_INVALID)); } g_free (stun_server); tp_base_media_call_stream_set_stun_servers (bmcs, stun_array); g_ptr_array_unref (stun_array); relay_array = g_ptr_array_new (); tp_base_media_call_stream_set_relay_info (bmcs, relay_array); g_ptr_array_unref (relay_array); g_signal_connect (self, "notify::receiving-state", G_CALLBACK (receiving_updated_cb), NULL); receiving_updated_cb (self); /* Put the initial value */ if (rakia_sip_media_get_requested_direction (priv->media) & RAKIA_DIRECTION_RECEIVE) tp_base_call_stream_update_remote_sending_state (bcs, contact, TP_SENDING_STATE_PENDING_SEND, 0, TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", ""); else tp_base_call_stream_update_remote_sending_state (bcs, contact, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", ""); rakia_call_stream_update_direction (self); tp_base_media_call_stream_update_receiving_state ( TP_BASE_MEDIA_CALL_STREAM (self)); G_OBJECT_CLASS (rakia_call_stream_parent_class)->constructed (object); } void rakia_call_stream_dispose (GObject *object) { RakiaCallStream *self = RAKIA_CALL_STREAM (object); RakiaCallStreamPrivate *priv = self->priv; tp_clear_object (&priv->endpoint); tp_clear_object (&priv->media); G_OBJECT_CLASS (rakia_call_stream_parent_class)->dispose (object); } void rakia_call_stream_finalize (GObject *object) { G_OBJECT_CLASS (rakia_call_stream_parent_class)->finalize (object); } static void rakia_call_stream_report_sending_failure (TpBaseMediaCallStream *bmcs, TpStreamFlowState old_state, TpCallStateChangeReason reason, const gchar *dbus_reason, const gchar *message) { RakiaCallStream *self = RAKIA_CALL_STREAM (bmcs); TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (self); RakiaCallStreamPrivate *priv = self->priv; RakiaDirection current_direction = rakia_sip_media_get_requested_direction (priv->media); TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel); TpHandle self_handle = tp_base_channel_get_self_handle (bchan); tp_base_call_stream_update_local_sending_state (bcs, TP_SENDING_STATE_NONE, self_handle, reason, dbus_reason, message); if (!(current_direction & RAKIA_DIRECTION_SEND)) return; rakia_sip_media_set_requested_direction (priv->media, current_direction & ~RAKIA_DIRECTION_SEND); } static void rakia_call_stream_report_receiving_failure (TpBaseMediaCallStream *bmcs, TpStreamFlowState old_state, TpCallStateChangeReason reason, const gchar *dbus_reason, const gchar *message) { RakiaCallStream *self = RAKIA_CALL_STREAM (bmcs); TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (self); RakiaCallStreamPrivate *priv = self->priv; gboolean can_request_receiving; RakiaDirection current_requested_direction = rakia_sip_media_get_requested_direction (priv->media); RakiaDirection current_direction = rakia_sip_media_get_direction (priv->media); TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel); g_object_get (self, "can-request-receiving", &can_request_receiving, NULL); if (!can_request_receiving) { /* Failing the whole call because we can't stop receivingt */ DEBUG ("Closing channel because of error: %s", message); rakia_call_channel_hangup_error (priv->channel, reason, dbus_reason, message); return; } if (!(current_requested_direction & RAKIA_DIRECTION_RECEIVE)) return; if (current_direction & RAKIA_DIRECTION_RECEIVE) tp_base_call_stream_update_remote_sending_state (bcs, tp_base_channel_get_target_handle (bchan), TP_SENDING_STATE_PENDING_STOP_SENDING, tp_base_channel_get_self_handle (bchan), reason, dbus_reason, message); rakia_sip_media_set_requested_direction (priv->media, current_requested_direction & ~RAKIA_DIRECTION_RECEIVE); } static GPtrArray * rakia_call_stream_add_local_candidates (TpBaseMediaCallStream *stream, const GPtrArray *candidates, GError **error) { GPtrArray *accepted_candidates = g_ptr_array_sized_new (candidates->len); guint i; for (i = 0; i < candidates->len; i ++) { GValueArray *candidate = g_ptr_array_index (candidates, i); guint component; const gchar *ip; guint port; GHashTable *info; GInetAddress *inetaddr; gboolean valid; TpMediaStreamBaseProto proto; tp_value_array_unpack (candidate, 4, &component, &ip, &port, &info); if (component != 1 && component != 2) continue; if (port > 65535) continue; proto = tp_asv_get_uint32 (info, "protocol", &valid); if (valid && proto != TP_MEDIA_STREAM_BASE_PROTO_UDP) continue; inetaddr = g_inet_address_new_from_string (ip); if (inetaddr == NULL) continue; g_object_unref (inetaddr); g_ptr_array_add (accepted_candidates, candidate); } if (accepted_candidates->len == 0) { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "No valid candidate passed"); g_ptr_array_unref (accepted_candidates); return NULL; } return accepted_candidates; } static gboolean rakia_call_stream_finish_initial_candidates (TpBaseMediaCallStream *stream, GError **error) { RakiaCallStream *self = RAKIA_CALL_STREAM (stream); RakiaCallStreamPrivate *priv = self->priv; GPtrArray *candidates = tp_base_media_call_stream_get_local_candidates ( stream); guint i; for (i = 0; i < candidates->len; i++) { GValueArray *candidate = g_ptr_array_index (candidates, i); guint component; gchar *ip; guint port; GHashTable *info; const gchar *foundation; guint priority; gboolean valid; tp_value_array_unpack (candidate, 4, &component, &ip, &port, &info); foundation = tp_asv_get_string (info, "foundation"); if (!foundation) foundation = ""; priority = tp_asv_get_uint32 (info, "priority", &valid); if (!valid) priority = 0; rakia_sip_media_take_local_candidate (priv->media, rakia_sip_candidate_new (component, ip, port, foundation, priority)); } if (!rakia_sip_media_local_candidates_prepared (priv->media)) { g_set_error (error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "You need to set a candidate on component 1 first."); return FALSE; } return TRUE; } static void rakia_call_stream_request_receiving ( TpBaseMediaCallStream *stream, TpHandle contact, gboolean receive) { RakiaCallStream *self = RAKIA_CALL_STREAM (stream); TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (stream); RakiaCallStreamPrivate *priv = self->priv; RakiaDirection current_requested_direction = rakia_sip_media_get_requested_direction (priv->media); RakiaDirection current_direction = rakia_sip_media_get_direction (priv->media); TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel); if ((!!(current_requested_direction & RAKIA_DIRECTION_RECEIVE)) == receive) return; if (receive) { rakia_sip_media_set_requested_direction (priv->media, current_requested_direction | RAKIA_DIRECTION_RECEIVE); if (current_direction & RAKIA_DIRECTION_RECEIVE) tp_base_call_stream_update_remote_sending_state (bcs, tp_base_channel_get_target_handle (bchan), TP_SENDING_STATE_SENDING, tp_base_channel_get_self_handle (bchan), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "User requested to start receiving"); } else { rakia_sip_media_set_requested_direction (priv->media, current_requested_direction & ~RAKIA_DIRECTION_RECEIVE); if (!(current_direction & RAKIA_DIRECTION_RECEIVE)) tp_base_call_stream_update_remote_sending_state (bcs, tp_base_channel_get_target_handle (bchan), TP_SENDING_STATE_NONE, tp_base_channel_get_self_handle (bchan), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "User requested to stop receiving"); } } static gboolean rakia_call_stream_set_sending (TpBaseMediaCallStream *stream, gboolean sending, GError **error) { RakiaCallStream *self = RAKIA_CALL_STREAM (stream); RakiaCallStreamPrivate *priv = self->priv; RakiaDirection current_direction = rakia_sip_media_get_requested_direction (priv->media); gboolean mutable_contents; if (!!(current_direction & RAKIA_DIRECTION_SEND) == sending) return TRUE; /* Can't change the actual direction of a stream if we disable modifying * the SDP, except if we're starting a call. * In that case, we stop sending, but we don't inform the other side. */ g_object_get (priv->channel, "mutable-contents", &mutable_contents, NULL); if (!mutable_contents && !(tp_base_channel_is_requested (TP_BASE_CHANNEL (priv->channel)) && tp_base_call_channel_get_state ( TP_BASE_CALL_CHANNEL (priv->channel)) == TP_CALL_STATE_PENDING_INITIATOR)) return TRUE; if (sending) rakia_sip_media_set_requested_direction (priv->media, current_direction | RAKIA_DIRECTION_SEND); else rakia_sip_media_set_requested_direction (priv->media, current_direction & ~RAKIA_DIRECTION_SEND); return TRUE; } static void media_remote_candidates_updated_cb (RakiaSipMedia *media, RakiaCallStream *self) { RakiaCallStreamPrivate *priv = self->priv; TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (self); TpBaseMediaCallStream *bmcs = TP_BASE_MEDIA_CALL_STREAM (self); GPtrArray *candidates = rakia_sip_media_get_remote_candidates (media); TpDBusDaemon *bus = tp_base_connection_get_dbus_daemon ( tp_base_call_stream_get_connection (bcs)); gchar *object_path; guint i; if (priv->endpoint) { tp_base_media_call_stream_remove_endpoint (bmcs, priv->endpoint); tp_clear_object (&priv->endpoint); } if (candidates == NULL) return; object_path = g_strdup_printf ("%s/Endpoint%u", tp_base_call_stream_get_object_path (bcs), ++priv->last_endpoint_no); priv->endpoint = tp_call_stream_endpoint_new (bus, object_path, TP_STREAM_TRANSPORT_TYPE_RAW_UDP, FALSE); g_free (object_path); for (i = 0; i < candidates->len; i++) { RakiaSipCandidate *candidate = g_ptr_array_index (candidates, i); GHashTable *info = tp_asv_new ( "priority", G_TYPE_UINT, candidate->priority, "protocol", G_TYPE_UINT, TP_MEDIA_STREAM_BASE_PROTO_UDP, NULL); tp_call_stream_endpoint_add_new_candidate (priv->endpoint, candidate->component, candidate->ip, candidate->port, info); g_hash_table_unref (info); } tp_base_media_call_stream_add_endpoint (bmcs, priv->endpoint); } RakiaCallStream * rakia_call_stream_new ( RakiaCallContent *content, RakiaSipMedia *media, const gchar *object_path, TpStreamTransportType transport, TpBaseConnection *connection) { return g_object_new (RAKIA_TYPE_CALL_STREAM, "content", content, "sip-media", media, "object-path", object_path, "transport", transport, "connection", connection, NULL); } void rakia_call_stream_update_direction (RakiaCallStream *self) { TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (self); TpBaseMediaCallStream *bmcs = TP_BASE_MEDIA_CALL_STREAM (self); RakiaCallStreamPrivate *priv = self->priv; TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel); TpHandle contact = tp_base_channel_get_target_handle (bchan); TpHandle self_handle = tp_base_channel_get_self_handle (bchan); RakiaDirection direction = rakia_sip_media_get_direction (priv->media); RakiaDirection remote_direction = rakia_sip_media_get_remote_direction (priv->media); RakiaDirection requested_direction = rakia_sip_media_get_requested_direction (priv->media); TpLocalHoldState hold_state = tp_base_media_call_channel_get_local_hold_state ( TP_BASE_MEDIA_CALL_CHANNEL (priv->channel), NULL); DEBUG ("direction: %s requested: %s remote: %s hold: %d", rakia_direction_to_string (direction), rakia_direction_to_string (requested_direction), rakia_direction_to_string (remote_direction), hold_state != TP_LOCAL_HOLD_STATE_UNHELD); if ((direction & RAKIA_DIRECTION_SEND || !rakia_sip_media_has_remote_media (priv->media) || hold_state != TP_LOCAL_HOLD_STATE_UNHELD) && requested_direction & RAKIA_DIRECTION_SEND) { tp_base_call_stream_update_local_sending_state (bcs, TP_SENDING_STATE_SENDING, self_handle, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "User requested"); if (rakia_sip_media_has_remote_media (priv->media)) tp_base_media_call_stream_set_local_sending (bmcs, TRUE); } else if (remote_direction & RAKIA_DIRECTION_SEND) { if (tp_base_call_stream_get_local_sending_state (bcs) != TP_SENDING_STATE_SENDING) tp_base_call_stream_update_local_sending_state (bcs, TP_SENDING_STATE_PENDING_SEND, contact, TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", "Remote requested that we start sending"); } else { tp_base_call_stream_update_local_sending_state (bcs, TP_SENDING_STATE_NONE, self_handle, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "User requested"); } if ((direction & RAKIA_DIRECTION_RECEIVE) && (requested_direction & RAKIA_DIRECTION_RECEIVE)) tp_base_call_stream_update_remote_sending_state (bcs, contact, TP_SENDING_STATE_SENDING, 0, TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", ""); else if (!(direction & RAKIA_DIRECTION_RECEIVE) && !(requested_direction & RAKIA_DIRECTION_RECEIVE)) tp_base_call_stream_update_remote_sending_state (bcs, contact, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", ""); } static void receiving_updated_cb (RakiaCallStream *self) { RakiaCallStreamPrivate *priv = self->priv; TpBaseMediaCallStream *bmcs = TP_BASE_MEDIA_CALL_STREAM (self); rakia_sip_media_set_can_receive (priv->media, tp_base_media_call_stream_get_receiving_state (bmcs) == TP_STREAM_FLOW_STATE_STARTED); } telepathy-rakia-0.8.0/rakia/sip-media.h0000644000175000017500000001304212223047264014636 00000000000000/* * rakia-sip-media.h - Header for RakiaSipMedia * Copyright (C) 2005-2012 Collabora Ltd. * Copyright (C) 2005-2010 Nokia Corporation * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_SIP_MEDIA_H__ #define __RAKIA_SIP_MEDIA_H__ #include #include #include G_BEGIN_DECLS typedef struct _RakiaSipMedia RakiaSipMedia; typedef struct _RakiaSipMediaClass RakiaSipMediaClass; typedef struct _RakiaSipMediaPrivate RakiaSipMediaPrivate; typedef struct _RakiaSipSession RakiaSipSession; struct _RakiaSipMediaClass { GObjectClass parent_class; }; struct _RakiaSipMedia { GObject parent; RakiaSipMediaPrivate *priv; }; typedef enum { RAKIA_DIRECTION_NONE = 0, RAKIA_DIRECTION_SEND = 1, RAKIA_DIRECTION_RECEIVE = 2, RAKIA_DIRECTION_BIDIRECTIONAL = 3, } RakiaDirection; typedef struct _RakiaSipCodecParam { gchar *name; gchar *value; } RakiaSipCodecParam; typedef struct _RakiaSipCodec { guint id; gchar *encoding_name; guint clock_rate; guint channels; GPtrArray *params; } RakiaSipCodec; typedef struct _RakiaSipCandidate { guint component; gchar *ip; guint port; gchar *foundation; guint priority; } RakiaSipCandidate; GType rakia_sip_media_get_type(void); /* TYPE MACROS */ #define RAKIA_TYPE_SIP_MEDIA \ (rakia_sip_media_get_type()) #define RAKIA_SIP_MEDIA(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), RAKIA_TYPE_SIP_MEDIA, RakiaSipMedia)) #define RAKIA_SIP_MEDIA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), RAKIA_TYPE_SIP_MEDIA, RakiaSipMediaClass)) #define RAKIA_IS_SIP_MEDIA(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_SIP_MEDIA)) #define RAKIA_IS_SIP_MEDIA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_SIP_MEDIA)) #define RAKIA_SIP_MEDIA_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), RAKIA_TYPE_SIP_MEDIA, RakiaSipMediaClass)) /* For RakiaSipSession */ gchar * rakia_sdp_get_string_attribute (const sdp_attribute_t *attrs, const char *name); gboolean rakia_sip_media_set_remote_media (RakiaSipMedia *media, const sdp_media_t *new_media, gboolean authoritative); void rakia_sip_media_generate_sdp (RakiaSipMedia *media, GString *out, gboolean authoritative); gboolean rakia_sip_media_is_ready (RakiaSipMedia *self); gboolean rakia_sip_media_is_codec_intersect_pending (RakiaSipMedia *self); RakiaDirection rakia_direction_from_remote_media (const sdp_media_t *media); void rakia_sip_media_local_updated (RakiaSipMedia *self); /* ?? */ void rakia_sip_media_set_hold_requested (RakiaSipMedia *media, gboolean hold_requested); gboolean rakia_sip_media_is_held (RakiaSipMedia *media); RakiaSipMedia *rakia_sip_media_new (RakiaSipSession *session, TpMediaStreamType media_type, const gchar *name, RakiaDirection requested_direction, gboolean created_locally, gboolean hold_requested); const gchar * sip_media_get_media_type_str (RakiaSipMedia *self); /* Functions for both */ TpMediaStreamType rakia_sip_media_get_media_type (RakiaSipMedia *self); /* Functions for the upper layers */ RakiaSipCodec* rakia_sip_codec_new (guint id, const gchar *encoding_name, guint clock_rate, guint channels); void rakia_sip_codec_add_param (RakiaSipCodec *codec, const gchar *name, const gchar *value); void rakia_sip_codec_free (RakiaSipCodec *codec); RakiaSipCandidate* rakia_sip_candidate_new (guint component, const gchar *ip, guint port, const gchar *foundation, guint priority); void rakia_sip_candidate_free (RakiaSipCandidate *candidate); void rakia_sip_media_take_local_codecs (RakiaSipMedia *self, GPtrArray *local_codecs); void rakia_sip_media_take_local_candidate (RakiaSipMedia *self, RakiaSipCandidate *candidate); gboolean rakia_sip_media_local_candidates_prepared (RakiaSipMedia *self); GPtrArray *rakia_sip_media_get_remote_codec_offer (RakiaSipMedia *self); GPtrArray *rakia_sip_media_get_remote_candidates (RakiaSipMedia *self); const gchar *rakia_sip_media_get_name (RakiaSipMedia *media); RakiaSipSession *rakia_sip_media_get_session (RakiaSipMedia *media); void rakia_sip_media_codecs_rejected (RakiaSipMedia *media); gboolean rakia_sip_media_is_created_locally (RakiaSipMedia *self); void rakia_sip_media_set_requested_direction (RakiaSipMedia *media, RakiaDirection direction); RakiaDirection rakia_sip_media_get_direction (RakiaSipMedia *media); RakiaDirection rakia_sip_media_get_remote_direction (RakiaSipMedia *media); RakiaDirection rakia_sip_media_get_requested_direction ( RakiaSipMedia *self); gboolean rakia_sip_media_get_hold_requested (RakiaSipMedia *media); void rakia_sip_media_set_can_receive (RakiaSipMedia *media, gboolean can_receive); gboolean rakia_sip_media_has_remote_media (RakiaSipMedia *media); const gchar *rakia_direction_to_string (RakiaDirection direction); G_END_DECLS #endif /* #ifndef __RAKIA_SIP_MEDIA_H__*/ telepathy-rakia-0.8.0/rakia/base-connection.c0000644000175000017500000001672212223047264016040 00000000000000/* * sip-base-connection.c - source for SipBaseConnection * Copyright (C) 2011 Nokia Corporation. * Copyright (C) 2005-2007 Collabora Ltd. * Copyright (C) 2005-2011 Nokia Corporation * @author Kai Vehmanen * @author Martti Mela * @author Mikhail Zabaluev * @author Pekka Pessi * * Based on rakia-connection and gabble implementation (gabble-connection). * @author See gabble-connection.c * * This work is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This work 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include struct _RakiaBaseConnectionPrivate { su_root_t *sofia_root; /* guint: handle => owned url_t */ GHashTable *uris; unsigned dispose_has_run:1; unsigned :0; }; enum { PROP_NONE, PROP_SOFIA_ROOT, PROP_SOFIA_NUA, }; /* ---------------------------------------------------------------------- */ /* GObject implementation */ static void event_target_iface_init (gpointer iface, gpointer data) {} G_DEFINE_TYPE_WITH_CODE (RakiaBaseConnection, rakia_base_connection, TP_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, tp_contacts_mixin_iface_init); G_IMPLEMENT_INTERFACE (RAKIA_TYPE_EVENT_TARGET, event_target_iface_init); ); static void rakia_base_connection_init (RakiaBaseConnection *self) { GObject *object = G_OBJECT (self); TpBaseConnection *base = TP_BASE_CONNECTION (self); self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RAKIA_TYPE_BASE_CONNECTION, RakiaBaseConnectionPrivate); self->priv->uris = g_hash_table_new_full (NULL, NULL, NULL, free); tp_contacts_mixin_init (object, G_STRUCT_OFFSET (RakiaBaseConnection, contacts_mixin)); /* org.freedesktop.Telepathy.Connection attributes */ tp_base_connection_register_with_contacts_mixin (base); } static void rakia_base_connection_constructed(GObject *object) { if (G_OBJECT_CLASS(rakia_base_connection_parent_class)->constructed) G_OBJECT_CLASS(rakia_base_connection_parent_class)->constructed(object); } static void rakia_base_connection_dispose(GObject *object) { RakiaBaseConnection *self = RAKIA_BASE_CONNECTION(object); if (self->priv->dispose_has_run) return; self->priv->dispose_has_run = 1; G_OBJECT_CLASS(rakia_base_connection_parent_class)->dispose(object); } static void rakia_base_connection_finalize(GObject *object) { RakiaBaseConnection *self = RAKIA_BASE_CONNECTION (object); tp_clear_pointer (&self->priv->uris, g_hash_table_unref); G_OBJECT_CLASS(rakia_base_connection_parent_class)->finalize(object); } static void rakia_base_connection_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RakiaBaseConnection *self = RAKIA_BASE_CONNECTION (object); RakiaBaseConnectionPrivate *priv = self->priv; switch (property_id) { case PROP_SOFIA_ROOT: priv->sofia_root = g_value_get_pointer (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_base_connection_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { RakiaBaseConnection *self = RAKIA_BASE_CONNECTION (object); RakiaBaseConnectionPrivate *priv = self->priv; switch (property_id) { case PROP_SOFIA_ROOT: g_value_set_pointer (value, priv->sofia_root); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void rakia_base_connection_disconnected (TpBaseConnection *base) { RakiaBaseConnection *self = RAKIA_BASE_CONNECTION (base); /* handles are no longer meaningful */ g_hash_table_remove_all (self->priv->uris); } /* -------------------------------------------------------------------------- */ static void rakia_base_connection_class_init (RakiaBaseConnectionClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseConnectionClass *conn_class = (TpBaseConnectionClass *) klass; g_type_class_add_private (klass, sizeof (RakiaBaseConnectionPrivate)); object_class->constructed = rakia_base_connection_constructed; object_class->dispose = rakia_base_connection_dispose; object_class->finalize = rakia_base_connection_finalize; object_class->get_property = rakia_base_connection_get_property; object_class->set_property = rakia_base_connection_set_property; conn_class->disconnected = rakia_base_connection_disconnected; g_object_class_install_property (object_class, PROP_SOFIA_ROOT, g_param_spec_pointer ("sofia-root", "Sofia-SIP root", "The root object for Sofia-SIP", G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_SOFIA_NUA, g_param_spec_pointer ("sofia-nua", "Sofia-SIP UA", "The UA object for Sofia-SIP", G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); tp_contacts_mixin_class_init (object_class, G_STRUCT_OFFSET(RakiaBaseConnectionClass, contacts_mixin_class)); } nua_handle_t * rakia_base_connection_create_handle (RakiaBaseConnection *self, TpHandle tphandle) { RakiaBaseConnectionClass *cls = RAKIA_BASE_CONNECTION_GET_CLASS (self); return cls->create_handle (self, tphandle); } void rakia_base_connection_add_auth_handler (RakiaBaseConnection *self, RakiaEventTarget *target) { RakiaBaseConnectionClass *cls = RAKIA_BASE_CONNECTION_GET_CLASS (self); if (cls->add_auth_handler) cls->add_auth_handler (self, target); } void rakia_base_connection_save_event (RakiaBaseConnection *self, nua_saved_event_t ret_saved [1]) { nua_t *nua; g_object_get (self, "sofia-nua", &nua, NULL); nua_save_event (nua, ret_saved); } const url_t* rakia_base_connection_handle_to_uri (RakiaBaseConnection *self, TpHandle handle) { TpHandleRepoIface *repo; url_t *url; GError *error = NULL; repo = tp_base_connection_get_handles (TP_BASE_CONNECTION (self), TP_HANDLE_TYPE_CONTACT); if (!tp_handle_is_valid (repo, handle, &error)) { DEBUG ("invalid handle %u: %s", handle, error->message); g_error_free (error); return NULL; } url = g_hash_table_lookup (self->priv->uris, GUINT_TO_POINTER (handle)); if (url == NULL) { url = url_make (NULL, tp_handle_inspect (repo, handle)); g_hash_table_replace (self->priv->uris, GUINT_TO_POINTER (handle), url); } return url; } telepathy-rakia-0.8.0/rakia/call-channel.h0000644000175000017500000000445612223047264015320 00000000000000/* * call-channel.h - Header for RakiaCallChannel * Copyright © 2011 Collabora Ltd. * @author Olivier Crete * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RAKIA_CALL_CHANNEL_H__ #define __RAKIA_CALL_CHANNEL_H__ #include #include G_BEGIN_DECLS typedef struct _RakiaCallChannel RakiaCallChannel; typedef struct _RakiaCallChannelPrivate RakiaCallChannelPrivate; typedef struct _RakiaCallChannelClass RakiaCallChannelClass; struct _RakiaCallChannelClass { TpBaseMediaCallChannelClass parent_class; }; struct _RakiaCallChannel { TpBaseMediaCallChannel parent; RakiaCallChannelPrivate *priv; }; GType rakia_call_channel_get_type (void); /* TYPE MACROS */ #define RAKIA_TYPE_CALL_CHANNEL \ (rakia_call_channel_get_type ()) #define RAKIA_CALL_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ RAKIA_TYPE_CALL_CHANNEL, RakiaCallChannel)) #define RAKIA_CALL_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ RAKIA_TYPE_CALL_CHANNEL, RakiaCallChannelClass)) #define RAKIA_IS_CALL_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), RAKIA_TYPE_CALL_CHANNEL)) #define RAKIA_IS_CALL_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), RAKIA_TYPE_CALL_CHANNEL)) #define RAKIA_CALL_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ RAKIA_TYPE_CALL_CHANNEL, RakiaCallChannelClass)) void rakia_call_channel_hangup_error (RakiaCallChannel *self, TpCallStateChangeReason reason, const gchar *dbus_reason, const gchar *message); G_END_DECLS #endif /* #ifndef __RAKIA_CALL_CHANNEL_H__*/ telepathy-rakia-0.8.0/Makefile.am0000644000175000017500000000121512223047264013561 00000000000000# # Makefile.am for telepathy-rakia/src # # Copyright (C) 2006,2008 Nokia Corporation # Contact: Mikhail Zabaluev # Licensed under LGPL. See file COPYING. # # ---------------------------------------------------------------------- # Automake options ACLOCAL_AMFLAGS = -I m4 # ---------------------------------------------------------------------- # Build targets SUBDIRS = \ tools \ rakia \ extensions \ data \ docs \ m4 \ src \ tests include tools/lcov.am LCOV_CHECK_ARGS = CHECK_TWISTED_SLEEP=6 DISTCHECK_CONFIGURE_FLAGS = --disable-debug --enable-gtk-doc clean-local: lcov-clean include tools/telepathy.am telepathy-rakia-0.8.0/ChangeLog0000644000175000017500000134260512223050363013305 00000000000000commit e5e015574805612dead3fc079b6c95b7c9cfef0a Author: Simon McVittie Date: 2013-10-02 17:58:06 +0100 0.8.0 commit 999de507910e3e78d3c91e518318f123c10f346e Author: Simon McVittie Date: 2013-09-17 10:50:03 +0100 Disable warnings about deprecated functions for stable branch Since this is a stable branch, we're unlikely to fix uses of deprecated functions, so we shouldn't warn about them. To be reverted in the 0.9 branch. commit 414594e993816ba995434aa108edd0e547eeb5f5 Author: Simon McVittie Date: 2013-09-10 12:37:55 +0100 prepare release commit df042648e79ab16b4e56317044c0c67a2837f061 Author: Simon McVittie Date: 2013-08-07 17:09:03 +0100 NEWS so far for 0.7.5 Enough has changed here that I want a release candidate before 0.8.0. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=67872 Signed-off-by: Simon McVittie Reviewed-by: Guillaume Desmottes commit 0ac48f0ae588dd508ba60c01430a44124ce4dc6c Author: Simon McVittie Date: 2013-08-07 17:10:28 +0100 Update telepathy.am from Gabble 0.18.1 to fix out-of-tree and parallel releases I left out the bit that checked that gtk-doc was enabled, because we don't have gtk-doc in Rakia. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=67872 Reviewed-by: Guillaume Desmottes [commit message amended to what I said on the bug -smcv] Signed-off-by: Simon McVittie commit 47ec8244fcf304d961e065d534f4c0fd8fb48db2 Author: Simon McVittie Date: 2013-08-07 17:08:33 +0100 test-message: make the test pass again This was wrongly asserting that Text channels only had the Destroyable interface, and regressed when we fixed the bug that the Messages interface was missing. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=67872 Signed-off-by: Simon McVittie Reviewed-by: Guillaume Desmottes commit 7bc44577994b85f95bd4e6f807980abb79537e8b Author: Simon McVittie Date: 2013-08-07 17:03:53 +0100 Run regression tests under the run-test.sh "driver" As well as making the tests pass under Automake 1.13, this lays the groundwork for OSTree-style "installed tests" later. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=65290 Bug: https://bugs.freedesktop.org/show_bug.cgi?id=67872 Signed-off-by: Simon McVittie Reviewed-by: Guillaume Desmottes commit 2410db1bb1602cf2dc72a629c2a84b4e1629b6bb Author: Simon McVittie Date: 2013-08-07 16:30:27 +0100 Import run-test.sh.in from Gabble 0.18.1 I'm copying it in verbatim, to make the changes made to adapt it to Rakia easier to review. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=65290 Bug: https://bugs.freedesktop.org/show_bug.cgi?id=67872 Reviewed-by: Guillaume Desmottes [commit message previously said 'master' but 0.18.1's is identical -smcv] Signed-off-by: Simon McVittie commit 9ac148e7ba1186e8d6f2eb7d8c5bffb0da608f57 Author: Simon McVittie Date: 2013-08-07 16:16:13 +0100 .gitignore: automake 1.13 copies in /test-driver Gabble commit 2a54c7cd0, where it was reviewed by Xavier. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=65290 Bug: https://bugs.freedesktop.org/show_bug.cgi?id=67872 Signed-off-by: Simon McVittie Reviewed-by: Guillaume Desmottes commit 4af2c92e8056464376351b1499f86b414d2bcbdb Author: Alban Crequy Date: 2013-07-24 14:28:26 +0100 Text channels: add Channel.Interface.Messages in the interface list The 'Channel.Interface.Messages' interface is already supported in Rakia's text channels but it is wrongly not listed in the 'Interfaces' property. It causes handlers such as Empathy to think it is not implemented and to discard text channels. Reviewed-by: Xavier Claessens commit b0c0f85511656db0608ef4aa7412eee72b2d672a Author: Simon McVittie Date: 2013-06-03 16:06:15 +0100 Stop using handle qdata The handles now live as long as the connection, so there's no point in trying to bind to their lifetime; just keep a hash table. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=62840 Reviewed-by: Mikhail Zabaluev commit a0ed7591eac1b6987c726191ced42b5f8fa11efa Author: Simon McVittie Date: 2013-06-03 15:22:39 +0100 Initialize libdbus for thread safety Bug: https://bugs.freedesktop.org/show_bug.cgi?id=54972 Signed-off-by: Simon McVittie Reviewed-by: Xavier Claessens commit a942b597feb553eb72d1d984741b35e91c94aae8 Author: Simon McVittie Date: 2013-06-03 15:31:26 +0100 Avoid having two of the same set of commands run in parallel A rule like this: _gen/x.c _gen/x.h: prerequisites $(AM_V_GEN)x-generator doesn't consider x.c and x.h together. Instead, it expands to two rules, one to generate x.c and one to generate x.h, which happen to run the same commands. This means that in the worst case, you can end up running x-generator twice in parallel, and they'll race with each other and overwrite or delete each other's output. Based on commit 36c2a545c from telepathy-glib. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=64285 Signed-off-by: Simon McVittie Reviewed-by: Xavier Claessens commit feb24fdaa4a79ba96caa14b9572e3f1787a51955 Author: Simon McVittie Date: 2013-06-04 12:08:31 +0100 Update with-session-bus.sh from telepathy-glib Bug: https://bugs.freedesktop.org/show_bug.cgi?id=63119 commit 9a7aeb5a81dbb4fd000c17bcf34929513a35067e Author: Brian Pepple Date: 2013-03-27 20:01:51 -0400 Remove deprecated macros. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=62839 Reviewed-by: Simon McVittie [added AC_PREREQ bump to 2.60 for AC_PROG_MKDIR_P -smcv] commit b0d9f44e34d9a86efa80ad1d51551a08273437f8 Author: Simon McVittie Date: 2012-05-10 13:31:37 +0100 Stop refcounting handles They've been "immortal" since before telepathy-glib 0.14. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49732 Signed-off-by: Simon McVittie Reviewed-by: Xavier Claessens commit 1edfab19f5c3abb4bc985af35dcceea82a65e7f3 Author: Simon McVittie Date: 2012-05-10 13:18:26 +0100 Use tp_cm_message_set_sender instead of deprecated tp_message_set_handle Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49732 Signed-off-by: Simon McVittie Reviewed-by: Xavier Claessens commit 69fcfb759d7c24a67729ccafcab0f21abebca055 Author: Simon McVittie Date: 2012-05-10 13:18:12 +0100 Use tp_cm_message_new instead of deprecated/misleading tp_message_new Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49732 Signed-off-by: Simon McVittie Reviewed-by: Xavier Claessens commit fdc35c8bf08e133eb32b13cf7d0ced32c6193252 Author: Simon McVittie Date: 2012-05-10 12:55:05 +0100 Replace deprecated TP_ERRORS with TP_ERROR Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49732 Signed-off-by: Simon McVittie Reviewed-by: Xavier Claessens commit d108651b68ddf0ef6680df42fd64d406e9077725 Author: Simon McVittie Date: 2012-05-09 18:56:06 +0100 Apply GLib deprecation/availability version checks Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit 46e0f63e59df3cbf2a8c5f49b32b48b233f45e19 Author: Simon McVittie Date: 2012-05-09 19:18:33 +0100 Consistently include config.h in every .c file, first Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit 7883be2ec43dda0f7b4a30cf769779e366aaa905 Author: Simon McVittie Date: 2012-05-09 19:12:57 +0100 Enable warnings about suspicious signed/unsigned comparisons, and fix them Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit 61fbe65e4892f020dc743155fcca04c8dfc39221 Author: Simon McVittie Date: 2012-05-09 19:09:17 +0100 Switch on warnings about prototypes, and fix them Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit aa65a18e154430b385a89f0919c56964d9720912 Author: Simon McVittie Date: 2012-05-09 19:00:53 +0100 Eradicate trailing whitespace after backslash (Automake warns about it) Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit 9125942834db3a6c37d62b5fb1e49a1a9de0280a Author: Simon McVittie Date: 2012-05-09 18:58:03 +0100 Link with ld --no-copy-dt-needed-entries if available Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit 22e8917948e15000373542b30808f6a5873012d2 Author: Simon McVittie Date: 2012-05-09 18:55:47 +0100 Import error-control and -Werror options from telepathy-glib For the moment I've disabled missing-prototypes, sign-compare and strict-prototypes - they should be re-enabled. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit e579c1a264856ede16a14e64e8437246281be1a4 Author: Simon McVittie Date: 2012-05-09 18:43:16 +0100 configure.ac: make external package checks considerably simpler PKG_CHECK_MODULES without a third and fourth argument already issues an error if the package is missing, and its error messages are better than ours. Also, we don't need to AC_SUBST the CFLAGS or LIBS, the macro already does that for us. Also, stop ignoring the error (!) if dbus-1 or dbus-glib-1 is missing. Finally, stop underquoting. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725 Signed-off-by: Simon McVittie Reviewed-by: Mikhail Zabaluev commit 62a8e7337b6d678e5293fbfe713f3d1806003331 Author: Ionut Biru Date: 2012-05-09 17:34:10 +0000 Check for gio to avoid linking issue /usr/bin/ld: note: 'g_inet_address_new_from_string' is defined in DSO /usr/lib/libgio-2.0.so.0 so try adding it to the linker command line Signed-off-by: Ionut Biru Reviewed-by: Simon McVittie commit 3f1686e07c2d8cb4204cf8fba27c46aadc421740 Author: Olivier Crête Date: 2012-05-08 13:01:55 -0400 Version 0.7.4.1 commit fa9533044094a2f13ce048ce76259a70880e86fa Author: Olivier Crête Date: 2012-05-08 12:57:00 -0400 Version 0.7.4 commit 0d032e114d76461f33dfd1138f3be5f5e9a4403c Merge: 8cb2b73 86f1d77 Author: Olivier Crête Date: 2012-05-08 12:51:51 -0400 Merge branch 'call1' commit 8cb2b73e711e86dd2efeb73b20fc3973ef8683c0 Author: Simon McVittie Date: 2012-05-07 19:49:39 +0100 Set G_MESSAGES_DEBUG during testing The same as Gabble commit cbfa9d06. commit 86f1d77943a377053f06d898767535f36a3f0a24 Author: Olivier Crête Date: 2012-04-05 20:38:52 -0400 Transform TP reason into appropriate SIP reasons commit b82012fae3c5a5425b5ae1784e15c9a0ed029f5b Author: Olivier Crête Date: 2012-04-05 19:43:42 -0400 Remove dead code commit 93d219be3ce3dcfa7aad737bb401e3035d261c6c Author: Olivier Crête Date: 2012-04-05 19:43:08 -0400 Make sure nua_op is NULL before ending the sip session This way we can be sure that we've closed the call correctly. commit 48e2310d2d0f10b2107b91c2235c5ccc703008b6 Author: Olivier Crête Date: 2012-03-26 17:20:59 -0400 Don't wait for codecs to publish Endpoint on incoming m= We wait for the codecs to publish an Endpoint only if the candidates and codecs have changed on an on-going call. with-session-bus-30231.pid commit 363d9e01e86f9390ea9e2217e0a28f9cd4ce8d86 Author: Olivier Crête Date: 2012-03-22 17:25:47 -0400 Don't repeat forward declarations The confuse some weaker compilers. commit 36bc0cba71fdf480c32cc30614448fe811fff64f Author: Olivier Crête Date: 2012-03-20 18:45:30 -0400 Convert SIP status codes to TpCallStateChangeReason on Ended commit 472b33b3f9a88738ffd28775948b3d6b2a93d265 Author: Olivier Crête Date: 2012-03-20 15:55:59 -0400 Bump tp-glib required version to 0.17.6 commit 35af7caa265fba5000025163425a6f1f0186a896 Author: Olivier Crête Date: 2012-03-15 22:02:26 -0400 Add test for remote addition of m= commit 7d7028b8bad8372a8f8c40e8bddf7c4dd403ac24 Author: Olivier Crête Date: 2012-03-02 19:50:03 -0500 Put all direction control code in the stream Also, the Content is set on the Stream at creation time commit 20dbc5534e6e4df88717d83a3c070f1377885560 Author: Olivier Crête Date: 2012-03-02 19:48:01 -0500 Fix the cases when a media is removed and then re-added Also simplify the add_media function a bit commit aa458fd5de4857e6b6d6995916295f56b2d10855 Author: Olivier Crête Date: 2012-03-02 19:45:42 -0500 Add function to stringify a RakiaDirection commit 33f839682a8b35d3a4f16b303e19404193acd82a Author: Olivier Crête Date: 2012-03-01 21:52:22 -0500 Add test for adding a content while held commit 8a1da6094f792ba54f4ea001f4accbf6e91e6a71 Author: Olivier Crête Date: 2012-03-01 20:35:32 -0500 Add test for receiving failure.. and make it work commit 06c35847ab427319ed9668faf55ea1926bbd2d91 Author: Olivier Crête Date: 2012-03-01 20:15:10 -0500 Add test for sending failure commit 08dbfffc687d827316c00ef370b4d7c205dad79e Author: Olivier Crête Date: 2012-03-01 18:44:47 -0500 Add tests for failing to unhold commit fb20a3fed62ba2ea18b07a542c29086710691583 Author: Olivier Crête Date: 2012-03-01 18:44:03 -0500 Call: Set the streams to sending when the remote side accepts Also add some tests commit d90b713b5198cb6e0bb3e4c79b99198dec122806 Author: Olivier Crête Date: 2012-02-29 15:36:44 -0500 Remove old streamed media files commit 1d3e7ce04fa738443b382455625503d2d258ddfe Author: Olivier Crête Date: 2012-02-24 21:53:28 -0500 Update copyright dates commit b18e93671acfa7cc8407cc081ce5fc56abf8a364 Author: Olivier Crête Date: 2012-02-24 21:52:02 -0500 Remove stray g_debug commit e8bc26e300582652b392341569403bf58dcbbd6c Author: Olivier Crête Date: 2012-02-24 21:41:07 -0500 Hangup call on receiving error if can't request receiving commit 27fe5141c7a7ebf3873fc1ffde568481a42ae860 Author: Olivier Crête Date: 2012-02-24 21:29:38 -0500 CallStream: Disable direction changes if mutable-contents=false commit f43819371c088e55c48bf5482825dcc68ced199e Author: Olivier Crête Date: 2012-02-24 21:21:30 -0500 Rename DEBUG=media-channel to media commit d3a420e6793ecad9e97c924c8b679e9fd783f8e0 Author: Olivier Crête Date: 2012-02-24 21:19:14 -0500 CallStream: Implement media error reporting commit 49081da1efee84944300e2480fb831b4b7a071ed Author: Olivier Crête Date: 2012-02-24 21:18:51 -0500 CallStream: Set CanRequestReceiving based on MutableContents commit 4395cebd5a8e10397a5249311208a846a4f1d347 Author: Olivier Crête Date: 2012-02-24 20:35:13 -0500 Add valgrind suppressions commit 65707a304bb55a546d79be737d9145cd4b891da9 Author: Olivier Crête Date: 2012-02-24 20:34:50 -0500 Fix memory leaks found by valgrind commit 09069b773167ac1519ef8f4c2d2fd823b090c8e3 Author: Olivier Crête Date: 2012-02-24 19:33:46 -0500 Set the resolved stun server commit 4e15317ab00c4fc0b4ea16efd8eab3b479e07e22 Author: Olivier Crête Date: 2012-02-24 18:43:10 -0500 It's rawudp, so assume we're always connected Because rawudp does not have a concept of connection. commit ccf9654e5b987a552660769d1649a93d5401acb6 Author: Olivier Crête Date: 2012-02-24 15:48:23 -0500 Only reject codecs on the proper error commit 8517957e4d266351eb1dd0e0b2e8834e6a163248 Author: Olivier Crête Date: 2012-02-23 21:54:21 -0500 Make Hold/Unhold work commit 86ded282b0416ab12583e1da0d21670aac632b6d Author: Olivier Crête Date: 2012-02-23 19:24:24 -0500 Make it possible to remove a content from a connected call commit 92a846c32180c0ce51a4862b80b5159261d45b98 Author: Olivier Crête Date: 2012-02-22 16:15:45 -0500 Make it possible to add a content to a connected call commit 7dc9846458c8598793b6f42f839d256367ece9f8 Author: Olivier Crête Date: 2012-02-22 16:13:38 -0500 Use generic function to check the direction in an sdp block commit 2ef6bf1d347df4b263feca689fb98ffe68bbf6ba Author: Olivier Crête Date: 2012-02-22 16:12:31 -0500 Rename remote_codecs to the more accurate remote_codec_offer commit 9e13142105e97d34ea7dbf449587d0b4f7e02f64 Author: Olivier Crête Date: 2012-02-21 21:17:24 -0500 Check for direction when verifying SDP commit 6cd12d15d12b4a88f05cb54c27b7867e551194ab Author: Olivier Crête Date: 2012-02-17 20:01:33 -0500 Make basic test work with both audio and video commit f21e7cda15a7326b0312789dedbeda57f2f6a8b7 Author: Olivier Crête Date: 2012-02-16 21:36:19 -0500 Implement RequestReceiving commit 002852b06ae3830ad2f15d81e0d61ffdfb06b98b Author: Olivier Crête Date: 2012-02-16 17:19:08 -0500 Make AddContent take the initial direction commit 10cddfb8a7fc6780d2ae0d26550eebda4f632455 Author: Olivier Crête Date: 2012-02-14 16:08:19 -0500 Make SetSending work, also add tests for it commit 40769c349d7cdc94d71b1d65e5e6dbf62baa8966 Author: Olivier Crête Date: 2012-02-13 18:50:54 -0500 Make more of the tests base class work with multiple streams/contents commit 01c9be9498fcc81573f9a05ad683c93345570538 Author: Olivier Crête Date: 2012-02-13 18:50:29 -0500 Correctly identify remote hold commit 997315eefccb118235c1658983e14070d8865acf Author: Olivier Crête Date: 2012-02-13 17:45:38 -0500 The Media GPtrArray can contain NULLs, so allow them commit 469c35c7a6f3af4174f6ba4054562d1bdc4f0769 Author: Olivier Crête Date: 2012-02-13 17:45:14 -0500 Don't leak the stream commit dac24aa2e69b9b16b1a54f2bb35555fd10931932 Author: Olivier Crête Date: 2012-02-13 15:33:19 -0500 Port the Ringing/Queued test to their own test commit 06e3fdff22563583f0e3dc3279de23bde4d8de54 Author: Olivier Crête Date: 2012-02-13 15:00:04 -0500 Add base class for Call tests commit 682e06632120f35de16728226b87a3193ea31f33 Author: Olivier Crête Date: 2012-02-10 15:08:51 +0100 Factor out the requestable channel classes test commit 6dc51e5bbe1c9a2a46e489967a94d366b35fe65e Author: Olivier Crête Date: 2012-01-31 14:36:12 +0000 Port to Call1 commit ac815e6d8072d1cb2cf5e27ea8516d125809e473 Author: Olivier Crête Date: 2012-01-23 14:13:56 -0500 Removed StreamdMedia support from MediaManager commit 8194984de444b80a5129e547272b1f984234ea1e Author: Olivier Crête Date: 2012-01-23 14:08:22 -0500 Only build Call commit 7a4a3594f86445313f49314a8fbde9c63eb26da3 Author: Olivier Crête Date: 2012-01-13 20:12:03 -0500 WIP: Factor out Sip code to SipSession/SipMedia commit e0b0f82852ea73743c31b0ccf854bc438e7fcb1a Author: Olivier Crête Date: 2012-01-10 17:51:53 -0500 Add SipSession/SipMedia abstractions commit b495f29113a05ed4aaa57546cbb3ef3911e61c9a Author: Olivier Crête Date: 2012-01-10 16:45:49 -0500 Accept MEMBERS_CHANGED_DETAILED that the recent tp-glib base classes set commit e7761266636df6eed39104798895ed701b00c866 Author: Olivier Crête Date: 2012-01-10 16:45:10 -0500 Force transport to udp It's all that Twisted supports commit 71aeae7522d43cdfc226936bff96909b5a6cf323 Author: Olivier Crête Date: 2012-01-06 19:44:47 -0500 Port MediaManager to use Call instead of StreamedMedia commit 909ac13ef3b102be8f960a955187e69a9d3e9a82 Author: Olivier Crête Date: 2012-01-06 18:15:21 -0500 Add empathy Channel/Content objects commit 3deafd75ec03b80324d4b1fa05abac22807b6647 Author: Xavier Claessens Date: 2011-11-17 10:20:46 +0100 Fix set but not used build warning commit 9ec9fd41456f199d95d05a0d29f040a169039d24 Author: Xavier Claessens Date: 2011-11-16 15:59:04 +0100 Use _unref instead of _free _destroy when possible.unref Replace g_(ptr_)array_free (foo, TRUE) and g_hash_table_destroy with respectively g_(ptr_)array_unref (foo) and g_hash_table_unref. I used this command to generate this patch: for f in `find -name "*.c"`; do sed -i $f -re 's/g_ptr_array_free \(([^ ,]+), TRUE\)/g_ptr_array_unref \(\1\)/'; done See Danielle's blog for explanation of possible bug _free can do: http://blogs.gnome.org/danni/2011/11/16/mistakes-with-g_value_set_boxed/ commit 3785f4686c084558b0b693c7d625088efe432d73 Author: Xavier Claessens Date: 2011-11-16 15:58:50 +0100 Add coding style check for g_hash_table_destroy and g_array_free usage commit 267db8394c7b8be25daa72674eb088b845c15ead Author: Mikhail Zabaluev Date: 2011-10-27 20:22:09 +0300 Bump nano version to 0.7.3.1 commit 9d4a4f4bbc00d0b77c4edac518da67fc9064c21f Author: Mikhail Zabaluev Date: 2011-10-27 20:06:10 +0300 Version 0.7.3 commit 4f995f46a7a658796f23f23179476a3bdd211300 Author: Mikhail Zabaluev Date: 2011-10-27 11:29:02 +0300 Rename the connection manager service name back to sofiasip The .manager file refers to that name and even the service file is named that way. commit 7b7442e4a17792dfa6fbfc1f93c72350d08ccee3 Merge: 90ea350 3af8862 Author: Mikhail Zabaluev Date: 2011-09-19 16:11:21 +0300 Merge branch 'quench-pending-send' commit 3af886220f3132c36dcc86f3f00e80dcf89eaf9f Author: Mikhail Zabaluev Date: 2011-09-19 14:40:22 +0300 Clear pending send flag if its stream direction is disabled When a stream direction is requested to be off by either party, its associated pending send flag has no reason to be set any longer. commit 90ea350fca5a0267fb76dc807c95ccd08c66c8e4 Author: Mikhail Zabaluev Date: 2011-09-06 18:44:33 +0300 Bumped nano version to 0.7.2.1 commit 6788ab7db83b4677fc2d1d999d440b640354e861 Author: Mikhail Zabaluev Date: 2011-09-06 18:29:31 +0300 Version 0.7.2 The NEWS file is updated with the history of 0.6.x releases from the telepathy-sofiasip-0.6 branch. commit bfbf7a111a195cc2e4028c2f537cff29155f880b Author: Mikhail Zabaluev Date: 2011-09-06 17:25:20 +0300 Renaming of SofiaSIP to Rakia in various comments commit 4d58eff541bc9b2c9fe2e1cf4b9aeaa654cc69ed Author: Mikhail Zabaluev Date: 2011-09-06 17:22:25 +0300 Use the utility function rakia_version_string() for User-Agent value Turn it into "Telepathy-Rakia/". commit 806e28809f2b2d0121ef36ae9d327b60d59fd53b Author: Mikhail Zabaluev Date: 2011-09-05 11:52:25 +0300 Log more stuff using per-session and per-stream convenience formatting commit ddcf6bed8619780e87c8491345a6bd0217529b06 Author: Mikhail Zabaluev Date: 2011-09-05 11:05:03 +0300 Fixed up session state formatting commit 6acdc05cf49cd03a1ec8058eae5a4f2d043323e9 Merge: cf94024 cb9453b Author: Mikhail Zabaluev Date: 2011-09-05 11:01:37 +0300 Merge branch 'master' into debug-lite commit cb9453be492f28cf7b12c53f10b639ee9c56ed0f Author: Mikhail Zabaluev Date: 2011-08-25 15:46:07 +0300 Exercise StartTones and StopTones in tests commit 31cf52edc55fab3843e8b664a6da158afdb0aba1 Author: Mikhail Zabaluev Date: 2011-08-25 15:42:04 +0300 Check the argument of StoppedTones commit e033fa1338722ee7b7c584af03fbebe36aeff16d Author: Mikhail Zabaluev Date: 2011-08-24 17:34:48 +0300 Make sure codecs are properly intersected in the outgoing call test It works regardless, but the session state turns out wrong internally. Also simulate stream being connected only after the intersection. commit 2129ffbadd2194a6df94d179a61a0169b01eb498 Author: Mikhail Zabaluev Date: 2011-08-24 17:32:52 +0300 Exercise DTMF.MultipleTones in test, complete with deferred tones commit a3ff78f02af75261d5b322610a679a191082e927 Author: Mikhail Zabaluev Date: 2011-08-24 15:36:03 +0300 Test that initial tones are signalled as playing upon call establishment commit 70c4e20de8502ff86105acacdc3928645ffe4f62 Author: Mikhail Zabaluev Date: 2011-08-24 15:22:53 +0300 Factored the MediaSignalling audio session mockup into a voip_test utility commit 3f3a3dfd968749732ac8f15f575467c15686e9ef Author: Mikhail Zabaluev Date: 2011-08-24 14:14:45 +0300 Add a test for DTMF InitialTones property commit 3d61bd0debe0dba5056fad3227c84cac43865e93 Author: Mikhail Zabaluev Date: 2011-08-24 14:12:21 +0300 Set channel property DTMF.InitialTones in channel requests Also advertise and support it in the requestable channel classes. commit 0aae5bfde0c9b92ddcc760eeab09b225360804bb Author: Mikhail Zabaluev Date: 2011-08-24 11:32:44 +0300 Play initial DTMF tones when the channel's audio stream is connected commit bead97d9f05bf9d1ca10a803156f8fc702a92267 Author: Mikhail Zabaluev Date: 2011-08-24 11:29:45 +0300 Lightweight access to the private structure of RakiaMediaSession commit 8b5b9ee192fae3661292d8664d827f55fb4ee44d Author: Mikhail Zabaluev Date: 2011-07-12 16:27:39 +0300 Updated Channel.Interface.DTMF with recent spec additions commit 3c4cd0e926209b1f7fbfe23467da78875022cb7f Author: Mikhail Zabaluev Date: 2011-06-16 19:52:52 +0300 Correct namespacing for a generated enum type commit 0af89bc46b75ed0dfefa968c127362f39e46cf30 Author: David Laban Date: 2011-04-13 15:59:47 +0100 fix typo so distcheck passes again commit 273dd9c975c3ec303f5b394c4652ab25970b4490 Author: David Laban Date: 2011-04-07 14:01:40 +0100 Restore TPSIP_* environment variables' functionality If RAKIA_* environment variables exist then we prefer them. commit ec92b4aedc7261e4af84d8e44f56da39d6033ec4 Author: David Laban Date: 2011-06-15 16:51:06 -0400 s/TPSIP/RAKIA/g How did we fail to spot this during 'Rename project to telepathy-rakia' (8dcddb61752cfa140df30c94b54bd02684419323)? That's embarassing. Also, fix whitespace in README commit ea149b859510465782c57abf88828c9fbb16050b Author: Mikhail Zabaluev Date: 2011-06-14 21:20:50 +0300 Nano version 0.6.8.1 commit f5207b902a50ad35019956f042beebe21cffef46 Author: Mikhail Zabaluev Date: 2011-06-14 21:08:50 +0300 Version 0.6.8 commit d547bb11d8eb2fb9dff19b812f6856dd12e9c254 Merge: d960b6a dfc026f Author: Mikhail Zabaluev Date: 2011-06-14 20:54:21 +0300 Merge branch 'codec-updates' into trunk commit dfc026f67a3e82bdb785958e5ad0a808568372a5 Author: Mikhail Zabaluev Date: 2011-06-07 19:01:41 +0300 Corrected a doc comment commit 2ea9f5862806e91302af34c998966e01ab1c26f6 Author: Mikhail Zabaluev Date: 2011-06-01 13:02:50 +0300 Refactor handling of local codec information to avoid excessive re-INVITEs This change also removes non-intersecting codecs from SDP negotiations (fd.o #30434). Branches for some freak cases was removed, as they have not been seen occurring in the wild. commit cf94024c49bc64ca31961cb5895249ce0dc57048 Author: David Laban Date: 2011-05-31 17:43:25 -0400 fix whitespace commit 7372a4b1d58b13bfba98698ebc56e37d98d1cf38 Author: David Laban Date: 2011-05-31 17:07:45 -0400 make --disable-debug work (distcheck passes) commit 11f61e81ef70bd00d4c777522f882171795c7dfb Merge: 1bfaa66 c977579 Author: David Laban Date: 2011-05-31 16:45:55 -0400 Merge remote-tracking branch 'zabaluev/debug-lite' into test-debug Conflicts: rakia/debug.c rakia/debug.h rakia/media-session.c rakia/media-session.h rakia/media-stream.c commit 1bfaa66fc35c65183714225b861bf1ba6d255170 Author: David Laban Date: 2011-05-31 16:22:12 -0400 Don't skip the test if debugging is disabled commit ef8d5d16475dce2a82b59898615b265e57dc7422 Author: David Laban Date: 2011-05-31 15:33:06 -0400 Add test-debug.py Copied from gabble. This also requires a config.py in BUILT_SOURCES commit cacf971a900f6d30f92540f82db9dc48261e4994 Author: David Laban Date: 2011-05-31 11:53:25 -0400 Copy distcheck flags from gabble commit 960410f5887000c733b1967c39bc426aa58fedc4 Author: David Laban Date: 2011-04-13 15:59:47 +0100 fix typo so distcheck passes again commit ffb3d3654ff6229e232484f7f270d425178ecae6 Author: David Laban Date: 2011-04-07 14:01:40 +0100 Restore TPSIP_* environment variables' functionality If RAKIA_* environment variables exist then we prefer them. commit b59ebd6b72a3229e8bea86f1a0a741529d2c0fdb Author: David Laban Date: 2011-04-01 17:39:13 +0100 s/TPSIP/RAKIA/g How did we fail to spot this during 'Rename project to telepathy-rakia' (8dcddb61752cfa140df30c94b54bd02684419323)? That's embarassing. Also, fix whitespace in README commit d960b6a266e60e19480bb9f192448f05d8463463 Author: Mikhail Zabaluev Date: 2011-05-26 18:49:37 +0300 Use module-correct APIs to get the GSource from the sofia root commit 66f6b6d1f85382a341d59c7265b763d9f40b21f0 Author: Mikhail Zabaluev Date: 2011-05-27 11:07:20 +0300 Nano version 0.6.7.1 commit 409ba314750ff236b1cac4f000846046d66b6305 Merge: 923b867 2f3116d Author: Mikhail Zabaluev Date: 2011-05-26 19:10:28 +0300 Merge branch 'iphb-system-sync' into master Conflicts: src/sip-connection-helpers.c commit f13e2fcb5cf26a3693f7122b844a3304239f9b17 Author: Mikhail Zabaluev Date: 2011-05-23 14:50:33 +0300 Version 0.6.7 commit b21189d1215d02f0e1e40fc8e219b9738e1ac096 Merge: 01d10bf 2f3116d Author: Marco Barisione Date: 2011-05-23 14:23:55 +0100 Merge branch 'iphb-system-sync' into telepathy-sofiasip-0.6 Reviewed-by: Mikhail Zabaluev commit 2f3116dff3ac88c79c4de43470de558ef0a72456 Author: Marco Barisione Date: 2011-05-19 14:03:31 +0100 Synchronise the heartbeat wakeups with other applications commit a72612a0b52e7c6ccdbec5da5e060589383f21b7 Author: Marco Barisione Date: 2011-05-19 12:58:32 +0100 Depend on libiphb >= 0.61.31 The newer libiphb is needed to help synchronisation between multiple applications. commit 0f484ff84530777a6c18720b1389aa13e64d8e2e Author: Marco Barisione Date: 2011-05-19 12:57:19 +0100 Use pkg-config to check for iphb and use the right include path commit 923b867371c502a8228b749e03c9476edd730d5c Merge: 0f3bf0b 01d10bf Author: Mikhail Zabaluev Date: 2011-05-23 14:15:59 +0300 Merge branch 'verify-certs' into trunk Conflicts: src/sip-connection-manager.c src/sip-connection.c commit 01d10bf1deca680b64592314a009ecccacdb1d9d Author: Mikhail Zabaluev Date: 2011-05-20 16:25:42 +0300 Added connection parameter "ignore-tls-errors" The client should be able to circumvent the newly strict behavior, if they don't care about the security of their connection. commit c63db60141b7330cca797e601e2f1d39343191fd Author: Mikhail Zabaluev Date: 2011-05-10 18:27:38 +0300 Verify TLS certificates commit c226a317353c19f2987f037bc98229a33e4bde95 Author: Mikhail Zabaluev Date: 2011-05-10 18:26:38 +0300 Require sofia-sip 1.12.11 We need this to use TPTAG_TLS_VERIFY_POLICY. commit 0f3bf0b7b43016e84bc1c5f9448659c20bd0dcaf Merge: 2736821 b703283 Author: Mikhail Zabaluev Date: 2011-03-15 17:38:43 +0200 Merge branch 'keepalive-default' commit b7032831188d340407e858266d437bdfcfc42eb7 Author: Mikhail Zabaluev Date: 2011-03-07 18:34:23 +0200 Don't default the connection parameter "keepalive-interval" to zero, either commit c97757937ad35bbfa4104b37082965b87a1e27c1 Author: Mikhail Zabaluev Date: 2011-03-04 20:18:20 +0200 Moving log init/shutdown back to the connection manager lifecycle Doing the TpDebugSender business outside of the mainloop may not be such a bright idea. commit 024ce4dcbfd4b21c076cad79686cc2cb2adf37dd Author: Mikhail Zabaluev Date: 2011-03-04 19:44:00 +0200 Don't default the 'keepalive-interval' parameter to 0 (no keepalives) There is already support for NUA stack-defined default, we just failed to use it. commit 5d568b09068ee1705ed1e35f12044f97e5a1ee85 Author: Mikhail Zabaluev Date: 2011-03-04 19:13:31 +0200 Avoid formatting the log message if it isn't used anywhere commit 328cc9576e45558095460e43e345faf8e3bdcb6e Author: Mikhail Zabaluev Date: 2011-03-04 18:44:18 +0200 Better debug facilities for media session and stream commit fab41a3131b35a6ee3f56c587969aa57d225cf2c Author: Mikhail Zabaluev Date: 2011-03-04 17:48:49 +0200 Consolidated initialization and shutdown of logging The initialization and teardown of the debug sender and logging infra is moved to the main function of telepathy-rakia. The Sofia log override is now only exposed as the log handler itself. NOTE: API changes in rakia/debug.h commit 8ad2d857bb1012048003d24cfe6e5345ba7d82c3 Author: Mikhail Zabaluev Date: 2011-03-03 17:12:33 +0200 Use tp_debug_sender_add_message_vprintf in the logging function commit 9a2a9991fea610f64fe05ed8ffbfdb34d741360a Author: Mikhail Zabaluev Date: 2011-03-03 16:31:08 +0200 Improved a few debug messages commit b6fe22a2b7a086474c53472e853318f0c8527707 Author: Mikhail Zabaluev Date: 2011-03-03 16:29:36 +0200 Removed all direct usage of g_log facilities commit 2736821fc3332e887af8cd8196257d1d90e7957f Author: Guillaume Desmottes Date: 2011-03-02 16:46:22 +0100 add Messages properties to immutable properties commit f938304c112a00c33dbfb88aa2d6f66798e65bb6 Author: David Laban Date: 2011-02-22 15:07:09 +0000 Keep bus name as sofiasip This is to avoid breaking people when they upgrade. We can do the but name change as part of the telepathy-1.0 API break. Reviewed-by: Will Thompson commit d824fd6f9051aa1808424d536a2009ab63db2117 Author: Mikhail Zabaluev Date: 2011-02-14 18:22:04 +0200 Comment doc that STUN is used for media only commit 0edb5ebf4391d53214ab44284968e548f74d8faa Author: Mikhail Zabaluev Date: 2011-02-14 18:13:28 +0200 Smarter behavior of connection parameters 'discover-stun' and 'stun-server' 'discover-stun' is no longer ignored if 'stun-server' is set. If 'discover-stun' is set to true, 'stun-server' is now ignored. If 'discover-stun' is not set, 'stun-server' is used if that is set, otherwise 'discover-stun' defaults to true. Fixes: fd.o #34227 commit 13d1557121f2a20eb98b8b2d0786d57f1a35edb2 Author: Mikhail Zabaluev Date: 2011-02-15 14:42:41 +0200 Fix up a merge omission Maybe doing merge -s recursive -X ours was not such a good idea... commit 1e56054fc8f87fc65fd8bd032e23cfda4957ec72 Merge: 8dcddb6 2ff3e6a Author: Mikhail Zabaluev Date: 2011-02-15 13:43:28 +0200 Merge branch 'stunning-fixes' commit 2ff3e6a357852c88c09680b3c2fef3c9eea6b5b6 Author: Mikhail Zabaluev Date: 2011-02-14 18:22:04 +0200 Comment doc that STUN is used for media only commit f772fd727eb15fe90f4ae298c4f1dfbfa82b7445 Author: Mikhail Zabaluev Date: 2011-02-14 18:13:28 +0200 Smarter behavior of connection parameters 'discover-stun' and 'stun-server' 'discover-stun' is no longer ignored if 'stun-server' is set. If 'discover-stun' is set to true, 'stun-server' is now ignored. If 'discover-stun' is not set, 'stun-server' is used if that is set, otherwise 'discover-stun' defaults to true. Fixes: fd.o #34227 commit cfebf09323a44f2bc892f5eb48905466a2325afc Author: Mikhail Zabaluev Date: 2011-02-14 17:19:50 +0200 Don't do STUN SRV lookup on the IP address-based account URI Currently, only IPv4 addresses are supported, as is the case elsewhere. Added FIXME comments to add IPv6 support later. commit 8dcddb61752cfa140df30c94b54bd02684419323 Author: David Laban Date: 2011-02-12 10:03:25 +0000 Rename project to telepathy-rakia For the curious, these are the commands you need: git clean -d git mv tpsip-extensions extensions git mv tpsip rakia sed -i \ -e 's/libtpsip-extensions.la/librakia-extensions.la/g' \ -e 's/libtpsip_extensions_la/librakia_extensions_la/g' \ -e 's/tpsip-extensions/extensions/g' \ -e 's/sofiasip/rakia/g' \ -e 's/tpsip/rakia/g' \ -e 's/Tpsip/Rakia/g' \ -e 's/SOFIASIP/RAKIA/g' \ */*.[ch] .gitignore configure.ac $(find -name 'Makefile.am' ; find -name '*.py' ; find -name '*.in') git mv ./docs/telepathy-sofiasip.8.in ./docs/telepathy-rakia.8.in git mv ./src/telepathy-sofiasip.c ./src/telepathy-rakia.c git mv ./data/org.freedesktop.Telepathy.ConnectionManager.sofiasip.service.in \ ./data/org.freedesktop.Telepathy.ConnectionManager.rakia.service.in git mv ./tests/twisted/tools/sofiasip.service.in \ ./tests/twisted/tools/rakia.service.in ./autogen.sh && make distcheck commit ada52bcb3064a5a7fa0e75038f4365b45376518c Author: David Laban Date: 2011-02-12 09:46:57 +0000 tpsip/Makefile.am: Add missing \ aka fixup! conn-aliasing: rename as tpsip/connection-aliasing make distcheck passes again commit 359b4003726927a1820c8953a06b16bad3dfe92c Author: David Laban Date: 2011-02-11 12:59:48 +0000 More ignore rules commit e2d72636a1a8a04026ba0a759bb7c4984ce4cc47 Author: David Laban Date: 2011-02-11 12:42:08 +0000 Don't distribute rm'd tpsip/signals-marshal.list aka fixup! Move src/sip-media-* to tpsip/media-* commit f8362aa74b63bab3b1dc8b9b6ab2076fe764908c Author: Pekka Pessi Date: 2011-02-03 19:04:20 +0200 tpsip_conn_heartbeat_init: use "sofia-root" property commit 3d4d139d64c1473a42986655e5930175d30bfa70 Author: Pekka Pessi Date: 2011-02-02 19:53:19 +0200 Add tpsip_version_string () commit 1aaf4b3483608bd24d4589c8fdd3012c8c5de3e9 Author: Pekka Pessi Date: 2011-02-07 20:23:22 +0200 telepathy-sofiasip.c: use tpsip Sofia log handling commit 92a9e89842b9308a11613760934eeaf8d80b470a Author: Pekka Pessi Date: 2011-02-07 20:19:56 +0200 tpsip/debug: add Sofia log handling commit 907f1d8088a2bd8dc760db03a90b599920f25de4 Author: Pekka Pessi Date: 2011-02-07 21:59:09 +0200 Move src/media-factory to tpsip/media-manager commit d34116f1aa49063c14117ece0a69bc7527b11d52 Author: Pekka Pessi Date: 2011-02-07 21:39:41 +0200 Move src/sip-media-* to tpsip/media-* commit 91b852d54264a37b8b2d88e5d2c084325f6b30a6 Author: Pekka Pessi Date: 2011-02-07 21:30:34 +0200 Move src/text-factory to tpsip/text-manager commit 674e943231bf519168f59769b4f135c8ae8cd255 Author: Pekka Pessi Date: 2011-02-07 20:36:44 +0200 Move src/sip-text-channel to tpsip/text-channel commit 331154bb38f00852103bfcf5c95320ee1305f50f Author: Pekka Pessi Date: 2011-02-02 19:52:11 +0200 Move src/debug to tpsip/debug commit 262656c55e4112d36005426cd5985df3c94a74f7 Merge: 26eae76 9b8b2a7 Author: Pekka Pessi Date: 2011-02-07 19:58:07 +0200 Merge branch 'tpsip-base-connection' commit 26eae76d331cfa19edfc35dabf258a353904bd2a Author: Mikhail Zabaluev Date: 2011-02-02 18:32:22 +0200 Brushed up the README Removed obsolete information referring to libjingle. Updated information on building. More help on environment variables. commit 9b8b2a7a9d0a39557394c19d932603ac3a37dd40 Author: Pekka Pessi Date: 2011-02-01 01:07:55 +0200 sip-connection: remove functionality copied to TpsipBaseConnection commit c2becd941ca8ba98624b4622dd3d4d94e58345cf Author: Pekka Pessi Date: 2011-02-01 01:47:23 +0200 conn-aliasing: rename as tpsip/connection-aliasing TpsipConnectionAliasing is a GInterface implementing the Connection.Interface.Aliasing (for self handle). The new GInterface uses the property "alias" from Connection classes using the interface. commit 3d9b980d25b2c3ed1341ec7fcd799e4201a984d2 Author: Pekka Pessi Date: 2011-01-31 21:16:28 +0200 sip-connection-helpers: remove tpsip/handles functionality - tpsip_conn_get_contact_url replaced by tpsip_handle_inspect_uri - tpsip_handle_parse_from replaced by tpsip_handle_by_requestor commit a3359d8f6f1c7394ea693c18da79d3208d229afd Author: Pekka Pessi Date: 2011-01-31 21:13:26 +0200 conn-aliasing: use TpsipBaseConnection and tpsip/handles commit b88bcd9a6fb990d2ee91b72cbb4db2c80b111865 Author: Pekka Pessi Date: 2011-02-01 01:02:18 +0200 sip-media-session: use TpsipBaseConnection commit a363dde870d989473b1fcee596998ba20a8f3ec0 Author: Pekka Pessi Date: 2011-02-01 01:02:03 +0200 sip-media-channel: use TpsipBaseConnection commit 992e42d3a785465675e98f799d8070da3a16aa38 Author: Pekka Pessi Date: 2011-02-01 01:01:45 +0200 sip-text-channel: use TpsipBaseConnection commit d5b2c6b85a513694e3be8ab31bdc2e9012c6ddb3 Author: Pekka Pessi Date: 2011-01-31 21:13:39 +0200 protocol: use tpsip/handles commit ac6d9b82ded106e80b75d1a0198cf7daea8f1285 Author: Pekka Pessi Date: 2011-01-31 21:12:49 +0200 sip-connection: use tpsip/handles commit fb6825a550f8825962bc32fbedbbc401e92cb7d9 Author: Pekka Pessi Date: 2011-01-31 21:11:11 +0200 media-factory: use tpsip/handles commit d668e5dd9c09fd5c13b2e6ac06f5a905bd5f8c98 Author: Pekka Pessi Date: 2011-01-31 20:58:00 +0200 media-factory: use TpsipBaseConnection commit 89157182dcd9390a7a4fdd040c74401293972dfb Author: Pekka Pessi Date: 2011-01-31 20:52:48 +0200 text-factory: use tpsip/handles commit df7195bd6bf73cc5d4a8d056eecba1d244ae0218 Author: Pekka Pessi Date: 2011-01-31 17:05:00 +0200 text-factory: use TpsipBaseConnection commit 5544102fb3ecfca6d77b0ba049169cc60052c82b Author: Pekka Pessi Date: 2011-02-01 01:46:18 +0200 tpsip-base-connection: add nua callback Move the nua callback module src/sip-connection-sofia.c to tpsip/base-connection-sofia.c, using the new callback from sip-connection.c. commit 2ac200c8e3e4a0e573b2ffda6e5de834bf56c8c9 Author: Pekka Pessi Date: 2011-01-31 20:53:57 +0200 Derive TpsipConnection from TpsipBaseConnection TpsipBaseConnection implements TPSIP_TYPE_EVENT_TARGET and TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS. TpBaseConnection implements TP_TYPE_SVC_CONNECTION. commit 7842fdc032e068528b924226c7ed24ffd603257a Author: Pekka Pessi Date: 2011-01-31 17:32:55 +0200 tpsip/handles: add New SIP handle management functions: - tpsip_handle_ensure () - tpsip_handle_by_requestor () (replaces tpsip_handle_parse_from()) - tpsip_handle_unref () - tpsip_handle_inspect () - tpsip_handle_inspect_uri () (replaces tpsip_conn_get_contact_url()) Functions tpsip_handle_normalize() and tpsip_normalize_contact () are also moved to tpsip/handles. commit 92c23c73853783f34e861599391416bae37cbf5f Author: Pekka Pessi Date: 2011-01-31 17:09:27 +0200 tpsip/base-connection: add TpsipBaseConnection is an abstract base class for SIP connections. commit 253b4a1144888f7d6b72ff8217e56ba61d515c51 Author: Pekka Pessi Date: 2011-01-31 23:54:47 +0200 test-self-alias.py: check if Aliasing interface is visible in Contacts commit a5028ee9a77c8ed30f8fbc8ee4bc0aea09d1a46e Author: Pekka Pessi Date: 2011-02-01 00:57:31 +0200 Silence DeprecationWarnings from twisted sip commit 38c94348c26a1673d89f935ce36d6fa682af4277 Author: Mikhail Zabaluev Date: 2011-02-02 13:06:46 +0200 Nano version 0.7.1.1 commit b3d95a10e75eece58379c93308a88f58560a769e Author: Mikhail Zabaluev Date: 2011-02-01 21:15:06 +0200 Version 0.7.1 commit 0ec7a23893b4c85a359f6349578ed34cf5e595ea Author: Mikhail Zabaluev Date: 2011-02-01 21:34:26 +0200 voip_test is not a test script, move it to EXTRA_DIST commit 1f51b77c6df5e5af0bd6aca31927e842a4d86b72 Author: Mikhail Zabaluev Date: 2011-02-01 21:28:35 +0200 Added voip_test to dist files commit 95e060c7696c93d92b151651cff758015b5a9405 Author: Mikhail Zabaluev Date: 2011-02-01 21:14:07 +0200 Added Jonny Lamb and David Laban to the list of authors commit 54fbc7e90524cef4459a320ca631ecf294c8b0ec Author: Mikhail Zabaluev Date: 2011-02-01 20:20:55 +0200 Nano version 0.6.6.1 commit 45937162409c6a6c36d5c3d30e016a96c698a1d4 Author: Mikhail Zabaluev Date: 2011-02-01 20:14:54 +0200 Version 0.6.6 commit e4006c401c93e57b337249fd8c2891bff32dc894 Author: David Laban Date: 2011-01-31 18:47:01 +0000 Add test for fd.o:33716 commit b47726b065fb5e054bc2ab096755c989d294a3c1 Author: David Laban Date: 2011-01-31 19:08:19 +0000 remove references to twisted.words.xish commit e0b4d040e816d1918913bdebcdc156351a679476 Author: David Laban Date: 2011-01-31 19:00:38 +0000 Revert "Check for Python module twisted.words.xish as required for unit tests" This reverts commit dfb7be1f4d652d48ac001f9e496abd97006c1ba3. Sorry. That was sloppy of me. I don't actually use xpath. commit dfb7be1f4d652d48ac001f9e496abd97006c1ba3 Author: Mikhail Zabaluev Date: 2011-01-31 20:46:33 +0200 Check for Python module twisted.words.xish as required for unit tests commit df7937078faa3211a8eaae0342cd7bf297b4fc20 Merge: 776194c f69dc4b Author: Mikhail Zabaluev Date: 2011-01-31 20:37:37 +0200 Merge branch 'invite-from-self' commit 776194c93cc447aede374f011dff5b1d49b2b0ed Merge: abcfb59 2cf3c1e Author: David Laban Date: 2011-01-31 18:23:54 +0000 Merge remote branch 'alsuren/streamedmedia_tests' Reviewed-by: Will Thompson commit f69dc4be0e713eef64ecb65c84ded2fa357b39b9 Author: Mikhail Zabaluev Date: 2011-01-31 19:46:47 +0200 Reject incoming calls from the same URI as the local user (fd.o #33716) This is not supported in StreamedMedia channels, and an assertion in tpsip_media_channel_receive_invite() sees to it. commit c4cffddbaea180ba3fddebed81097c03e2cca959 Author: Mikhail Zabaluev Date: 2011-01-29 13:45:31 +0200 Nano version 0.6.5.1 commit a6c7d52dac100d5f9ea97c68e7197f6d41756435 Author: Mikhail Zabaluev Date: 2011-01-29 00:40:32 +0200 Version 0.6.5 commit abcfb59b2ae9613585515fd887f026591ffe77fd Merge: 9eb2013 68b99ed Author: Mikhail Zabaluev Date: 2011-01-28 21:18:51 +0200 Merge branch 'signed-param-fix' commit 68b99ed09a29fa567d0a49789389ba8b545d0226 Author: Mikhail Zabaluev Date: 2011-01-28 20:36:42 +0200 Changed the size parameter type to signed in tpsip_unquote_string() The special value of -1 implies that the type should be signed. commit caf244b6d1b38cc42291ce0697374fae6f5a4148 Merge: 8932d71 09dd7ac Author: Mikhail Zabaluev Date: 2011-01-28 20:54:36 +0200 Backported fixes to fd.o #31720 onto telepathy-sofiasip-0.6 commit 09dd7ac499d83eb40154c6415a77fa89cfaac880 Author: Simon McVittie Date: 2010-11-18 13:46:18 +0000 fd.o #31720: use TpDBusDaemon to export media streams commit 91e347eaf9e1a75b81943286c7308164663c9010 Author: Simon McVittie Date: 2010-11-18 13:46:06 +0000 fd.o #31720: use TpDBusDaemon to export media sessions commit 9486db40a0f0836b65d46ea925216126c6fe2709 Author: Simon McVittie Date: 2010-11-18 13:45:40 +0000 Backported fix to fd.o #31720: use TpDBusDaemon to export channel objects Backported to telepathy-sofiasip-0.6 commit 2cf3c1e745c27dd48d71b05e5daa68479333885b Author: David Laban Date: 2011-01-26 17:12:09 +0000 Fix group flags for streamedmedia calls. We start off with lots of flags, and then delete them as we work out what kind of channel we are, rather than trying to track what we need to add/remove over time. We should always have the right flags before we are advertised on the bus. Note that adding members to a channel made using Create isn't *strictly* correct way to do it, but it isn't special-cased in any of the code, and I don't want to set flags that are lies so I've just updated the tests accordingly. Also, converting the flags to their binary representation makes failed assertions a lot easier to debug (and I honestly don't care about speed). commit c10bee3f1c4f02f1ca758999ef420c21a4996443 Author: David Laban Date: 2011-01-26 15:35:03 +0000 sip-media-channel clean up group members Use tp_intset_new_containing() wherever it's sensible This makes sets with only one member simpler and less think-o prone. (We still use tp_intset_new() for groups with more than one member) Use better variable names for clarity. (We still use "set" in priv_session_state_changed_cb() to avoid too much code churn) commit 630113129f088d29aa4be60bcfbe66a3cd564a55 Author: David Laban Date: 2011-01-26 14:20:17 +0000 voip tests: BYE message needs a reply. Add to tests. commit e5bf266a20d817a22c70efc31fc5d34913c1f3df Author: David Laban Date: 2011-01-26 14:09:47 +0000 Fix review comments for tests. commit c40b48866b7bd04308b26725368304c555cc69fd Author: David Laban Date: 2010-12-07 19:53:37 +0000 add new tests to make check commit 3683f1b456ef9baa2fefc885fe1e458b769647bf Author: David Laban Date: 2010-12-07 18:39:31 +0000 Fix up incoming-basics.py * Same deal as outgoing-basics, but in one commit. * Also, expect the NewChannels signal rather than NewChannel. * Add context.send_message() and implement .incoming_call(), .ack() and .terminate() based on it. * FIXME #32189: group flags are borked. commit 8f241d940ecfcc366ce3dedb5b077d73d379965c Author: David Laban Date: 2010-12-07 18:09:33 +0000 Complete outgoing-basics.py sofiatest.py: * add sip headers to Events for convenience voip_test.py:VoipTestContext: * add {get, check}_call_sdp() * add accept() (secretly also records call-id) outgoing_basics.py: * Call NativeCandidatesPrepared() because RAWUDP requires it. * Expect sip-* events rather than stream-iq ones. commit 744205d25b59848c56902a4fdfd7134d575f8794 Author: David Laban Date: 2010-12-07 17:45:57 +0000 Update the groups interface when remote user accepts the call. commit 76cba776cacd54b3994a590e572b1a51c2217761 Author: David Laban Date: 2010-12-06 18:49:40 +0000 import incoming-basics from gabble commit 364ff37b08cc76841312b04450cb8de9541f2ada Author: David Laban Date: 2010-12-06 16:59:29 +0000 Don't call priv_outbound_call (self, 0) This previously happened if the client requested an anonymous streamedmedia channel, but doing so would cause a crash. commit 1de34ce405c9df7ea0953604ebfa19fc04b92f9d Author: David Laban Date: 2010-12-07 19:46:53 +0000 Make outgoing-basics test work up until the first network traffic event. * Change from gabbletest to sofiatest, and import bits of gabble's jingletest2.py as voip_test.py * Get rid of JingleProtocol args to tests * Change variable names s/stream/sip_proxy/ and s/jt2/context/ * Change jids to sip uris. * Don't restrict ordering of NewStreamHandler signal emission, when all sane StreamEngine implementations do state recovery anyway. * Early-return before we expect any network traffic * Channel.Type.Call is not a requestable type. * change test_all_dialects back to exec_test calls. Things I'm not sure about: * FIXME: 32189: group flags are borked. * Are sofiasip's pending send flags correct? commit 85b5c6a95151c73fbd8a62fd541cadbbc81bf32a Author: David Laban Date: 2010-12-03 18:54:36 +0000 implement tpsip_media_channel_get_handle() properly. commit a9f18ec9ffe748c2078886cbc51c28babc3ce944 Author: David Laban Date: 2010-12-03 16:38:38 +0000 initial import of outgoing-basics.py from gabble commit 63dc72f4e45d249dc7cbccf9e721dc3ec07e2dc1 Author: David Laban Date: 2010-12-07 19:34:56 +0000 Hacks to allow running multiple tests per process * Pick a random port to create the server on each run (since IListeningPort.stopListening() isn't guaranteed to have freed the port by the time it returns) * Don't install the colourer more than once * Fix the colourer to deal with "took $seconds" misc. We should probably try to consolidate these hacks with whatever gabbletest does, or maybe try to push more stuff into servicetest to make it easier to maintain, but let's wait until sofiasip has more tests before we start doing that. commit 9eb2013202cc29017c1925bd0e1d7c1906bf209b Author: Mikhail Zabaluev Date: 2011-01-03 18:26:27 +0200 Added a NEWS item for the upcoming release with warning about legacy loggers commit 79ff96db9d46dfe0c94442b954cf8b5c67b7df0b Author: Mikhail Zabaluev Date: 2011-01-03 17:56:45 +0200 Test the message-sent timestamp header with a fixed value commit 248b7a0c9b0efac2653c3e2659cbec1eda01d238 Merge: c89168e 6ef183a Author: Mikhail Zabaluev Date: 2011-01-03 17:45:15 +0200 Merge branch 'master' into messages-retouch commit 6ef183a45800b000fe1c402255e822963f90dc0c Author: Jonny Lamb Date: 2010-12-15 14:42:50 +0000 configure: increase version of tp-glib required This is required for TpBaseProtocolClass->dup_authentication_types. Signed-off-by: Jonny Lamb commit 96c98cfc3a7f59d0c04573098e498503b4ae4a47 Author: Jonny Lamb Date: 2010-12-15 14:38:27 +0000 protocol: implement TpBaseProtocolClass->dup_authentication_types Signed-off-by: Jonny Lamb commit fd3166fc69faa317c2d7d9f9770c6471d57e5a8d Author: David Laban Date: 2010-12-13 20:34:52 +0000 test registering without a password and using a sasl channel to request the password if the server challenges, or not asking for a password if the server doesn't challenge. commit d2a65899f22ea3d91d7c47793298c55082668be1 Author: David Laban Date: 2010-12-13 17:33:56 +0000 Don't ask the user for a password on connect We don't need to do this until the server asks us to authenticate. commit 75a2d3a792b54c328b809e1f260ad1e49632fb6e Author: David Laban Date: 2010-12-13 17:13:01 +0000 Ask for a password in priv_handle_auth() if not given. This requires a call to tp_simple_password_manager_prompt_async(), so we create a data struct to help us split the function in half. Also, we move all checks from the second half of the function into the first, so they can be handled synchronously. The diff is clearer if you use git diff --patience. commit ef71b9dd869a46476fff2a49b942eb04d9928832 Author: Jonny Lamb Date: 2010-12-07 16:52:04 +0000 configure: depend on new enough tp-glib for TpSimplePasswordManager Signed-off-by: Jonny Lamb commit 04540e3ae94b618270bd3bb43b9ca6d75bf06ab8 Author: Jonny Lamb Date: 2010-12-07 16:43:34 +0000 connection: only disconnect if we're not already disconnected If we don't check this, tp-glib will give us a nice big fat warning. Signed-off-by: Jonny Lamb commit 9b24bd79a3f9437ea406ef4c412ff5aae84da2ce Author: Jonny Lamb Date: 2010-11-25 11:52:31 +0000 connection: use disconnect_with_dbus_error Signed-off-by: Jonny Lamb commit 7fd45d95dc7909585976670a77243a175d977734 Author: Jonny Lamb Date: 2010-11-24 16:26:08 +0000 connection: use TpSimplePasswordManager to get a password if one was not given Signed-off-by: Jonny Lamb commit d8e180b6f802cccea36fee81714d82203cba1f5b Author: Jonny Lamb Date: 2010-11-24 16:06:04 +0000 protocol: when hitting a special parameter, just skip it, not all the others too Signed-off-by: Jonny Lamb Reviewed-by: Simon McVittie commit 825053fad9ac2b08ef47bb21a1dc29b0ca7be77f Author: Mikhail Zabaluev Date: 2010-11-23 19:31:28 +0200 Version 0.7.0.1 for development commit 15349832aea5b9c4a673e65f4099c116b24522e6 Author: Mikhail Zabaluev Date: 2010-11-23 18:54:20 +0200 Release 0.7.0 NOTE: changed the release header format in NEWS to fit expectation of tools/make-release-mail.py commit 3908c858e2b19e122cb85202ede3edb39bc75a5e Author: Mikhail Zabaluev Date: 2010-11-23 19:06:23 +0200 Added constants.py from the test support files to the distribution commit 99a098f0c5fe88117df394710b704bb111c73a79 Author: Mikhail Zabaluev Date: 2010-11-23 19:05:28 +0200 Removed the dist-hook for changelog generation Now handled by 'tools/telepathy.am'. commit 8221afb2c98fd3ceadf2605b99e2f371ca4829c4 Author: Mikhail Zabaluev Date: 2010-11-23 18:53:19 +0200 Added the Telepathy maintenance scripts and makefile rules Copied from telepathy-glib. commit 684f6bd86d6fbd72b759af1587c7c37777e32791 Merge: d56b1f0 1c58961 Author: Simon McVittie Date: 2010-11-23 16:12:53 +0000 Merge branch 'protocol' Reviewed-by: Mikhail Zabaluev Bug: https://bugs.freedesktop.org/show_bug.cgi?id=31720 commit 1c58961211f73bf3dd39f3bac4127a0cd7a11bb4 Author: Simon McVittie Date: 2010-11-23 16:12:42 +0000 Re-word write-mgr-file's header - this isn't Gabble commit d56b1f06f7576b17208943374105f7e87b49ee61 Merge: 1c9931a 2003aeb Author: Simon McVittie Date: 2010-11-23 16:10:58 +0000 Merge branch 'get-bus' Reviewed-by: Mikhail Zabaluev commit 747c688cdd03a69f7d712e1eeeaaf756a0fb5c43 Author: Simon McVittie Date: 2010-11-18 18:19:02 +0000 Implement type_foreach_channel_class in both channel managers This lets our Protocol objects advertise their requestable channel classes. commit 167d76996438e4e8e3eacf36577ec196354d592e Author: Simon McVittie Date: 2010-11-18 18:16:37 +0000 Add a simple test for Protocol objects commit c847c6bfd4e3d963fd7da2c481fc3078606a4ffe Author: Simon McVittie Date: 2010-11-18 18:16:28 +0000 Port TpsipConnectionManager to use TpBaseProtocol write-mgr-file.c was completely replaced by the one from Gabble, with trivial changes in main(). commit 5c7b956faeffeda6b4ef2666750398fdb9bb0fba Author: Simon McVittie Date: 2010-11-18 18:15:04 +0000 tpsip_normalize_contact: add connection-independent normalization commit b96c4501cca2edda99a94bf3a84165618d53cc92 Author: Simon McVittie Date: 2010-11-18 18:14:42 +0000 tpsip_connection_get_implemented_interfaces: add commit 4af95b75fc17a251b167208131a51626ae15dec1 Author: Simon McVittie Date: 2010-11-18 18:14:25 +0000 tests: import servicetest.py from Salut and modernize tests to pass again commit 6babff19f5dafab264a6d3cd5f3af602f7437464 Author: Simon McVittie Date: 2010-11-18 18:13:49 +0000 tests: import constants from Salut commit 2003aeb88be1545739f92dcd3a4c99e7d0898d07 Author: Simon McVittie Date: 2010-11-18 13:46:18 +0000 fd.o #31720: use TpDBusDaemon to export media streams commit 522e78d6eb471503f8cb5e955ba3bb5aae843292 Author: Simon McVittie Date: 2010-11-18 13:46:06 +0000 fd.o #31720: use TpDBusDaemon to export media sessions commit 34dbdead1e26567a3262979e38e9272b1e5d23af Author: Simon McVittie Date: 2010-11-18 13:45:40 +0000 fd.o #31720: use TpDBusDaemon to export channel objects commit c89168ecb97280c6e1f732c659c800af832bd7ab Author: Mikhail Zabaluev Date: 2010-11-03 17:39:58 +0200 Function call whitespace commit eaafc38c7f7252ea8d5792c14cd2499a6b9e1269 Author: Mikhail Zabaluev Date: 2010-11-03 17:39:34 +0200 Fix header value types for timestamps commit 4ae2883e410af411acc0d1c9096e3e11137cba81 Author: Mikhail Zabaluev Date: 2010-11-03 16:54:03 +0200 Test message headers "message-sent" and "message-received" commit 2c4c217d0b8320b86101200b80be35c03654d6f7 Author: Mikhail Zabaluev Date: 2010-11-03 16:53:44 +0200 Test "message-token" commit 90c49625330dd1f2dfa0c075271490fa1cad9518 Author: Mikhail Zabaluev Date: 2010-11-03 16:49:35 +0200 Add the header "message-sent" to received messages in Chan.I.Messages As retrieved from the Date header. commit 6b3085a3e3f0a310dc0625d8fd0e5b62241efd10 Author: Mikhail Zabaluev Date: 2010-11-03 16:47:58 +0200 Offer the header "message-token" on received messages in chan.I.Messages commit 1c9931a882038ac20ab45fe6de015cb8b76a841b Author: Guillaume Desmottes Date: 2010-10-27 16:33:46 +0200 test-message.py: skip fail delivery report commit 4e5b5cca60879c68352bdf30b976e6e4c6254888 Author: Guillaume Desmottes Date: 2010-10-27 12:05:34 +0200 test-message.py: stop waiting for the Sent signal It's meant to be fired *before* Send() returns, not after. commit 13285043020ed6bdaa72b30bf65ac9b7d6b0207e Author: Guillaume Desmottes Date: 2010-10-27 12:05:09 +0200 add delivery report commit b68ed195e7cb46b92dae6de5061cd1f94e9ff732 Author: Guillaume Desmottes Date: 2010-10-27 10:30:44 +0200 Implement Messages (#29377) commit 3a72188a712b1cfd808d1522751fe30d1e1f1dc3 Author: Guillaume Desmottes Date: 2010-10-27 10:14:21 +0200 depends on tp-glib 0.12.0 commit 8932d71d3ead32065bd070a87b3cee811f6892ed Author: Mikhail Zabaluev Date: 2010-08-27 20:36:08 +0300 Nano version 0.6.4.1 commit 9cfa07f7dbabcf4faeff3e447aa743c118d4a012 Author: Mikhail Zabaluev Date: 2010-08-27 20:24:06 +0300 Version 0.6.4 commit b80fdcb30fb9f37eeb042beade15e862f5d0b14c Merge: 1cc6e02 fa3ba5a Author: Mikhail Zabaluev Date: 2010-08-27 13:37:28 +0300 Merge branch 'reject-with-extreme-prejudice' into master Conflicts: configure.ac commit fa3ba5a5dd2b58e978e023a47093942516ab19c6 Author: Mikhail Zabaluev Date: 2010-08-26 19:40:39 +0300 Evaluate if the local handle is in the local pending before removing it The stupid mistake prevented us from properly signaling call rejection. commit 19581f4d56a510a554adac177473d7b91e251a42 Author: Mikhail Zabaluev Date: 2010-06-21 16:32:59 +0300 Nano version 0.6.3.1 commit c73241b638c3eaf99b6200d1ac7115d4107e772a Author: Mikhail Zabaluev Date: 2010-06-21 16:25:51 +0300 Version 0.6.3 commit 7178aadaf444870c07f0cf07987f994d3b00d76f Author: Mikhail Zabaluev Date: 2010-06-21 16:10:31 +0300 Fixed a walk-off-the-end crash in debug support code commit 6ba1c2861ef095edf8cac3e6d9e0954d1a2e7417 Author: Mikhail Zabaluev Date: 2010-04-01 19:41:14 +0300 Disable shared library building for libtool The PIC-ified objects were not used anyway, and only wasted compilation time. commit 1cc6e028594f0d4a7e662bfb42f3a53b7b2cb77a Merge: 6725855 fdf7fbe Author: Mikhail Zabaluev Date: 2010-06-21 15:38:26 +0300 Merge commit 'fdf7fbe99f69a2a5431223be7d066d35096b1fa1' commit 5b689a12e02ae6f14a57c6eba6454a368efd5edc Author: Sjoerd Simons Date: 2010-06-20 20:54:10 +0100 Save the pending flags that got applied, so we can apply them.. commit 6725855c7bf6f0f1e7ce96726ca0b0f8acc826ed Author: Sjoerd Simons Date: 2010-06-20 20:54:10 +0100 Save the pending flags that got applied, so we can apply them.. commit b610e20bb159dfbc0167e96a031b4c922c42c221 Author: Simon McVittie Date: 2010-05-26 10:57:37 +0100 Update with-session-bus.sh from telepathy-glib, fixing a bashism Reviewed-by: Guillaume Desmottes Bug: https://bugs.freedesktop.org/show_bug.cgi?id=28258 commit c1b3f2a471b44bec8d0a102536364ef003de3423 Merge: a3f6a5a d88ee28 Author: Mikhail Zabaluev Date: 2010-04-01 19:48:55 +0300 Merge branch 'tighten-hold' commit fdf7fbe99f69a2a5431223be7d066d35096b1fa1 Author: Mikhail Zabaluev Date: 2010-04-01 19:41:14 +0300 Disable shared library building for libtool The PIC-ified objects were not used anyway, and only wasted compilation time. commit d88ee28524ae9bf3b751d6005584fda92a391e30 Author: Mikhail Zabaluev Date: 2010-04-01 19:07:52 +0300 Don't remove the local pending send flag when holding the call commit a3f6a5a5357469c4efe9ed4cfaff62e70ab50278 Merge: 448b43b c300e73 Author: Mikhail Zabaluev Date: 2010-03-29 20:57:23 +0300 Merge branch 'fix-disable-debug' Conflicts: configure.ac src/sip-media-channel.c commit c300e733d5d187f61bc36f2ffe2cbad46042b1b6 Author: Mikhail Zabaluev Date: 2010-03-29 20:40:17 +0300 Make TPSIP_PERSIST environment variable work regardless of ENABLE_DEBUG The --enable-debug configure option, and the ENABLE_DEBUG macro, should control debug logging and its possible overhead; there is no penalty in making the persistent mode work independently of the debug switch. commit 3ca48325c45bec7d91a2079a962e41b406d4f110 Author: Mikhail Zabaluev Date: 2010-03-29 20:37:31 +0300 Made Sofia logging handler a no-op when ENABLE_DEBUG is not defined This unfails compilation with --disable-debug configure flag. commit 448b43b31b5f941d533cbafa706d8648ec885cad Author: Mikhail Zabaluev Date: 2010-03-24 16:47:18 +0530 Fixed a typo in the debug string commit 2097ae23976c9aa932b28ba9e798aa77395e9e94 Author: Mikhail Zabaluev Date: 2010-03-17 17:46:24 +0200 Start development for 0.6.3 commit 2bebcc2e3a8933fa051c33c7227833abd5d0898f Author: Mikhail Zabaluev Date: 2010-03-17 16:49:24 +0200 Version 0.6.2 commit 64d5e8bb608a37a22072466960afaad3d61bf66e Author: Mikhail Zabaluev Date: 2010-03-12 17:08:14 +0200 Avoid emitting "incoming-call" on re-INVITES commit 2229021e737bdb038eb4e6cbfae1af5b595110a0 Merge: ff7e80c 8f09f71 Author: Mikhail Zabaluev Date: 2010-03-12 16:55:22 +0200 Merge branch 'real-initial-media' into real-initial-media-more commit 8f09f71527095bee0dba946feab5e09d97ee134c Author: Mikhail Zabaluev Date: 2010-03-12 16:54:13 +0200 Disconnect the "incoming-call" signal handler after handling it once commit ff7e80c158a0dcc3eae958c5e5923ea3280f6063 Author: Mikhail Zabaluev Date: 2010-03-12 16:47:44 +0200 Only handle nua_callstate_received at the beginning of a call This state is also achieved in re-INVITES, where we want to ignore it. commit ae08dacb9426ac3d64c4d507888fbad4b8eee429 Author: Mikhail Zabaluev Date: 2010-03-11 19:49:00 +0200 Create and emit the session after emitting NewChannel(s) Only the old-skool RequestChannel will add members and create streams before the channel is emitted. commit 222df2c563a641c2dfd73c2e94b51cde8d69becc Merge: 51ee60e a2682c9 Author: Mikhail Zabaluev Date: 2010-03-11 19:34:51 +0200 Merge branch 'master' into real-initial-media-more commit 51ee60eaca6171b5193088cf2d100d6e1bd9ad9f Author: Mikhail Zabaluev Date: 2010-03-11 19:29:05 +0200 Emit NewChannel(s) when we do have the idea of our initial media properties commit a2682c940250925b65390b5ec2ee6ab7c23da69e Merge: 7348858 48aab55 Author: Mikhail Zabaluev Date: 2010-03-11 18:14:28 +0200 Merge branch 'premature-sending-fix' commit 48aab555dbbecec12507aef2f21d77c2cf0bab40 Author: Mikhail Zabaluev Date: 2010-03-11 18:13:14 +0200 Reinstated the check for session being accepted before we start sending commit 7348858c257e763976ef214e39942c389afd1cac Merge: 8087c0f 3476aec Author: Mikhail Zabaluev Date: 2010-03-10 18:22:08 +0200 Merge branch 'sofia-log-debong' commit 3476aecbdad44feb2b20562768b572c773194f0d Author: Mikhail Zabaluev Date: 2010-03-10 18:17:27 +0200 Strip the trailing newline off the Sofia log messages commit 703f162d4c6d308a85fd6face49d2b60aa4c5706 Author: Mikhail Zabaluev Date: 2010-03-10 18:12:47 +0200 Replaced a lot of dubious string formatting code with GLib function g_string_append_vprintf has become available since Glib 2.14 commit f6152fae8100b0871978b886ea3cd51078a5a536 Author: Mikhail Zabaluev Date: 2010-03-10 18:12:12 +0200 Added the sofia debug category to registered flags commit 8087c0fc29f8b6ba488e03d17c742893275a4750 Merge: 9f7af19 01ea211 Author: Mikhail Zabaluev Date: 2010-02-22 19:51:23 +0200 Merge branch 'no-bogus-stun-property' Conflicts: configure.ac commit 01ea2112b6de872a2f2b3383aae0cbb4993cecdb Author: Mikhail Zabaluev Date: 2010-02-22 19:49:27 +0200 Fixed indentation commit a6e66e659e2f5caf450a3249f5445debb36aecf4 Author: Mikhail Zabaluev Date: 2010-02-22 19:30:40 +0200 Better idea for STUN properties on the media channel The properties are now always available for getting, but get exposed as Telepathy properties only when explicitly set. commit fc332e4a62f3e036233b70fd45c921de77e13924 Author: Mikhail Zabaluev Date: 2010-02-22 19:26:30 +0200 Revert "Make sure media channel properties 'stun-server' and 'stun-port' are set" This reverts commit f979118a57d932ef6d61a1320b209507ef357722. commit a377d3556142dc586c1dd5dec64e14ca2ffad714 Author: Simon McVittie Date: 2010-02-19 21:02:09 +0000 Nano version commit 9f7af1994ee1c13ca2586d15c173a2f888de548c Merge: 0373098 d5cd88a Author: Simon McVittie Date: 2010-02-19 20:54:33 +0000 Merge commit 'telepathy-sofiasip-0.6.1' commit d5cd88a40160eb4acedfa4697ba948d861358504 Author: Simon McVittie Date: 2010-02-19 20:47:10 +0000 Prepare version 0.6.1 commit 0373098e41c1d806178dd3ba6e69b4b1a1301d7e Author: Mikhail Zabaluev Date: 2010-02-19 20:22:52 +0200 Bumped version for development leading up to 0.7.0 commit 09c12989a58fb581b8b395aae54960088338fc6e Merge: 8d9c7af 5c1bf6c Author: Simon McVittie Date: 2010-02-19 18:08:39 +0000 Merge branch 'ipv4' Bug: http://bugs.freedesktop.org/show_bug.cgi?id=26654 Reviewed-by: Mikhail Zabaluev commit 5c1bf6cc2c854e10184dcd25a58f77eba4e2f9cf Author: Simon McVittie Date: 2010-02-19 16:52:29 +0000 tpsip_conn_get_local_url: explicitly bind to IPv4 for better interoperability This is a hack to get round the fact that we can only have one candidate, and hardware SIP phones don't generally do IPv6. commit 8d9c7afb9b5433942e34e9ec2218cc75179a21a8 Author: Mikhail Zabaluev Date: 2010-02-16 13:29:17 +0200 Backfilled the NEWS file commit c30450807440e61f49fd67445a0e52c7cded5e8e Author: Mikhail Zabaluev Date: 2010-02-15 16:46:19 +0200 Version 0.6.0 commit 6aaad9709ec8966c5b05ed3eea60f775ac257ada Author: Mikhail Zabaluev Date: 2010-02-15 16:45:14 +0200 Check telepathy-glib version to be at least 0.8 We are targeting the stable branch now. commit bfd444968f20601bdf6968046cc2474769c8bc32 Author: Mikhail Zabaluev Date: 2010-02-15 16:39:35 +0200 Updated Nokia copyright years in source files commit 983ac4ce54d885059ba7adec1fdfa9b6b581f847 Merge: 4129ff1 766cbad Author: Mikhail Zabaluev Date: 2010-02-10 19:28:12 +0200 Merge branch 'master' into stream-properties commit 766cbad0c5d3143c05f42e06d891fc7420fcc88a Merge: 87cd3cf da170ed Author: Simon McVittie Date: 2010-02-10 17:24:41 +0000 Merge branch 'trivia' Reviewed-by: Mikhail Zabaluev commit da170ed10dd018e116c51dd87d5feb7e6f2c2de1 Author: Simon McVittie Date: 2010-02-10 17:00:17 +0000 Ignore more generated cruft commit 487939d0bb20f5f2f1772a07b8dac763dae5bcaa Author: Simon McVittie Date: 2010-02-10 16:59:50 +0000 configure.ac: support --enable-silent-rules if using Automake >= 1.11 commit 32c6999a9434d5954a2829838bb9ffe606bde9de Author: Simon McVittie Date: 2010-02-10 17:12:17 +0000 Document the currently-supported debug options commit edcc237b4b244f9b88a826e44a85a132797d32ba Author: Simon McVittie Date: 2010-02-10 16:45:53 +0000 Add an autogen.sh (from telepathy-glib, minus gtkdocize) commit 4129ff1669b78df2f62d67e3d55568d9a10ad3a2 Author: Mikhail Zabaluev Date: 2010-02-08 19:35:02 +0200 Use TpDBusPropertiesMixin to implement properties of Media.StreamHandler commit f979118a57d932ef6d61a1320b209507ef357722 Author: Mikhail Zabaluev Date: 2010-02-01 21:02:50 +0200 Make sure media channel properties 'stun-server' and 'stun-port' are set If the properties are not set to their default values, the telepathy mixin won't have them, resulting in warnings when retrieved as GObject properties. commit f599fa54d17a1c0542118156423616cc19ca1326 Author: Mikhail Zabaluev Date: 2010-02-08 18:21:30 +0200 Implemented DBus properties for Media.StreamHandler commit 7f34790eff3f25a9ed70a274a2de5f5ad834abfa Author: Mikhail Zabaluev Date: 2010-02-08 18:18:50 +0200 Changed a parameter in tpsip_media_session_add_stream() It's more handy for changes to follow if there is a boolean telling whether the stream has been created locally, rather than pending send flags. The latter are now derived from the boolean. commit 87cd3cfc4f8c4b27756aaecc076c0d4e3365c27d Merge: 57dba10 c5362b8 Author: Mikhail Zabaluev Date: 2010-02-08 18:05:39 +0200 Merge branch 'total-immutability' commit 57dba102e537aaecc1cc0279150f2bc54e6ad16f Merge: c180dcf a7b497e Author: Mikhail Zabaluev Date: 2010-02-08 18:03:59 +0200 Merge branch 'fatal-criticals' commit c180dcfaf1b53ab569b3fa9ecb36bf779bf8d855 Author: Jonny Lamb Date: 2010-02-02 16:15:14 +0000 Don't log sofia messages to syslog ourselves. Log the messages to the debugger, and if GLib has been patched to also syslog messages, then we'll get that for free. Signed-off-by: Jonny Lamb commit bdf2c15b3363546c7da4c6537d485fa80507dca6 Author: Jonny Lamb Date: 2010-02-02 16:07:13 +0000 Add a new MESSAGE macro and use it instead of g_message. Signed-off-by: Jonny Lamb commit 5baa2e73dffe8243edc3b229e99c3ea000a03e17 Author: Jonny Lamb Date: 2010-02-02 15:33:14 +0000 Use tpsip_log instead of g_critical. Signed-off-by: Jonny Lamb commit b14937bb5472eab7386bde2ff0762838645ea877 Author: Jonny Lamb Date: 2010-02-02 15:31:20 +0000 Add a WARNING macro and use that instead of g_warning. Signed-off-by: Jonny Lamb commit 5cf43ae3f806ae3fa06c1755d3cbd597da4f83b7 Author: Jonny Lamb Date: 2010-02-02 15:24:26 +0000 Replace tpsip_debug with tpsip_log, but keep DEBUG doing the same thing. Signed-off-by: Jonny Lamb commit acb41e5d095654b80af00b110361e1dfcb95f603 Author: Jonny Lamb Date: 2010-02-02 15:16:48 +0000 Replace g_debug calls with DEBUG. Signed-off-by: Jonny Lamb commit abb55e1e268209074a62ca79eee604fa07836d77 Author: Jonny Lamb Date: 2010-02-02 14:37:36 +0000 Use TpDebugSender to publish messages. Signed-off-by: Jonny Lamb commit 4c314b5616b0a806d2ce1f4e15f0245abc12f523 Author: Jonny Lamb Date: 2010-02-02 14:37:25 +0000 Set G_LOG_DOMAIN. Signed-off-by: Jonny Lamb commit c5362b83a4b1393fa37d39e75879729a89451fa1 Author: Mikhail Zabaluev Date: 2010-01-29 21:15:27 +0200 Disable locally-originated re-INVITES when 'immutable-streams' parameter is set commit a7b497eb85bd20e3fa071edece862b33324b5c47 Author: Mikhail Zabaluev Date: 2010-01-29 17:50:12 +0200 Make critical warnings fatal Telepathy-glib used to do that, but doesn't any more. commit 13c394f662d4f7b019a5826289c3e88e26879326 Merge: 1661d98 9413fce Author: Mikhail Zabaluev Date: 2010-01-29 17:38:49 +0200 Merge branch 'pending-send-fixes' commit 1661d98ab48b5c641d026cb5f10630b7ac7c71a2 Merge: 785c6a8 7bcbf5d Author: Mikhail Zabaluev Date: 2010-01-29 17:38:41 +0200 Merge branch 'codecs-updated' commit 9413fce7390a81bdfbef466086e9b3e85516f835 Author: Mikhail Zabaluev Date: 2010-01-29 16:48:19 +0200 Don't need remote approval when clearing local pending send commit 73e63368ab864e4ca8b39d5d01df898f99af0a71 Author: Mikhail Zabaluev Date: 2010-01-29 15:57:40 +0200 Fix the condition for initial emit of StreamDirectionChanged commit 785c6a8a2020f580fd64ae41d13abb7fa6a0cf2e Author: Mikhail Zabaluev Date: 2010-01-29 14:43:19 +0200 Don't dup the codec name string The function doc requires it to be static anyway, so we have to just avoid the compiler warning due to losing constness. commit 0837b796db43c9d8045f4d4f48414e2a82afec08 Author: Mikhail Zabaluev Date: 2010-01-24 12:03:05 +0200 Regularized the compiler flag variables in makefiles commit f51a72055f6b589ea4448079f417b1dbaa747132 Author: Mikhail Zabaluev Date: 2010-01-24 11:59:52 +0200 Fix compiler warnings commit eddc4e84598881c71f97da3df59579d23e778ad8 Author: Mikhail Zabaluev Date: 2010-01-22 21:37:14 +0200 Create remotely added streams with the direction they have as per SDP This avoids spurious emissions of StreamDirectionChanged signals. commit 16a7704b87cd7ea9ca6a309dff0d39b67262b391 Author: Mikhail Zabaluev Date: 2010-01-22 21:02:39 +0200 Removed a redundant parameter from stream helper priv_update_sending() The pending_send_flags parameter was always taken from the stream state. Now that we use another bit of stream state inside the helper, there's not even an aesthetical point. commit 30f9ecf21636c2f31991f161b1f7e360dee554dc Author: Mikhail Zabaluev Date: 2010-01-22 20:51:11 +0200 Eliminate a now-redundant check against sending media If the flag pending_remote_receive is set when constructing a locally offered stream, the effect should be the same (famous last words). Uncovered and described a quirk with emitting the remote pending send flag on newly created streams during a local hold. commit 8a36a695fbdae67bc7f1b8cb3b53ff9da9534c92 Author: Mikhail Zabaluev Date: 2010-01-22 19:53:21 +0200 Disable calls to self commit 1e685b22476ad672b536a38ef5490ed9f36e5b05 Author: Mikhail Zabaluev Date: 2010-01-22 19:48:52 +0200 More renaming for pending direction stuff commit 4c6f6efe4eb910c9936ae1a2013614d9da733305 Author: Mikhail Zabaluev Date: 2010-01-22 19:40:07 +0200 Block the stream from sending until negotiated with the remote party This does not map to a pending send flag in Telepathy, so an internal state variable is used. commit 5e680407b2405000eba55a7f18d8bb20781a8c56 Author: Mikhail Zabaluev Date: 2010-01-21 19:14:30 +0200 I don't think Pending_Remote_Send means what this code thinks it means Treat TP_MEDIA_STREAM_PENDING_REMOTE_SEND the way it's supposed to be treated: that the remote end was asked to send, but haven't confirmed. commit 7bcbf5d31e94e856fbcd9fd84f33bc98d92810d3 Merge: b327751 1cbe808 Author: Mikhail Zabaluev Date: 2010-01-20 14:23:52 +0200 Merge branch 'master' into codecs-updated commit 1cbe8083405053156e4eaead78cc11fbf9bcca9a Merge: cc9f1f4 d03618a Author: Mikhail Zabaluev Date: 2010-01-08 16:47:39 +0200 Merge branch 'initial-av' commit cc9f1f4a1013a879719eac04ba5c8456989f6254 Merge: d24f060 3b2a614 Author: Mikhail Zabaluev Date: 2010-01-04 21:37:00 +0200 Merge branch 'ptime' commit 3b2a61495281712f27b743cf0a0881462063bc9f Author: Mikhail Zabaluev Date: 2010-01-04 19:59:30 +0200 Don't clobber ptime parameters if they are specified for the codec This is weird, but is sometimes used. commit a3fec68c6748dd3378f53d71bd1f348b00986ef0 Author: Mikhail Zabaluev Date: 2010-01-04 19:23:02 +0200 Regard per-media ptime attributes as well commit d03618a2f294f9c17d6677cadeadf6a675617a10 Author: Mikhail Zabaluev Date: 2009-12-22 16:49:39 +0200 Disallow using InitialAudio and InitialVideo with old style anon channels It made no sense and probably triggered an assertion. commit f5fd29e811ebe9148a4cf844cb0cdf9b0dd73e6d Author: Mikhail Zabaluev Date: 2009-12-18 20:25:25 +0200 Disable hold if the media channel contents are not mutable Also added a TODO note for modifying RequestStreamDirection in the same manner. commit 45bba488947402ff72e8f16fa94a8ad9dd45b71b Author: Mikhail Zabaluev Date: 2009-12-18 19:48:13 +0200 Implemented ImmutableStreams property on media channels It's controlled by the 'immutable-streams' boolean parameter of the connection manager. commit 165b19f61c7dfa46b4712d2560e18d2b8896b432 Author: Mikhail Zabaluev Date: 2009-12-18 17:45:10 +0200 Create initial streams accordingly to the media channel properties commit 8ea709933e02131e6baa7502678c72fc165b8267 Author: Mikhail Zabaluev Date: 2009-12-18 17:15:28 +0200 Added properties InitialAudio and InitialVideo to media stream commit bbf5e596456a9e3e70e2c658e1063e2ef1404071 Author: Mikhail Zabaluev Date: 2009-12-18 15:08:22 +0200 Removed code for a 'peer' property which was never implemented commit d24f060202df95aed26cee2a4ea014399156ccb7 Author: Mikhail Zabaluev Date: 2009-12-02 18:29:05 +0200 Change AM_PROG_LIBTOOL to AC_PROG_LIBTOOL commit 56f6d98a7332e145b4e1972d291158812522f980 Author: Mikhail Zabaluev Date: 2009-12-01 21:07:56 +0200 Pass ptime and maxptime properties from the session to codec parameters commit b1c48167b1bd800c62bbffaa0c42d97cbb209cbd Author: Mikhail Zabaluev Date: 2009-12-01 21:07:12 +0200 Turned the ptime properties into strings commit ac038ca1b3bfab54b4d3a75eef5429fcb9570494 Author: Mikhail Zabaluev Date: 2009-11-23 13:25:27 +0200 Implemented TpsipMediaSession properties 'remote-ptime' and 'remote-max-ptime' commit c1086708a5d182a601502311e6f44093c5dc50f9 Author: Mikhail Zabaluev Date: 2009-11-30 20:20:32 +0200 Development nano version 0.5.19.1 commit 06a3a24f2d495a2ecc7386de4a7f8460e67b98d1 Author: Mikhail Zabaluev Date: 2009-11-30 20:15:08 +0200 Version 0.5.19 commit ab1a91bc4707e49690555f34765317f3b0d723bf Author: Mikhail Zabaluev Date: 2009-11-30 20:14:01 +0200 Require Automake 1.9 commit b0c24f543673b2bf762085c052661e4046afd8cd Merge: 63f2ae0 531541d Author: Mikhail Zabaluev Date: 2009-11-30 15:50:15 +0200 Merge branch 'custom-fmtp' commit 531541dd445037684a3feec01f9e1460b428e2ec Author: Mikhail Zabaluev Date: 2009-11-23 15:49:16 +0200 Properly fixed a quick patch commit 61a56e0b29f54fc0912ffa0aaaab898e986171e5 Author: Mikhail Zabaluev Date: 2009-11-23 15:13:09 +0200 Addressed Will's comments on codec parameter parsers and quoting utilities commit a91f99a9822e80a60ce80b2f1c8b01a580074da0 Author: Mikhail Zabaluev Date: 2009-11-23 14:48:33 +0200 Staticized tpsip_codec_param_formats_init() It's called internally wherever required. commit dfc2229d9c5c00590e539b552ab8159ab6cf2de7 Author: Mikhail Zabaluev Date: 2009-11-23 14:45:46 +0200 Addressed some of Simon's review comments for codec parameter formatting commit 63f2ae09ec36dd6bda9073d932a47bfb4c60d9fc Author: Mikhail Zabaluev Date: 2009-11-17 12:28:47 +0200 Added missing default values to keepalive parameters commit 46672ca54cba392d5ca556f9a70d03e71010b07f Author: Mikhail Zabaluev Date: 2009-11-13 19:02:41 +0200 Guard against a null fmtp parameter for codec parser commit 38ac51ea75d283793bfc9935da5995cf2c464edd Author: Mikhail Zabaluev Date: 2009-11-10 17:56:48 +0200 Anchor the match for DTMF events list at the beginning of the string commit 95274f0599cf928992277b0fdc405095a4a5ac46 Author: Mikhail Zabaluev Date: 2009-11-10 17:43:23 +0200 Use the new codec parameter formatting system commit e3ddb746648c5b58eff1ac78080e39710797d786 Author: Mikhail Zabaluev Date: 2009-11-10 17:21:29 +0200 Plug in the audio/telephone-event formatting routines commit d5c7ff32132dd5ce40b633bbdd54d0352b441582 Author: Mikhail Zabaluev Date: 2009-11-10 16:00:13 +0200 Added codec format registration routines and type-based usage functions commit 0ecef1badf14107976ce422b6f8ea223501dfa88 Author: Mikhail Zabaluev Date: 2009-11-10 14:33:56 +0200 Added parameter formatting for audio/telephone-event commit 993b2b6dd2ad6a19cf845005ee1819c7d3b2837a Author: Mikhail Zabaluev Date: 2009-11-05 19:04:25 +0200 Added the generic parser routine, along with initialization commit 1e4ed012b881b7acfc8d174fa6ae5a122b31408d Author: Mikhail Zabaluev Date: 2009-11-05 18:43:10 +0200 Added tpsip_unquote_string() commit 1e6b61bf66e303a2b7c4cb414f9d580013775fcd Author: Mikhail Zabaluev Date: 2009-11-05 02:20:04 +0200 Use the utility function tpsip_quote_string() to format the display name Besides utility niceness, the new implementation is much lighter commit 026d158e095d638742a23437f283ab6db4c78421 Author: Mikhail Zabaluev Date: 2009-11-05 02:18:27 +0200 Added the new sources to the build commit 7c42c3b5e2baa34ffb322636a27d3c0d4f565c88 Author: Mikhail Zabaluev Date: 2009-11-05 02:17:36 +0200 Initial code for codec parameter formatters and parsers commit e2defa88a1684f475a416b2e396f7dd2e078ec1c Author: Mikhail Zabaluev Date: 2009-11-05 02:15:12 +0200 Added the utility module files, initially with quoted string utilities commit 7ae7b48f6cf560bd340f07b4e51f47ab744590f2 Author: Mikhail Zabaluev Date: 2009-11-04 14:54:54 +0200 Test that the self-produced alias results in no display name commit 302106b22d747899526a86201dbd7c71b55bedf1 Author: Mikhail Zabaluev Date: 2009-11-04 12:18:54 +0200 Do not use the alias if it is derived from the handle URI If the client sets our URI-derived alias back to ourselves, it's useless for display name purposes. commit e4350664c8687e3a43e07aa25e37ca1a2c322ccf Merge: f973c7c a312a22 Author: Mikhail Zabaluev Date: 2009-11-03 20:17:21 +0200 Merge branch 'autotools-cleanup' commit a312a22ea7d45b2ed998703c70167e6c4772f151 Author: Mikhail Zabaluev Date: 2009-11-03 20:04:30 +0200 Screw canonical macros, altogether Reverts two earlier commits dealing with the macros. commit f973c7c31baec26cf54d2badf54994374fa5327a Author: Mikhail Zabaluev Date: 2009-11-03 19:54:06 +0200 Consistently use the In_Progress call state with the other similar states commit c1335dde67ae35073627dd803f351b9818999e9a Author: Mikhail Zabaluev Date: 2009-11-03 19:23:06 +0200 Replaced AC_CANONICAL_TARGET by AC_CANONICAL_BUILD and AC_CANONICAL_HOST In a voodoo ceremony to get config.guess and config.sub updated properly. commit 5ee3a315d349ce703b43fac153814d4129b4d6de Author: Mikhail Zabaluev Date: 2009-11-03 15:11:26 +0200 Signal the call state In_Progress on response 183 Session Progress This is the proper fix for the early media case. Before, we could only pretend that the call state is Ringing. commit 8df3892c8a68ccd0196d7ed6ac4976af55baefbd Author: Mikhail Zabaluev Date: 2009-11-03 15:10:07 +0200 Bumped telepathy-glib dependency version to 0.7.37 This is where Call_State_In_Progress appears. commit 4b75b121af0c8f772f9431a6ba1d76de2da97ac0 Merge: 909f66d ddf87bf Author: Mikhail Zabaluev Date: 2009-11-03 14:37:23 +0200 Merge branch 'master' into call-in-progress commit ddf87bfff0cba5cf043e357607807a5a9090f324 Merge: 3488823 5df55a2 Author: Simon McVittie Date: 2009-11-02 14:48:51 +0000 Merge branch 'trivia' Reviewed-by: Mikhail Zabaluev commit 5df55a2c2ebe2a19021cc2597e8dd20a42ebfa8c Author: Simon McVittie Date: 2009-10-15 20:50:28 +0100 fd.o #24561: flag password, extra-auth-password as secret Also enhance write-mgr-file.c to put that in the .manager file. commit ee4e589a6d33c79a860a2c1d450d82d14274e42b Author: Simon McVittie Date: 2009-07-30 15:51:04 +0100 Fix out-of-tree builds (like distcheck) by having top_srcdir in search path commit c9524c8fc8c2446a9d1b761012601225ba71c5f1 Author: Mikhail Zabaluev Date: 2009-10-01 14:47:24 +0300 Use AS_HELP_STRING instead of AC_HELP_STRING The Autoconf validator in an Eclipse plugin complains about the latter being obsolete. commit 0f65c78b8364f0e6ea580de9daff2357e10d1cf7 Author: Mikhail Zabaluev Date: 2009-10-01 14:37:43 +0300 Add AC_CANONICAL_TARGET macro Provides more explicit check for missing config.guess and config.sub commit 348882349f35477284ef4bbf91271e34d8857f0c Merge: e00c1f0 21cd9c2 Author: Mikhail Zabaluev Date: 2009-09-30 17:40:47 +0300 Merge branch 'escape-alias' commit e00c1f0bfdf180dd17b9e1d3d6902405dae73c9f Author: Mikhail Zabaluev Date: 2009-09-30 17:27:21 +0300 Don't call su_root_set_max_defer() unless IPHB is in use This function didn't make it to a stable release of Sofia-SIP. iphb is only available on Maemo 5, where we have a newer sofia-sip snapshot as well. commit 21cd9c23952e22bd806235f59bbf9565cee1d7f5 Author: Mikhail Zabaluev Date: 2009-09-29 16:45:26 +0300 Test quoting and whitespace normalization of the display name commit 8e80f636389f8848acdf689d8750906d5fb35de4 Author: Mikhail Zabaluev Date: 2009-09-28 20:46:20 +0300 RFC-compliant escaping of alias characters Don't escape CR and LF that must not be escaped accordingly to SIP syntax. Should be obviated by the previous commit, but better safe than sorry. commit 41de1dcb0b3bd02080f42f537fa9fae5ea1e4b8a Author: Mikhail Zabaluev Date: 2009-09-28 20:42:38 +0300 Collapse whitespace sequences in the alias This reflects treatment of whitespace sequences in SIP headers, and results in more interoperable message formatting. commit a0d04fac27d43aa388e3dfe76d16178c564089bc Author: Mikhail Zabaluev Date: 2009-09-25 20:38:03 +0300 Test setting alias for the self handle It's expected to produce a properly quoted display name in the From header for outbound requests. commit 6438d931be55072d826587a22ab5db104825beeb Author: Mikhail Zabaluev Date: 2009-09-25 20:36:32 +0300 Properly quote and escape an alias into the From header's display name commit c0b888f9e9ed411725657f847d45d016e0bfc015 Author: Mikhail Zabaluev Date: 2009-09-15 18:34:59 +0300 More robustness to the heartbeat code commit b62a12a2d961d54c15269acb057a77e69c736c63 Author: Mikhail Zabaluev Date: 2009-09-15 18:32:12 +0300 Initialize heartbeat only when successfully registered Some time may pass between the first registration request and the final successful response, and maybe we shouldn't commit the resources in failure cases at all. commit 4dc04be40424de0b5dffc42dd75da00cec8a0cdb Author: Mikhail Zabaluev Date: 2009-09-14 16:51:28 +0300 Refactored heartbeat to work per connection There is an iphb client connection for every connection, triggering wakeups according to the connection's individual keepalive interval. The Sofia-SIP stack retains a 30 s deadline for its deferrable timers (which may serve more purposes than keepalives). The iphb wakeups are supposed to fit with keepalive timer(s) expiring. Another improvement is an initial sync-in with other iphb clients using an overlapping interval range. commit 5044c65959b6b50ab8a0f7cca7ca4013332be908 Author: Mikhail Zabaluev Date: 2009-09-04 18:38:51 +0300 Restore the code to follow unexpected hold changes, and make it work for real commit 409bd3a39c5e21044cfb326afcecc591ecfc544b Author: Mikhail Zabaluev Date: 2009-09-02 20:47:44 +0300 Removed some race conditions in call holding commit aecbd3f0abb29f1b69906ecf8f178d87733b5d80 Author: Mikhail Zabaluev Date: 2009-08-27 15:34:52 +0300 Start development for 0.5.19 commit bf473a46dce3375cd536355e2bad49f080d2976a Author: Mikhail Zabaluev Date: 2009-08-27 15:31:18 +0300 Version 0.5.18 commit 2ede4294d5298af60fd659139b9fb8987b2a724f Merge: 694934b 623c8b6 Author: Mikhail Zabaluev Date: 2009-08-27 15:20:38 +0300 Merge branch 'quench-incoming-messages' commit 623c8b602b9f50c31eac9381aa6a37ed440e106f Author: Mikhail Zabaluev Date: 2009-08-27 15:16:44 +0300 Removed checks for SIP responses on the sent messages This is a temporary relaxation. There should be a way to expect heterogeneous events that may come in different order. commit 694934bebe68be670b49e5368006c99950e9e044 Merge: 31b09f6 0f54cda Author: Mikhail Zabaluev Date: 2009-08-27 15:03:56 +0300 Merge branch 'tls' commit 0f54cdab8b0a339ddb53b26d472aa13b475ce0b8 Author: Mikhail Zabaluev Date: 2009-08-27 15:00:48 +0300 Prevent an assertion when no transport is selected commit 31b09f64863bf03b89210468c13351dec92075d0 Merge: 4c0347c f814765 Author: Mikhail Zabaluev Date: 2009-08-27 14:51:56 +0300 Merge branch 'python-check' commit f814765b59a2552b8d739956f5a7fdc8b2d3efd0 Author: Mikhail Zabaluev Date: 2009-08-27 14:49:18 +0300 Use AM_PATH_PYTHON to check for Python commit 4c0347c2d97dd269ef2aec71158a9476e083785e Merge: a9913cd 6f30305 Author: Mikhail Zabaluev Date: 2009-08-27 13:38:10 +0300 Merge branch 'tls' commit a9913cd619763d26e63243ec4fc79fc695c62e4c Merge: 1f78e9c 3c09a99 Author: Mikhail Zabaluev Date: 2009-08-27 13:37:48 +0300 Merge branch 'quench-incoming-messages' commit 6f30305cf54e21538ff07d79813220cec4b8cc70 Author: Mikhail Zabaluev Date: 2009-08-26 19:45:32 +0300 Support the SIPS scheme in handle normalization commit 3c09a999e17643b86e0daf3aefccc36dc9855acb Author: Mikhail Zabaluev Date: 2009-08-21 13:17:07 +0300 Streamlined the memory management bits in message body conversion commit f7897cdd8fe1079795472217c1b9d490d43d1b0d Author: Mikhail Zabaluev Date: 2009-08-21 13:07:02 +0300 Don't delay the final 200 response to incoming messages Delaying the final response until client acknowledgement is harmful, because the sender would still retransmit the MESSAGE request every 4 seconds by default, and times out the transaction after 32 seconds. commit 909f66d201576a3197f21eb08369d7cb2173c094 Author: Mikhail Zabaluev Date: 2009-08-19 17:46:05 +0300 Pretend the call state is Ringing when we get 183 Session Progress This is a quick fix to a bug where the remote media gateway starts sending early audio with a ringback tone, but we're not getting any because of a NAT or a firewall, which the local stream cannot puncture yet because it doesn't yet send any media due to privacy reasons. A semi-good thing to do in the stream engine would be to send some allowed, but harmless packets such as comfort noise, but that requires quite a bit of implementation. The proper fix in the connection manager will wait for introduction of a separate call state flag in the Telepathy specification and telepathy-glib. See fd.o bug #23409. commit 1f78e9c6cc27b66dd53d0402cd50979fb07b5893 Author: Mikhail Zabaluev Date: 2009-08-09 16:55:05 +0300 Be prepared for python2.7 as well Old Pythons not only die hard, they procreate! commit 11fcd296cab8a9d9080759741382282a093a633c Author: Mikhail Zabaluev Date: 2009-08-09 11:46:00 +0300 Add python2.6 to the Python path check commit 827b6eb54a9899607f2d60834648d5615035808c Author: Mikhail Zabaluev Date: 2009-07-24 22:09:40 +0300 Development nano version 0.5.17.1 commit ea12218888959517269458e6902974d98900e572 Author: Mikhail Zabaluev Date: 2009-07-24 21:30:12 +0300 Version 0.5.17 commit bea1af4f323401f6ac5dbd94c2dc640b3513af85 Merge: 81fe16b 7eb21c5 Author: Mikhail Zabaluev Date: 2009-07-24 21:25:57 +0300 Merge branch 'heartbeat' commit 81fe16b6f8664effdee235af35c15db7d4417271 Author: Andres Salomon Date: 2009-07-20 12:18:16 -0400 telepathy-sofiasip: fix header guard in debug.h This would allow debug.h's contents to be included twice. Signed-off-by: Andres Salomon Signed-off-by: Simon McVittie commit cc372afa62e33a91abd1e2254607039c472a957d Author: Guillaume Desmottes Date: 2009-07-17 10:38:49 +0100 tpsip_connection_dispose: remove assertion that base->self_handle == 0 This is unnecessary, was never guaranteed, and we'd like to make it not be the case in a future tp-glib. See fd.o #17751 commit 7eb21c5ff898a5dca0c68d25f333d5eccd3bf05a Author: Mikhail Zabaluev Date: 2009-06-24 21:19:37 +0300 Enabled TCP whitespace keepalives commit 0a71e0b0f24e49591b90e084649e475073bf6480 Merge: 4c28884 5e6babc Author: Mikhail Zabaluev Date: 2009-06-24 16:29:40 +0300 Merge branch 'master' into heartbeat Conflicts: src/Makefile.am commit 5e6babc3f9c4f4009d7bc0de306e8c822eb406e0 Author: Mikhail Zabaluev Date: 2009-06-18 14:32:02 +0300 Make keepalive-interval parameter a uint32 with saner semantics commit 08d8edac65cb4aff44c614824c239908a1ee8072 Author: Mikhail Zabaluev Date: 2009-04-14 20:43:22 +0300 Development nano version 0.5.16.1 commit cf2ea205347fd36e697ed16db4705fc0e8f389ca Author: Mikhail Zabaluev Date: 2009-04-14 19:18:59 +0300 Version 0.5.16 commit a9ccca7e31328610230cdf592df94aed78c08ffc Author: Mikhail Zabaluev Date: 2009-04-14 19:49:34 +0300 Extend the call state-aware treatment of 404 to 480 Same logic applies, as evidenced by proxy behavior observed at voip.japo.fi. commit e4b2c594d12dee0978e74702bb7e2c986f1669dc Author: Mikhail Zabaluev Date: 2009-04-08 20:32:53 +0300 Removed the duplicate 404 status case Stupid. commit f57e15399a89724ed4d9f5695d392047a01b2d84 Merge: a7fc2e8 3901268 Author: Mikhail Zabaluev Date: 2009-04-08 20:30:49 +0300 Merge branch 'master' into call-signaling commit a7fc2e8be743716ea56cd2e47a3bfb00ece4cadc Author: Mikhail Zabaluev Date: 2009-04-08 20:21:39 +0300 More elaborate handling of 404: regard the call state If the peer is known to have been contacted, emit the member removal reason NoAnswer. Otherwise, emit Offline. commit 3901268fe47a5655eb9159ee2bba51ac8d87a67e Author: Mikhail Zabaluev Date: 2009-04-08 13:08:55 +0300 Allow self handle removal from call channels at all times We needed a tp_group_mixin_class_allow_self_removal() call. commit a3900f8729fff9b5b83f5e20f2bb1bb13a7d09fe Author: Mikhail Zabaluev Date: 2009-04-08 13:05:35 +0300 Bumped libtelepathy-glib minimum version to 0.7.27 We need tp_group_mixin_class_allow_self_removal() commit de00b6bcee2c645631e2da8c0341da461b5363ab Author: Mikhail Zabaluev Date: 2009-04-07 21:25:14 +0300 Emit MembersChanged with proper actor on call channels terminated locally commit 9d02445f5ad2cd3168a663df437feeb5c26b84c0 Author: Mikhail Zabaluev Date: 2009-04-07 19:53:09 +0300 Remap SIP status 404 to Group change reason NoAnswer This gives a middleway semantic between InvalidContact and Offline, because proxies are known to mean any of the two reasons by this status code. commit e57886f660a72c6691be3bc7c26c0283e1c0644f Merge: 21e2494 3a66fa0 Author: Mikhail Zabaluev Date: 2009-04-07 18:52:11 +0300 Merge branch 'master' of git+ssh://git.collabora.co.uk/git/telepathy-sofiasip into no-user-phone-in-url commit b327751b6b2e0a52770ab8109e7b8e76beb292d1 Author: Will Thompson Date: 2009-04-06 12:53:33 +0100 Implement CodecsUpdated commit 3a66fa00a5aa0448ee8d486dfe034dc97898d0ce Author: Mikhail Zabaluev Date: 2009-02-24 12:02:50 +0200 Don't destroy the session prematurely when disposing of TpsipMediaChannel tpsip_media_channel_close should take proper care of terminating the session, no need to forcibly destroy it just before calling that. commit e50c029ebd2e21dec30cc19c12df73941a82ba79 Author: Mikhail Zabaluev Date: 2009-02-10 16:54:10 +0200 Development nano version 0.5.15.1 commit e6ee11e3788158add177e09fe2f9b337161243f8 Author: Mikhail Zabaluev Date: 2009-02-10 14:52:51 +0200 Version 0.5.15 commit a6e64d7d6a87bec7da01f799d78b721e146ac423 Author: Mikhail Zabaluev Date: 2009-02-09 20:34:28 +0200 Signal the member change immediately on the initial AddMembers to a media channel Restores the backwards-compatible behavior as documented in: http://telepathy.freedesktop.org/wiki/Requesting%20StreamedMedia%20channels Fixes fd.o bug #19652 commit b35662100233103c305fb22c221374999e90047d Author: Mikhail Zabaluev Date: 2009-02-09 19:56:15 +0200 Handle an incoming BYE with a proper media channel group change The peer has to be the actor in the MembersChanged signal when the call is terminated by the remote party. commit e3670b31b6dea973a5e1d64722af17ae9bcb6692 Author: Mikhail Zabaluev Date: 2009-02-09 16:02:23 +0200 Ignore provisional responses to a MESSAGE commit d908a360a65966f8a62c1787f0228ac81686df5b Author: Mikhail Zabaluev Date: 2009-02-05 17:22:22 +0200 Coverity fixes commit e7e268c1401c20289f93de6617bb9f9ce4b063cf Author: Mikhail Zabaluev Date: 2009-01-30 18:19:56 +0200 Use compiler.m4 to control coverage/optimization options The macros are from Aranha via telepathy-gabble. commit e92d5ed619112a23372898f8ecc6087ccff16de2 Author: Mikhail Zabaluev Date: 2009-01-28 16:27:55 +0200 Bumped sofia-sip dependency back to version 1.12.10 A previous commit accidentally had it lowered. commit 008ae15d355f1ea82093768f4fe3e72f82e97c8a Merge: 1701903 b8f4f21 Author: Mikhail Zabaluev Date: 2009-01-28 16:25:06 +0200 Merge branch 'master' of git+ssh://git.collabora.co.uk/git/telepathy-sofiasip into coverage commit 1701903060203aa9a6ebcc576d0a0504a520b7c5 Author: Mikhail Zabaluev Date: 2009-01-27 19:15:32 +0200 Moved the lcov cleanup rule to tools/lcov.am commit cae0b892401c6b88b05aa2e8adf918b181cc8b4c Author: Mikhail Zabaluev Date: 2009-01-27 19:01:24 +0200 Add LCOV machinery commit 259f7a9080a54841be7cfdde4b4b7e30bb3b0b53 Author: Mikhail Zabaluev Date: 2009-01-27 19:00:04 +0200 Updated with-session-bus.sh from telepathy-gabble commit 4c288846d9b6b968a96d5e13566109de0f6e80a8 Author: Mikhail Zabaluev Date: 2009-01-27 16:38:19 +0200 A few more cleanups and minor fixes to the heartbeat code commit 9e6a7318b86f645ce9cc78b6387838233a7e86bb Author: Mikhail Zabaluev Date: 2009-01-20 15:45:38 +0200 Bump the maximum deferrable timer interval for Sofia event loop It should be aligned with the maximum heartbeat interval. commit f597f5778e183f51b1933732dcecb3a537e497f2 Author: Mikhail Zabaluev Date: 2009-01-19 20:20:37 +0200 Fixed the IP heartbeat usage so that it works commit b8f4f21f681144909f301f56b4ca57807b497bd9 Author: Simon McVittie Date: 2009-01-16 16:46:41 +0000 tpsip_handle_normalize: raise InvalidHandle on error As recently agreed in telepathy-spec. commit 8f49952cb147519d7b36f84477437d5b64986b67 Author: Mikhail Zabaluev Date: 2009-01-16 16:27:45 +0200 Implemented Maemo IP heartbeat support commit 2e65d0623519ebd21d1b1b41d0ee55d5334449b0 Merge: 4866404 816cbea Author: Mikhail Zabaluev Date: 2009-01-13 21:22:45 +0200 Merge branch 'master' into heartbeat commit 816cbeaa34ff02439ce24e2203e9ec641dd64492 Author: zabaluev Date: 2009-01-13 16:23:45 +0200 Development nano version 0.5.14.1 commit 906cb2c3a808d45e6416e326fcde13e84dd476a8 Author: Mikhail Zabaluev Date: 2009-01-12 19:37:08 +0200 Version 0.5.14 commit e07d314c5a0fce689a26728f7a259b6cecbe42db Author: Mikhail Zabaluev Date: 2009-01-12 14:17:59 +0200 Bumped the Sofia-SIP required version to 1.12.10 The reason is to avoid crashes reported as e.g. fd.o bug 19372. commit 48664046735ae1826340e514c85ce7f7c586696d Author: Mikhail Zabaluev Date: 2009-01-02 19:41:18 +0200 Experimental addition of a heartbeat wait source to the Sofia root As implemented currently, a mainloop timeout drives I/O events by writing to a pipe. Deferrable timer functionality from the heartbeat branch is not used yet. commit 1f8076a74be0cff0be75c86196d73db8fbe6f8bd Author: Mikhail Zabaluev Date: 2008-12-16 19:10:41 +0200 Zero-initialize the GValue for the alias pair commit 21b8f2a23082991f0397aca67cb262ef898ebea0 Author: Mikhail Zabaluev Date: 2008-11-28 18:38:13 +0200 Development nano version 0.5.13.1 commit ea16d2481108f2770fffc8c8f107d55835a073e5 Author: Mikhail Zabaluev Date: 2008-11-28 17:58:51 +0200 Version 0.5.13 commit 2fe98897c19573dec7dd36669acc9f59a16dfc98 Author: Mikhail Zabaluev Date: 2008-11-28 16:39:56 +0200 Emit NewChannels/NewChannel on incoming media channels commit 3a7696756cb7a3d3992c897a96e6ab831762cfcb Author: Mikhail Zabaluev Date: 2008-11-28 16:14:36 +0200 Fix the 'TargetID'/'target-id' property on TpsipMediaChannel commit 5cf95a56290886674748d292cdbaf52cb419f117 Author: Mikhail Zabaluev Date: 2008-11-27 16:56:07 +0200 Do advertise Requests interface as supported by the connection commit f64a0763a5402a01836b3e2b7e91527cdaaf6734 Author: Mikhail Zabaluev Date: 2008-11-26 17:46:31 +0200 Development nano version 0.5.12.1 commit 4f500ac1a9dbd5b50daffeb20f3f3b13aee73c47 Author: Mikhail Zabaluev Date: 2008-11-26 16:50:39 +0200 Version 0.5.12 commit 12d4b2214804d57d0ad84db9b159e05c818d7a9a Author: Mikhail Zabaluev Date: 2008-11-20 09:57:57 +0200 Added Destroyable to the list of text channel interfaces commit ebc5661a1dfe3c78a946f481e010e365c75d1f25 Merge: 45325db a9a603d Author: Mikhail Zabaluev Date: 2008-11-19 19:04:51 +0200 Merge branch 'requestable-channels' into spec-0.17.14 commit a9a603d2bdcca9d4a46ec218543914d036fb96ea Author: Mikhail Zabaluev Date: 2008-11-19 19:01:44 +0200 Removed the pullable m4 libtool macros, and added the .gitignore rules commit 747eaec256ec83ceec45801e1fdea09548b43d37 Author: Mikhail Zabaluev Date: 2008-11-19 18:55:03 +0200 Addressed the review comments commit 45325dba49bf85d96645d8e3218aea29e2c66182 Author: Mikhail Zabaluev Date: 2008-11-18 20:56:16 +0200 Set the flag Channel_Text_Message_Flag_Resqued on pending messages of a resurrected text channel commit 9b9751b130ffa9dfb50dc0b290baab031dfaa54e Author: Mikhail Zabaluev Date: 2008-11-18 20:07:52 +0200 Test Destroyable on text channels commit 77756d5777a797aaeae3f0a2c6ce6ff13c81fb17 Author: Mikhail Zabaluev Date: 2008-11-18 19:46:21 +0200 Implemented Destroyable interface on TpsipTextChannel commit 0a33623437fe4287c3b4d3cc02d0ba52333dc517 Author: Mikhail Zabaluev Date: 2008-11-18 20:11:36 +0200 Guard against disconnecting signals that were never connected commit 1352e5a584c3c02940b341f38323f2b14ace625b Author: Mikhail Zabaluev Date: 2008-11-18 11:39:43 +0200 Blanket ignore rule for Eclipse project files commit 11f9d73cba5d3740e12ded78736f3065b0b3c0b0 Author: Mikhail Zabaluev Date: 2008-11-18 11:36:47 +0200 Added M4 macro files for libtool These have been sucked in by autotools on Ubuntu. commit fe54a8f6137b1706a1324e5432183fe963948d42 Author: Mikhail Zabaluev Date: 2008-11-17 17:56:40 +0200 Fixed a printf format warning commit 77502a45f51f3359514979cae81eaac6d69023e0 Author: Mikhail Zabaluev Date: 2008-11-17 17:53:58 +0200 Made source generation rules more robust In case of a tool failure, the output file is removed. commit ca3fd34d44121982aab0df21cc51c56e353d9fd6 Author: Mikhail Zabaluev Date: 2008-11-18 11:31:14 +0200 Added a test case for Requests interface using text channels commit 74a85bc50a6c2740f188eba5e18c28503bc7dccd Author: Mikhail Zabaluev Date: 2008-11-07 17:50:30 +0200 Cleaned up header inclusions commit 5b589673d50ab143b61f2c0d69210b10d11f1ac7 Author: Mikhail Zabaluev Date: 2008-11-07 17:49:54 +0200 Connection uses channel managers instead of factories commit e781d7d4269daa2329d274c016c7e846d4ce15f8 Author: Mikhail Zabaluev Date: 2008-11-07 17:36:31 +0200 Reimplemented TpsipTextFactory as an implementation of TpChannelManager Implemented ExportableChannel on text channel. commit 525b218f2b1d334364de8e4f43f50b7190ba7c47 Author: Mikhail Zabaluev Date: 2008-11-06 14:51:11 +0200 Reimplemented TpsipMediaFactory as an implementation of TpChannelManager TpsipMediaChannel changed to comply. commit c57a8d36135a439686460de28865a28dd2f9e377 Author: Mikhail Zabaluev Date: 2008-11-06 15:07:19 +0200 Removed const qualifiers for members of DBus property mixin initializer arrays They are non-const as per the API, and must in fact be writable. commit 32e350c09bc90896f09e2f50b6f74796741156d6 Author: Mikhail Zabaluev Date: 2008-10-30 18:52:36 +0200 nano 0.5.11.1 commit b0bf6356341598de18853103d222a398932abfed Author: Mikhail Zabaluev Date: 2008-10-30 18:33:38 +0200 version 0.5.11 commit 4515013f50fbfb8b2b16c059351a78efe0d4ef60 Author: Mikhail Zabaluev Date: 2008-10-30 15:41:48 +0200 Untabify commit 21e24945c5ebe558d5659d40836d60fefacc2e00 Author: Mikhail Zabaluev Date: 2008-10-28 19:59:18 +0200 Removed user=phone in normalization tests commit 8f0a45f15d9934ac6ecfbcb842d49f0683dbaf51 Merge: 3659e71 4824a76 Author: Mikhail Zabaluev Date: 2008-10-28 19:58:37 +0200 Merge branch 'master' into no-user-phone-in-url Conflicts: src/sip-connection-helpers.c commit c151116dad868d72dde0d5c9144289506ce8a8f5 Author: Mikhail Zabaluev Date: 2008-10-24 21:13:51 +0300 Don't free a GError before using its data commit 5702902c5ce3cbe1cdd74dfadd4bc4d3d00b4b1a Author: Mikhail Zabaluev Date: 2008-10-24 20:53:35 +0300 Respond 200 OK for pending messages auto-acked with ListPendingMessages(True) Also, don't leak the pending message data in this case. Tests expect the 200 responses after ListPendingMessages(True). commit ec6c5d4071849a646a86d1c6d5535e9fc60dcda8 Author: Mikhail Zabaluev Date: 2008-10-24 20:04:46 +0300 Test reopening of text channel with pending messages and ListPendingMessages commit 08353c9278624aa313a5c126054e938c5d1c10ca Author: Mikhail Zabaluev Date: 2008-10-24 18:09:42 +0300 Call AcknowledgePendingMessages and check for SIP responses commit 65fa44a1d975d49422c2229946a8b34e5ac937e6 Author: Mikhail Zabaluev Date: 2008-10-24 18:03:12 +0300 Bubble responses received by the fake SIP proxy as 'sip-response' events We can now check and match responses in tests. commit 0aaa7de9b935b4eb0310f0ed046d84888892cebf Author: Mikhail Zabaluev Date: 2008-10-24 15:15:59 +0300 Message test brush-up commit 83fe97a0a73ea294a8ac091bba0b1a32f643281c Author: Mikhail Zabaluev Date: 2008-10-24 15:03:49 +0300 Test all text channel properties as currently implemented commit 77bdbfa71e7d16ddc8994fa680988d88cc70ef03 Author: Mikhail Zabaluev Date: 2008-10-24 12:21:49 +0300 Bind the test SIP proxy to the loopback interface only Also tell it to use 127.0.0.1 and the port number in Via headers. commit 069726215d331d4db80f64b3093f577d503c7a73 Author: Mikhail Zabaluev Date: 2008-10-24 14:16:33 +0300 Incomplete test for AcknowledgePendingMessages Also tightened up header formation in fake proxy messages commit e321934e802df44347279e600ae9c0a67fbed874 Author: Mikhail Zabaluev Date: 2008-10-24 14:12:47 +0300 Put some brainpower into saving the NUA message structure The previous code for that was stupid and broken. commit 5fbe4c5a05fc2f45753025f5948adbcc0e886fb6 Author: Mikhail Zabaluev Date: 2008-10-21 15:19:25 +0300 Resurrect a text channel if it has pending incoming messages commit 6dd5e182528c763e42a7424a63b900be79bc8058 Author: Mikhail Zabaluev Date: 2008-10-21 12:17:38 +0300 Added property "channel-destroyed" to TpsipTextChannel commit d9478366c4a1a3119efdaf6aa4e5362579ebd24f Merge: 9f9f3a3 4824a76 Author: Mikhail Zabaluev Date: 2008-10-21 11:51:48 +0300 Merge branch 'master' into text-fixes commit 4824a76b715f63cf53e081a4e547b798c3483f4d Author: Mikhail Zabaluev Date: 2008-10-20 21:37:52 +0300 Safer boolean result for tpsip_debug_flag_is_set() commit 19959bc69760e16560c7b3499b4b1004de5b2115 Author: Mikhail Zabaluev Date: 2008-10-20 21:36:33 +0300 Pretty-formatted and optimized SESSION_DEBUG commit 9f9f3a314dd6c1ac695959f7f43d04f7e70251c9 Merge: 0ea293a 6e19069 Author: Mikhail Zabaluev Date: 2008-10-20 18:28:50 +0300 Merge branch 'master' into text-fixes commit 4a171a9affe4bf37a775300f6f4c785dfe6e979c Merge: 7ad9fe4 6e19069 Author: Mikhail Zabaluev Date: 2008-10-20 18:19:22 +0300 Merge branch 'master' into media-session-cleanup commit 6e1906972cf4954f9e4040d8472f0ee0eb6842fe Author: Mikhail Zabaluev Date: 2008-10-20 18:13:50 +0300 Bumped the telepathy-glib dependency to 0.7.17 New DBus properties require tp-glib supporting the spec version 0.17.13. commit 309b7cf54c3597701fa703513bba3870afda3c25 Author: Mikhail Zabaluev Date: 2008-10-20 18:13:04 +0300 Fixed a stupid crash commit 7ad9fe4545021439634694f145d182781cf98e3d Merge: 08aaf1c 19bc2da Author: Mikhail Zabaluev Date: 2008-10-20 15:10:39 +0300 Merge branch 'call-group-fixes' into media-session-cleanup commit 19bc2da4d8b5708eaf312815dbea27aadbc0ea3f Merge: ce1b2d1 a2301e4 Author: Mikhail Zabaluev Date: 2008-10-20 15:09:04 +0300 Merge branch 'spec-0.17.13' into call-group-fixes Conflicts: src/media-factory.c src/sip-media-channel.c commit a2301e4643f1f3db2f8e471082adcf25354b7b71 Author: Mikhail Zabaluev Date: 2008-10-20 14:59:02 +0300 The "handle" property on TpsipMediaChannel really conveys the requested handle commit 9bcfdb9962dfc57d4732a23ea6817b507b35e16f Author: Mikhail Zabaluev Date: 2008-10-20 14:11:01 +0300 enamed "creator" property to "initiator", for consistency with the DBus name commit 08e38b41ad3c4afbe6eb62438b474ad90f301505 Author: Mikhail Zabaluev Date: 2008-10-20 14:00:10 +0300 Assign initiator handle to the right TpsipTextChannel property commit 0ea293af72ed3f97c9a9bc9a1f63d2c873b918cd Author: Mikhail Zabaluev Date: 2008-10-19 23:30:50 +0300 Renamed tpsip_text_channel_close_async to tpsip_text_channel_dbus_close commit 5e017efa9dfdd0e23a48916b28027bbec145fc57 Author: Mikhail Zabaluev Date: 2008-10-18 11:41:44 +0300 Moved incoming INVITE and MESSAGE handlers to their respective factories commit b7b0eb1004c690e59b3f790a5f21833c994c5bda Author: Mikhail Zabaluev Date: 2008-10-18 01:28:51 +0300 Do one less whole-body strdup (and strlen) per received message commit 3fedae3b29595b4ed420bf32e8a1f726a2265bd8 Author: Mikhail Zabaluev Date: 2008-10-18 01:26:56 +0300 Header and definition cleanup commit 3a7e80f37de7ee13d2776405f200eac7ac4b2314 Author: Mikhail Zabaluev Date: 2008-10-17 20:16:06 +0300 Kill the auth hash table that went unused long ago commit b2e95cdf212788feed879f46d3569d1d250b7d18 Author: Mikhail Zabaluev Date: 2008-10-17 20:13:19 +0300 Delay the final 200 response to an incoming MESSAGE until acknowledged commit 7526bab6a2443f5c40f505e21afcdb20820863c1 Author: Mikhail Zabaluev Date: 2008-10-17 18:28:10 +0300 Rename the outgoing message queue to avoid confusion 'Acknowledge' has another associated meaning in Telepathy text channels. commit 394f6e570bca7c6afe2fc0303d000d01675c591c Author: Mikhail Zabaluev Date: 2008-10-17 18:25:48 +0300 Don't leak the sender handle when text messages are zapped commit 278dd0ee6e59aea502a7473e9cf140c97501225c Author: Mikhail Zabaluev Date: 2008-10-16 19:46:20 +0300 Fix a GObject property name, declare the new DBus properties to the mixin commit c87080456e1cfcf3dc90bdb2d6203659da007235 Author: Mikhail Zabaluev Date: 2008-10-16 18:24:02 +0300 Implemented text channel properties InitiatorHandle, InitiatorID, Requested commit 08aaf1c19bfe2cb6e300d6fcad0f6c4f80482668 Author: Mikhail Zabaluev Date: 2008-10-16 16:50:21 +0300 Removed the idle catcher for a missing nua_i_state event The g_assert_not_reached() was never reached in testing, apparently Sofia-SIP behaves as we expect it to. commit 6575f97d765bd3d6819bb3b50894808ba6d6e42b Author: Mikhail Zabaluev Date: 2008-10-16 16:43:47 +0300 Added a FIXME comment about implementing incoming CANCEL for a re-INVITE The situation is exotic, but possible, like so many things in SIP. commit ce1b2d1b3a752d5518f5c34fce33c97a5ae038c3 Author: Mikhail Zabaluev Date: 2008-10-16 16:37:33 +0300 The hardcoded request timeout is bad, removed The lifetimes of INVITE transactions that are reflected on Telepathy are better left to the clients and the channel dispatcher. Retained a timeout, now safely long and managed inside Sofia-SIP, only for outgoing re-INVITEs. commit b18e131b9761f377f846a6b914e21fee6e21ee25 Author: Mikhail Zabaluev Date: 2008-10-16 15:12:00 +0300 Simplify the media factory code by exporting channel's add_member override commit 032eed790001bc5cf91db167ffe9f9e5d262fe27 Author: Mikhail Zabaluev Date: 2008-10-16 15:04:34 +0300 Renamed tpsip_media_channel_close_async to tpsip_media_channel_dbus_close commit dd55960b6fd77aae66f8efc96a4d78b1ebb6b5b7 Author: Mikhail Zabaluev Date: 2008-10-16 14:54:51 +0300 Tightened up the code for call channel group membership changes The actual changes and emissions are now concentrated in the callback for protocol session state changes, plus the cases when a call termination reason and text is obtained from the protocol messages. commit 2f1a2d12741b8ebcf92d2a3c80f6216c9006e30a Author: Mikhail Zabaluev Date: 2008-10-15 19:03:15 +0300 Renamed tpsip_media_session_reject to tpsip_media_session_respond That better reflects what the function does. It does not check if the status is a final one. commit 9c44c269bf6d0b744a210e408912c3ddc710d7d5 Author: Mikhail Zabaluev Date: 2008-10-15 18:50:02 +0300 Implemented media Channel properties InitiatorID, InitiatorHandle, Requested The "creator" GObject property of TpsipMediaChannel backing InitiatorHandle is also used to clarify the internal logic. commit f74e1591586b3cb9c9dfc37c5fbe880ffb820192 Author: Mikhail Zabaluev Date: 2008-10-14 11:03:40 +0300 ...and yet more commit 43c67fced5cd04c6751e43a0d8091ae0c8390d85 Author: Mikhail Zabaluev Date: 2008-10-13 20:14:22 +0300 Optimized URL part lowercasing a bit more commit eb78e46ff1dad844ffe86c2b98d3469afb9142f6 Author: Mikhail Zabaluev Date: 2008-10-08 19:21:40 +0300 Alignment fix commit 2d80bc40adcd4e6b2493772acdc7afb2910f5b53 Author: Mikhail Zabaluev Date: 2008-10-08 18:57:09 +0300 Use explicit ASCII character ranges in regular expressions Usage of POSIX character classes brings the locale concerns. commit b25a2d26d785b99df2f1beab9f0cb846b634fd5f Author: Mikhail Zabaluev Date: 2008-10-08 18:46:23 +0300 More tests for normalization cases commit 24519631c13e09032fbc09a9e9c396e86d725cf8 Author: Mikhail Zabaluev Date: 2008-10-08 18:45:09 +0300 Lowercase the URL schema commit e21887139836dccd2bd7f7b38f47cbfe5edd7d95 Author: Mikhail Zabaluev Date: 2008-10-08 13:22:25 +0300 Updated .gitignore for the test buildfiles commit 6b584ce3e7f9528c885d5bd3ee67a9a9afa94264 Author: Mikhail Zabaluev Date: 2008-10-08 12:27:08 +0300 Add SIP traffic to telepathy-sofiasip test logs Also changed the debug environment variables to the new naming prefix. commit d32a6942eddb86950c4a3ac98cb8d96f66eb67dc Author: Mikhail Zabaluev Date: 2008-10-08 12:26:46 +0300 Properly address the incoming messages in the test commit 47c921fef658bfa6ca20427bfdd1f4c895a8cc34 Author: Mikhail Zabaluev Date: 2008-10-08 12:25:02 +0300 Properly (ahem) initialize a temporary Sofia home commit b9409e65d525f5da906e73d21fbbac6b81e0bc3f Author: Mikhail Zabaluev Date: 2008-10-08 11:59:24 +0300 Updated the unit tests to verify the new phone number normalization rules commit ffad50da3db7bea80fbafb1a8fb51cf3493624a7 Author: Mikhail Zabaluev Date: 2008-10-08 11:47:21 +0300 Reverted the normalize context to be TpsipConnection commit aeb9c40e800cb777d2b39f81dac5ac1940881673 Author: Mikhail Zabaluev Date: 2008-10-07 16:45:12 +0300 Initialize TpsipConnection's account_url from the contact handle repo URL commit 6f53c88d0b0311a69f52f5043c552cc4cbbdb2d7 Author: Mikhail Zabaluev Date: 2008-10-07 16:40:33 +0300 Interpret the context pointer in tpsip_handle_normalize as the base URI Also made some opportunistic memory use fixes and cleanups. commit 402425e5792c0278b8753393242c54aec8a17c80 Author: Mikhail Zabaluev Date: 2008-10-07 16:06:48 +0300 Put the self alias in From headers of outbound requests. Use the "alias" property on TpsipConnection as the display name in From when constructing outbound requests. commit 3d0bc4682a3ab399f3ca294b0fa098c9041b8db1 Author: Mikhail Zabaluev Date: 2008-10-07 15:52:17 +0300 Use the URL contact helper when creating To: headers in requests Discarded the TODO comment about setting the display name in To:. There is no meaningful use for that. commit 9d95f9834beb51f8317d90f292ad2b0b6cabf30c Author: Mikhail Zabaluev Date: 2008-10-07 15:29:05 +0300 Added the connection manager parameter "alias" commit 78871db9e046a0faf3e5d714bd1fd88e86a8bea0 Author: Mikhail Zabaluev Date: 2008-10-07 15:28:02 +0300 Implemented the Aliasing interface on TpsipConnection commit 6f4f229066df9152af7a76e6cf9fd2ffcff11908 Author: Mikhail Zabaluev Date: 2008-10-07 12:09:14 +0300 WIP: reimplemented URI normalization with use of GRegex commit 3c42d2757818b1c7f57725ad1b1f54dc6803f4fb Author: Mikhail Zabaluev Date: 2008-10-07 12:04:43 +0300 Bumped the GLib dependency version to 2.16 This version introduces the URI escaping function that we're going to use. telepathy-glib requires the same minimum version. commit 4c8802b9b12121e0f2b225ff43622ef96ef9f363 Author: Mikhail Zabaluev Date: 2008-09-10 12:19:24 +0300 Added implementations for Contacts and DBus properties to TpsipConnection commit 11c21d00fac9e3e752445e5f41eeb22da81d6819 Author: Mikhail Zabaluev Date: 2008-09-09 19:13:00 +0300 Implemented TargetID DBus property for text Channels commit c569b9f0263ceafe3d86cd15ce5be58eb13bb276 Author: Mikhail Zabaluev Date: 2008-09-09 18:43:36 +0300 TargetID DBus property and Group interface properties on media channel AFAIK, I only needed to add TP_CHANNEL_GROUP_FLAG_PROPERTIES to the group flags to fully enable the DBus properties for the Group interface. commit 7f6706884842e9f91e553a02ac04bf67f8003f2c Author: Mikhail Zabaluev Date: 2008-09-09 17:18:57 +0300 Erased the unused "factory" property on TpsipMediaChannel commit 73d2d2acc10b59eb132bd5931feaa21394d25819 Author: Mikhail Zabaluev Date: 2008-09-09 17:11:15 +0300 Rearranged interface macros in the class type definition commit 3659e71e24b23aa00c62f3ebdb394d302d4c857a Author: Mikhail Zabaluev Date: 2008-08-27 13:23:39 +0300 Don't append user=phone parameter to SIP URIs normalized from telephone number-like strings commit 540e56a7deeed611561973e465c430e18ce3bb4b Author: Mikhail Zabaluev Date: 2008-08-26 16:29:13 +0300 Replaced the ChangeLog autogeneration dist-hook for darcs with one for git Copied the rule from telepathy-gabble. commit 135f4a6a4a3b443d05c448b90ec82ef20c8f31e6 Author: Mikhail Zabaluev Date: 2008-08-22 12:12:13 +0300 Removed _boring commit 8bc2a0a1a7614f8a0b5ad43b7e486e129a5ea7a7 Author: Mikhail Zabaluev Date: 2008-08-22 12:11:41 +0300 Added .gitignore commit 18b80315199612c2d783fcaf56c5754eea6995bd Author: Mikhail Zabaluev Date: 2008-08-22 11:49:20 +0300 Deleted the post-migration .git-darcs-dir files commit 8f4becf0d880191185d0b35fe2f11262a00c0582 Author: Mikhail Zabaluev Date: 2008-07-21 17:42:53 +0000 Nano version 0.5.10.1 20080721174253-5b6ca-7b19131579b7753946c6b1c2ad6ebc6790f61fa2.gz commit 05f627f4c1dcf8e9eb26b3d305cc0a796114ae65 Author: Mikhail Zabaluev Date: 2008-07-15 11:25:23 +0000 version 0.5.10 20080715112523-5b6ca-531bea6de30a1283237f1b58f8e8344d655885e1.gz commit d13078f222438b4bf2ab50b9c236379a5b5b5dcd Author: Mikhail Zabaluev Date: 2008-07-10 14:20:59 +0000 TpsipMediaStream: safeguard against the case when no remote RTP payloads are declared 20080710142059-5b6ca-cb614da56f66d29d25f2ebd8623afdaaeee75469.gz commit ec5fd795ca65c95ae8965863ad8aae7ae3ec5203 Author: Mikhail Zabaluev Date: 2008-07-01 12:05:39 +0000 TpsipMediaStream: emit SetRemoteCodecs even if the remote codec list is empty, to prevent possible snags in session negotiation sequence. 20080701120539-5b6ca-bc54c89e89081660f441efe311dc1c43e30bfa7a.gz commit 9b0715944844afee4bbcd48485827f640fdafc4e Author: Mikhail Zabaluev Date: 2008-07-10 14:13:40 +0000 TpsipMediaStream: more whitespace for clarity 20080710141340-5b6ca-b9e83bc5fc2ae552cbc8ccbd628fdd7ffbca4b47.gz commit 2da35d2968549f7565668f8c92673e711f568829 Author: Mikhail Zabaluev Date: 2008-07-02 16:09:35 +0000 TpsipMediaStream: guard against null pointer to the fmtp string 20080702160935-5b6ca-ce35a1faff367cacbbfa45aa9a5e545052e5d94f.gz commit 1e9fb06220e67b595631b353bf1c1eada4f00510 Author: Mikhail Zabaluev Date: 2008-07-01 11:53:38 +0000 TpsipMediaStream: redone the a:fmtp attribute line parser. It's now more permissive in what might constitute a parameter value, to allow unquoted base64 strings as used with H.264 and Vorbis. Values given as quoted pairs are properly unquoted. 20080701115338-5b6ca-55069a227ae840079d1c05e3a0ad582cf39a431e.gz commit 6c4d1e7b09aae7827ee4ddfd7d374b427edbf566 Author: Mikhail Zabaluev Date: 2008-07-08 13:43:44 +0000 Reformatted the rest of param specs. Use G_PARAM_STATIC_STRINGS convenience macro available since GLib 2.13. An occasional description string got a facelift. 20080708134344-5b6ca-4d0c11c3ff1e3077111e013eb32433abc3cc87d0.gz commit fdb62491999a441db65afc668a437f0a426188bf Author: Mikhail Zabaluev Date: 2008-07-01 11:40:23 +0000 Bumped the glib dependency version to 2.14 to use GRegex 20080701114023-5b6ca-4616f2a1a846e12b45c3a854ed6b77733db54fb7.gz commit e5914de8d9b2bdaabe7065683b62b1de55e1c8e1 Author: Simon McVittie Date: 2008-07-01 20:10:25 +0000 test-message.py: exercise the Channel D-Bus properties 20080701201025-53eee-edf418b962a55d23c09ff80edcb53c3b3edbb3bd.gz commit c71898667b7418d60d9546ec39028fdf5343245d Author: Simon McVittie Date: 2008-07-01 20:10:00 +0000 TpsipTextChannel: implement the Channel properties from spec 0.17.7 20080701201000-53eee-ac4381f50f5c1a61348fe3100a5b9668bbf4d89c.gz commit 9cf7b8d72119f66a956839b265450968aa8505da Author: Simon McVittie Date: 2008-07-01 20:09:54 +0000 TpsipTextChannel: add a GObject property 'interfaces' 20080701200954-53eee-f14f247dac7f5c547092b705e44c9ac4231e16f9.gz commit f96bf267cced7d818710c0e2f8ab44777a910a95 Author: Simon McVittie Date: 2008-07-01 20:06:55 +0000 test-message.py: simplify by assigning Text channel type to a variable 20080701200655-53eee-35c8097c2f96e8d492507b7d32664d224b5a99c4.gz commit 1a2c1e99c3600ab2512311ee5ad673b2be915149 Author: Simon McVittie Date: 2008-07-01 19:38:35 +0000 TpsipTextChannel: update copyright year 20080701193835-53eee-6c90f09fc639f6f82800bb18cbe394bdc0661fd1.gz commit e7d984ad0f5f4f65e13559a7f81ed0d3e1ba4a56 Author: Simon McVittie Date: 2008-07-01 19:38:14 +0000 TpsipTextChannel: re-order headers as per Telepathy coding style 20080701193814-53eee-f70f8026288a50df8a1e83f5f544fccb82723e78.gz commit 6796a898e7675488247cd7a04737af196f65a392 Author: Simon McVittie Date: 2008-07-01 19:33:38 +0000 TpsipTextChannel: re-indent g_param_spec_object call, and add G_PARAM_STATIC_NAME for less strdup()ing 20080701193338-53eee-c372586e7a9ddfb0c2acdf9ac8604fdda757e390.gz commit bc0c90860fc207dc4aadb4511b8913c1f7a49d76 Author: Simon McVittie Date: 2008-07-01 19:30:15 +0000 TpsipMediaChannel: additionally add the Group D-Bus properties (GroupFlags etc.) 20080701193015-53eee-c7d1e0e583249176c48b656ea3cc02d1cda254fa.gz commit cfaeb412b03cc2cb147e2c34268c261c62c1bd22 Author: Simon McVittie Date: 2008-07-01 19:29:44 +0000 TpsipMediaChannel: add the Channel D-Bus properties (TargetHandleType etc.) 20080701192944-53eee-9e74d4509ca31161711687e73f3022b7ac40c5c8.gz commit c697579bc568e2f38a0b0f4886c42e814de7f925 Author: Simon McVittie Date: 2008-07-01 19:29:08 +0000 TpsipMediaChannel: add an 'interfaces' GObject property 20080701192908-53eee-70f08de142d5dd56a1f296e30096da66d4d1c1ad.gz commit 72e9cd5574c8e3de9486e5d8c3ce022f9532f978 Author: Simon McVittie Date: 2008-07-01 19:28:29 +0000 TpsipMediaChannel: re-indent property definitions and give them all static name|nick|blurb 20080701192829-53eee-715d6379fa1e307adee0fb1d9850042cc3613ec2.gz commit fd2cf6397d83de2e1a4e5f70ca5586e1db76557e Author: Simon McVittie Date: 2008-07-01 19:24:36 +0000 sip-media-channel.h: re-order headers as per Telepathy coding style 20080701192436-53eee-8a3a8a9c37a677e60ec9fbba707a318fd34a69ed.gz commit c69233d4fcc15bffe0cc5ee3fb9fd1de8c2ab3d3 Author: Simon McVittie Date: 2008-07-01 19:10:53 +0000 TpsipMediaChannel: rearrange headers as per Telepathy coding style 20080701191053-53eee-0f93485104490e13ab4506fed378c54bc920b4ae.gz commit 5cca18ba5a85dbe27542b024ceb1eeca23bb3809 Author: Simon McVittie Date: 2008-07-01 19:09:47 +0000 Require telepathy-glib 0.7.10 for spec 0.17.7 20080701190947-53eee-2c321da14db050a1f1482c7029ac11086c662a99.gz commit ed67679d5dd2edc083f440d6a94eff1850ce2a6c Author: Mikhail Zabaluev Date: 2008-06-04 16:17:52 +0000 TpsipMediaChannel: moved CallState management to the nua_i_state handler, eliminating the last reason for the nua_r_invite handler to exist. 20080604161752-5b6ca-edd7b3bc495f6568e3e56b9360d21fe33d8fbc7d.gz commit 16ae19f9abe4a11682dd9697b0921a930a5f3dcd Author: Mikhail Zabaluev Date: 2008-06-03 16:46:35 +0000 Ported the glare fix to trunk 20080603164635-5b6ca-dcd8f2c0aff30e5828c5bee4bbbdc2840ba82a4b.gz commit 6726e7bf97fdf27f94652c6166b6f1ef2a41577e Author: Mikhail Zabaluev Date: 2008-06-03 15:42:33 +0000 SIPMediaChannel: have the session resolve glare on a 491 response 20080603154233-5b6ca-c7e6eb3d954a41b0634d60ea69481252361607b6.gz commit 0f302cf8f6c50338a99f69afcbf2063c7a3d6f99 Author: Mikhail Zabaluev Date: 2008-06-03 15:39:06 +0000 Introduced a new session state, 'reinvite-pending', as the way to resolve glare conditions on re-INVITE 20080603153906-5b6ca-0b4705218f7abdb74922b5b094b6134f29046e74.gz commit 88edb852ab0b2e3c52eba65cf02f3c6aff378cc7 Author: Mikhail Zabaluev Date: 2008-06-03 15:52:06 +0000 TpsipMediaChannel: don't accept the session on non-2xx status codes when NUA state changes to ready. That case is awaiting another patch. 20080603155206-5b6ca-5067403a6caaf60d6df327f21aa602ccc2c7c35c.gz commit a9839d8ad5a4dacaf25c870bed8c94d13e0dfd74 Author: Mikhail Zabaluev Date: 2008-06-03 15:45:09 +0000 TpsipMediaChannel: revert to handling call termination in the nua_i_state handler, not in nua_i_terminated. The latter is deprecated. tpsip_media_channel_peer_error() is again just a function to report the response, not terminating the session itself. 20080603154509-5b6ca-af30c324a3e21686dd6b19cd873d6c1d26f3d6c6.gz commit 2c37ac9ffbd5347eccc71727f032a969ae747d94 Author: Mikhail Zabaluev Date: 2008-06-03 15:56:50 +0000 version 0.5.9.1 20080603155650-5b6ca-afec1be98862d91a3fb456efc7d6b53314aabd3f.gz commit 6d5daf7c745296b7ec9840e0b1a029d8f98bbaea Author: Mikhail Zabaluev Date: 2008-05-21 12:16:24 +0000 version 0.5.9 20080521121624-5b6ca-60789fe0bf380a95866b0f99e3067cb3fd2ee334.gz commit 8f26eef352a44d89256295884d4d82968359fb35 Author: Mikhail Zabaluev Date: 2008-05-21 11:53:55 +0000 TpsipMediaSession: added debug tracing for remote hold status update 20080521115355-5b6ca-de2c08dac247bdf7745b6cc6d58cb7d6edafb5b1.gz commit 763836183ac726e421fc5fcab00e5c64344aae81 Author: Mikhail Zabaluev Date: 2008-05-20 17:42:06 +0000 Ported the pending offer/pending remote send state interaction fix to the trunk 20080520174206-5b6ca-d530105ebef884df1ec3c5e0e4ef1a23686cc800.gz commit 70c23413cc4751c94b53c9a512e93b80098b7a99 Author: Mikhail Zabaluev Date: 2008-05-20 17:26:18 +0000 Don't remove or apply the remote pending send flag if there is a pending SDP offer 20080520172618-5b6ca-d57efbae260b86b051c51793193bd6f61de65db5.gz commit 55b0ae788ca30782346e2a9fffd8ad9e68dc80c9 Author: Mikhail Zabaluev Date: 2008-05-19 15:10:59 +0000 TpsipMediaSession: renamed the label epilog to finally, to align with a convention in some other Telepathy code 20080519151059-5b6ca-608cd3a7c697a46b0285c89b2b2313381952e8ba.gz commit c5bb7c10cfad25f1e60ad80f04db78c9f88badad Author: Mikhail Zabaluev Date: 2008-05-19 14:29:10 +0000 TpsipMediaStream: removed an outdated comment about implementation gaps in SDP generation 20080519142910-5b6ca-3c96984d1f1552da10ce4120e84c62c64839d91a.gz commit 85f9c1288eec4db149608d7a44e6021da1bb4a6a Author: Mikhail Zabaluev Date: 2008-05-19 14:27:41 +0000 TpsipMediaSession: SDP media line loop condition beautified 20080519142741-5b6ca-2fa0a9d5968052af45e66c1492d9ee164f6f2069.gz commit 642d4350540df9f4ffefd59582c6b18bbf6aae51 Author: Mikhail Zabaluev Date: 2008-05-19 14:22:47 +0000 TpsipMediaSession: make sure state transitions after a remote media update are not always hinged on a stream engine roundtrip. Pointedly, remote codec list updates were made optional in an earlier patch. 20080519142247-5b6ca-5aa675c8f09eec131f4366cd3d1088a39cbcaa23.gz commit 73a4cac31feea5ada1b6fd6a7ac88e83810d4f21 Author: Mikhail Zabaluev Date: 2008-05-16 15:42:33 +0000 Don't use locale-dependent strtoul() to decode URL escapes 20080516154233-5b6ca-9558074a56e38c6a9741f28632d0d39ab0d89f31.gz commit 800cd188b0895311d2a233627da660645c98d6c2 Author: Mikhail Zabaluev Date: 2008-05-16 15:41:33 +0000 Removed obsolete _tpsip_nh_expired anchor 20080516154133-5b6ca-a10d9596831b7125db89e82d460f030109bc36d0.gz commit a89bfd213e7ff0f1db6384207efa022040e1ec1c Author: Mikhail Zabaluev Date: 2008-05-16 16:02:01 +0000 TpsipMediaStream: refactored priv_append_rtpmaps() out of priv_update_local_sdp() 20080516160201-5b6ca-99122e8a0c7762a2c2725f82877c92f9ce24ad04.gz commit 2120457c93c86fdce9f3349ca4221151e8dd06e4 Author: Mikhail Zabaluev Date: 2008-05-16 15:40:18 +0000 TpsipMediaStream: emit a=rtcp ahead of rtpmap lines for aesthetical reasons 20080516154018-5b6ca-d2a108f1558b65f22aca3c9a10fa1ece029912d3.gz commit 3bd98c46e424f1dfc7961d96fc1e32187c560dd2 Author: Mikhail Zabaluev Date: 2008-05-16 15:35:34 +0000 TpsipMediaStream: put a=rtcp attribute into the local SDP if there's an interesting RTCP transport component in the selected candidate 20080516153534-5b6ca-3727ec4c1d73c7a46e0991032daa399622573e0c.gz commit 655f1b746c28a0842a351be27cffc98da79ce1c2 Author: Mikhail Zabaluev Date: 2008-05-16 14:21:39 +0000 Trying to cover all RTCP-related bells and whistles we may meet in remote SDP 20080516142139-5b6ca-708fdf2d8b6ba798dfb10e5ce973163fbe1759a7.gz commit caefdf396c4ab1d45cdac0ed03ba2b26d0a84cfe Author: Mikhail Zabaluev Date: 2008-05-13 17:58:29 +0000 TpsipMediaSession: added a comment questioning the necessity of a large part of tpsip_media_session_terminate() 20080513175829-5b6ca-5f10ee9b77a4b7960564a59120da13ca855108cc.gz commit e124f2be17c34c96bb0303d952a1810884f35363 Author: Mikhail Zabaluev Date: 2008-05-13 17:56:17 +0000 TpsipMediaSession: ported the NUA handle disposal patch 20080513175617-5b6ca-9511f8f57efad91927e6b17b1e737219e40fcb36.gz commit abab4c94cdcec81da88a35edaf93e6f1fd87f813 Author: Mikhail Zabaluev Date: 2008-05-13 17:48:24 +0000 SIPMediaSession: make sure to destroy the NUA handle on session end 20080513174824-5b6ca-e5ffda8216c1d088227f14c89ecf5e7f23df2705.gz commit 5e08b0cf082711cdcb183eafe25b89b00a8765be Author: Mikhail Zabaluev Date: 2008-05-12 15:13:39 +0000 TpsipMediaChannel: ported the peer error termination fix to the trunk. A helper function was added that terminates the session locally. 20080512151339-5b6ca-ade76c4124fc2b4b741ebf5a5463f655f23ab73d.gz commit c7e564328c29ddbded782de398ecd4e78c5cc966 Author: Mikhail Zabaluev Date: 2008-05-12 14:34:39 +0000 SIPMediaChannel: cleaner termination on a peer error 20080512143439-5b6ca-a94b16b02e70a140bcad9ff2608bf78d62c3c9a9.gz commit 8569d9ee2a08be6fb1468ca5b5abc1979e4654ad Author: Mikhail Zabaluev Date: 2008-05-12 12:17:00 +0000 SIPMediaSession: restored priv_local_media_changed() in sip_media_session_request_streams(). We need priv->pending_offer set early to avoid closing off newly created streams when the answer arrives. 20080512121700-5b6ca-b8f0c3a3a15f8ba6b82774395aa465e7abbc2864.gz commit 06a9e01ff2662ee4b189be7acfb13a559a3d297e Author: Mikhail Zabaluev Date: 2008-05-12 11:57:24 +0000 SIPMediaChannel: be sure to close the channel when removing the remote member due to an error response to INVITE 20080512115724-5b6ca-6598bbeef7e85abfa455b87357b881fbfb8a878c.gz commit 31239ee4b9f9765a67c5166861d19f82f4e1b7ce Author: Mikhail Zabaluev Date: 2008-05-08 14:47:58 +0000 TpsipMediaSession: tracing for hold implementation functions 20080508144758-5b6ca-13314d7451d67bad069ae1d7e67495d70b6ce07a.gz commit 44b2989b13762d180fa7af056630cb5543da6d9a Author: Mikhail Zabaluev Date: 2008-05-07 15:20:27 +0000 TpsipMediaStream: don't push remote codecs to Telepathy if the codec list in SDP did not change 20080507152027-5b6ca-4ad9a54ca4621a4914e0393941f9768b1a10ceaa.gz commit 168acf1ba1a4c92b54342285a4916ad435b5134e Author: Senko Rasic Date: 2008-05-12 15:27:22 +0000 test-message.py: actually run the entire test 20080512152722-01440-7c2ded9d15651fcdc5971980299e8c71aae667e6.gz commit 68db08025a1431f22ccc35289b60518fcb52818b Author: Senko Rasic Date: 2008-04-29 21:07:39 +0000 update existing tests to the new api 20080429210739-01440-915ffebfab6052286e0e3bf691655378de47b06e.gz commit 3cf8990c378b30609b48cf71391e74cd245071bb Author: Senko Rasic Date: 2008-04-29 21:07:21 +0000 update sofiatest.py to the new test api 20080429210721-01440-cd58247c56e835e0a22e86dbfaa30252cfc99e23.gz commit 782fe41582d640bc56271b1f4ff356705c580de5 Author: Senko Rasic Date: 2008-04-29 17:03:20 +0000 updated servicetest.py from gabble (adds new test api) 20080429170320-01440-4410abe44cef0cf58ae79bdaba48f9b56cee1bc9.gz commit 5d2d9841d5cdd78366a31c966743466658df6bfb Author: Senko Rasic Date: 2008-04-29 16:59:40 +0000 ignore tp_caller for the time being 20080429165940-01440-e4682591ede0a028fec442871498d0795abb52a5.gz commit 0e2f5d262b8bcca6b081780e99c57ed4cca26e27 Author: Senko Rasic Date: 2008-04-29 16:59:22 +0000 added the two new Makefile.ams to configure.ac 20080429165922-01440-531a22dbba5450df16bd4566861cab870d02a318.gz commit 290c32fb6b0d79ce157cd66c75f70257ba2d5b60 Author: Senko Rasic Date: 2008-04-29 16:46:51 +0000 removed obsoleted test env scripts 20080429164651-01440-0adb82f6afbad4e755c3f3b3fd0f05dbdbd3c69d.gz commit 019335ef3ce5a519fb4dee929c95d98c0c8bd50a Author: Senko Rasic Date: 2008-04-29 16:45:34 +0000 enabled conditional use of twisted tests (ported from gabble); also compile tp_caller utility in tests 20080429164534-01440-b7431f9559dce08c406ad62d42eec1ebaab42856.gz commit 8f2dd1de48d445976cd52a35d2ca4cd4cc9d20b2 Author: Senko Rasic Date: 2008-04-29 16:40:23 +0000 change check-coding-style.mk to allow for check-local override (port from gabble) 20080429164023-01440-1559f8bf65cbc1b7c4283b9fde71f5e00227be1c.gz commit a9e34e5fc2dded884086b8f0629a8b75a511a445 Author: Senko Rasic Date: 2008-04-29 16:39:22 +0000 moved twisted test scripts to tests/twisted 20080429163922-01440-7fe3b1470c36c9012de622e95bbcb0e3cf4ba145.gz commit 10ef616abd9c6d8573288af2f626da87647b2163 Author: Senko Rasic Date: 2008-04-29 16:32:17 +0000 creating new test tree and build system (ported from gabble) 20080429163217-01440-82d94bbce112b4111874aeba860c21962ea0f8fd.gz commit ec814d20821bcad0eebef02693fbc7d5a9e0ea2f Author: Simon McVittie Date: 2008-05-09 15:15:56 +0000 Use tp-glib 0.7.8 for Hold in TpsipMediaSession too 20080509151556-53eee-7351533b801e69c6663ad248de979ccbc46df84d.gz commit 3679d69b79128ef7d916913383d177a15902c49e Author: Simon McVittie Date: 2008-05-09 15:09:34 +0000 Remove Hold interface from code generation, leaving code-gen machinery in place as a stub 20080509150934-53eee-64666185d40b50daf27be9ab95f6e1c3b52d7ee9.gz commit 106b48aba6a946477e53b97f1951a8c357a83c23 Author: Simon McVittie Date: 2008-05-09 15:08:09 +0000 Use telepathy-glib 0.7.8 for Hold 20080509150809-53eee-b8b888e9c345e46891011cb79883903dd748ae6b.gz commit c3f92b4760cf042fb516c78a478a25c4d6210633 Author: Simon McVittie Date: 2008-05-09 15:08:00 +0000 Require telepathy-glib 0.7.8 (for Hold) 20080509150800-53eee-9b3c32e4f3445b55f50a2d5ce087b3b6d4c33735.gz commit c3db928d11f9bf38aa1f1f0013b636f1ce96e679 Author: Olivier Crete Date: 2008-05-08 22:18:18 +0000 Put the proto subtype to RTCP so fs1 ignores it 20080508221818-3e2dc-f2b88ff56259d960bb68152bb8c6dc0891d14fcc.gz commit 7277ccf06b6ad9ebd5d6e39150599bc52d56cdf2 Author: Olivier Crete Date: 2008-04-21 21:38:48 +0000 Set a RTCP candidate at rtp+1 20080421213848-3e2dc-33fb6f07030ce02b56b6e5429799770587846d36.gz commit 759accaa2c062dcaa08c1ce8f966ccb5bcb7aafe Author: Olivier Crete Date: 2008-04-11 15:44:23 +0000 Don't ignore component number, 1 is RTP, 2 is RTCP 20080411154423-3e2dc-e84f55cdac64f30dc02d849d98bf73e8b9d20b46.gz commit 7be9f60844dabe5b9637bb07ba0fee49cd4a7abd Author: Mikhail Zabaluev Date: 2008-05-02 13:48:50 +0000 version 0.5.8.1 20080502134850-5b6ca-027c137197b12e850567cb5bb283c0bd8fd6593d.gz commit a7893c89b48ec61014f8800b1198fc1b47fb098d Author: Mikhail Zabaluev Date: 2008-05-02 13:44:14 +0000 version 0.5.8 20080502134414-5b6ca-28d2eaaa615811e3d212fe6a8091adb0bf955e6e.gz commit 879ad035b2136e893283ee872d85d842954621c1 Author: Mikhail Zabaluev Date: 2008-04-21 15:27:32 +0000 Simplified log file diversion code on Simon's suggestions 20080421152732-5b6ca-23582017e784b68e16f74764bed545e20d438d1f.gz commit 167df14589f90633b8d46f942f77471df44aefbd Author: Mikhail Zabaluev Date: 2008-04-21 15:16:27 +0000 Divert log messages to a file if the file name is provided in the environment variable TPSIP_LOGFILE. Fixes sf.net FR #1944067 20080421151627-5b6ca-9a3982f6e4a751324210e4944e6ebea9b0aaec22.gz commit bd5411948269f027bc92828b9cd9e9021841890d Author: Mikhail Zabaluev Date: 2008-04-16 16:34:00 +0000 Less cryptic comment for extra-realm auth parameters 20080416163400-5b6ca-b2dcf601df2c3fae419100b5b85a4c3b3645b073.gz commit 815f851e905823908599bad74c20891ff8656625 Author: Mikhail Zabaluev Date: 2008-04-16 16:33:14 +0000 Erased the unimplemented CM parameter 'avoid-difficult' 20080416163314-5b6ca-0434ff9aeb7a888574733fdb8b17b7419f8546b5.gz commit 9beb9f8df2f94268f9f4405538e0f3dc75077822 Author: Mikhail Zabaluev Date: 2008-04-29 15:17:34 +0000 TpsipMediaStream: survive StreamHandler.Ready called with an empty list of codecs, preparing for recommended sequence of calls to Ready and SetLocalCodecs. 20080429151734-5b6ca-0c30666e10c54188a6283bead622abad11646490.gz commit a492a61679ebe0600b5fdb942287ad3f63938170 Author: Mikhail Zabaluev Date: 2008-04-29 14:46:26 +0000 TpsipMediaSession: don't use an adapter callback for 'local-media-updated', use g_signal_connect_swapped() instead 20080429144626-5b6ca-e6f9e76b588094a7e3e1df255bf2fe01ccd60412.gz commit e14aac7e95a1676e18ff1a8f8e4611aae8899123 Author: Mikhail Zabaluev Date: 2008-04-29 14:36:30 +0000 Provided a description comment to tpsip_media_stream_apply_pending_send() 20080429143630-5b6ca-b4bf47873deadf27a1e29616cfadb9b853f379c0.gz commit 291dd1bd421789e899b50b325fad7bc665d9e7a3 Author: Mikhail Zabaluev Date: 2008-04-29 12:39:24 +0000 SIPMediaStream: signal actual pending send flags after applying some of them 20080429123924-5b6ca-12fc65f395fb8b38e3b541f9746a633028ae3666.gz commit 3e5cb0a356669b8eedb75968a58116b11c57edd4 Author: Mikhail Zabaluev Date: 2008-04-29 12:29:06 +0000 TpsipMediaSession: fix remote hold state updates for incoming streams 20080429122906-5b6ca-b02c582cdd2c6eaca4fa2dc1bb938fc925ee5b1a.gz commit a8a5667d9d578cfce78b550295f296b4c9087126 Author: Mikhail Zabaluev Date: 2008-04-29 11:07:26 +0000 Corrected hold implementation up to the recent direction fix 20080429110726-5b6ca-b2e3ba944985bc33bb7d3db16db77117b5213a99.gz commit f7d5a4d079de5a00b22e81a04a78d14593f3157e Author: Mikhail Zabaluev Date: 2008-04-29 10:50:13 +0000 Ported direction and pending send changes to the trunk 20080429105013-5b6ca-b4f752d7d39bf2ef171e8196541fdba46fb8b045.gz commit 4b488097dbef43700a6331197568eb136acf51f6 Author: Mikhail Zabaluev Date: 2008-04-28 13:49:41 +0000 Reworked behavior of direction and pending send flags to match the specification 20080428134941-5b6ca-00274102002e5906a2d5922b7e2ac55e96f7c7fc.gz commit 18a24fdc41fcd11f614696491b9d61432c20140a Author: Mikhail Zabaluev Date: 2008-04-22 12:44:17 +0000 TpsipMediaSession: a remotely requested stream is always created with pending local send flag 20080422124417-5b6ca-8a060a195d2c06d063266c2269705fd5a778da5c.gz commit 99ef1454d8159ab60579f4343696b74c31f223ce Author: Mikhail Zabaluev Date: 2008-04-21 13:00:06 +0000 TpsipMediaStream: implemented StreamHandler.SetLocalCodecs 20080421130006-5b6ca-efaf0324c64efef9195c7e6c4f9d6bdd153cf522.gz commit dc6080ab2516db06b33c680181f7779a12a941e0 Author: Mikhail Zabaluev Date: 2008-04-21 12:42:18 +0000 TpsipMediaSession: set all streams to playing whenever we're about to send an SDP offer or answer 20080421124218-5b6ca-730f580f5d230c74d14fa75238e5b5e4facca77d.gz commit 552f1097a886024c8709d590999b37d93a80fc2a Author: Mikhail Zabaluev Date: 2008-04-17 15:18:15 +0000 TpsipMediaStream: on StreamHandler.Error, close only the stream rather than terminating the session. Fixes sf.net bug #1944820 20080417151815-5b6ca-730bf11dad42159a5d59ae98190c61a21f66f17d.gz commit 0947739e69024e1cee7ff1725855bbe4a38dba0a Author: Mikhail Zabaluev Date: 2008-04-17 11:52:41 +0000 TpsipMediaStream: check if StreamHandler.Ready is called more than once 20080417115241-5b6ca-a847f656c336e3c3babb1e71936e6c11d6a99169.gz commit 7e21d72c921255ad550c1e952a77a0829784b15f Author: Mikhail Zabaluev Date: 2008-04-17 11:52:03 +0000 TpsipMediaStream: remove redundant type assertions 20080417115203-5b6ca-d762175897f1d94102194393dc2d32f4e20a70e3.gz commit a81536c7f66a6f099d2dd88eefdd4e53f64a6da9 Author: Mikhail Zabaluev Date: 2008-04-16 16:51:34 +0000 SIPMediaSession: fix the emission of HoldStateChanged 20080416165134-5b6ca-831f7b374559504ea7d2b8cc61fffb698b97cb6d.gz commit f4623d7bcb6e0c9948bf69c5d1d8eed33acf457c Author: Mikhail Zabaluev Date: 2008-04-09 15:27:54 +0000 version 0.5.7.1 20080409152754-5b6ca-956afc9a0c29f62aef8e1bfb7a9514e7fc61d816.gz commit a7d19d68e552626896c47185102b2a5eabd8a5fb Author: Mikhail Zabaluev Date: 2008-04-09 15:17:42 +0000 version 0.5.7 20080409151742-5b6ca-58d14a8ca3cb0c093525d95e1d92f0cc51fdc4d1.gz commit 95e8d77876a3c3144029cd875677fa1e6bf6f624 Author: Mikhail Zabaluev Date: 2008-04-09 15:17:21 +0000 Added tpsip/signals-marshal.list to distributed files 20080409151721-5b6ca-a000777d4562361a217756123f5cdc9a2582c3d7.gz commit 21cdac93da0d587c9398f6cc4dca6d46df93c768 Author: Mikhail Zabaluev Date: 2008-04-09 12:49:09 +0000 version 0.5.6.1 20080409124909-5b6ca-0131d06a113bf46a17bfdc98d8b3b3894907c265.gz commit 1ba168d56b3ce039fff046cdb99514764d942353 Author: Mikhail Zabaluev Date: 2008-04-09 12:46:39 +0000 version 0.5.6 20080409124639-5b6ca-eedefe0539f1bc3df3ed6d5c60da7174ecc5d38a.gz commit dcae8e19870d508fc8d4758c74eeff2beb645e81 Author: Mikhail Zabaluev Date: 2008-04-09 12:44:40 +0000 tpsip: added -I$(top_builddir) -I$(top_srcdir) to preprocessor flags 20080409124440-5b6ca-75648f9233456b61b01990295ee6bdf00e8d4c14.gz commit f04e01f380a41a858baa5ab7809e53631937e870 Author: Mikhail Zabaluev Date: 2008-04-08 13:24:47 +0000 cosmetics 20080408132447-5b6ca-230ba0aaa6d72e48acf7f43d6ba2b263742d2391.gz commit cf47fadccc5c6a12f58cfe43ceaacf4bcf160e99 Author: Mikhail Zabaluev Date: 2008-04-08 15:07:24 +0000 Really implemented Hold.GetHoldState 20080408150724-5b6ca-e85ea0e59ba2b005214445c3221a93f5dd480213.gz commit 5f8537ed04f66278cbf712f7c587fc08d5a5e185 Author: Mikhail Zabaluev Date: 2008-04-08 14:36:00 +0000 SIPMediaSession: handle unexpected stream hold state changes gracefully 20080408143600-5b6ca-f3c726f7abc24bdfa8627424adacf645523010c5.gz commit 41abf3c96e526224a37309ff5746eec250e87eef Author: Mikhail Zabaluev Date: 2008-04-08 13:22:45 +0000 Add the missing G_PARAM_CONSTRUCT to a property defining the default value 20080408132245-5b6ca-90f8c8843b641e2efb39244cb30617121c75dbb1.gz commit 84abbcc334716b338b5a9818c0dba6585afe9171 Author: Mikhail Zabaluev Date: 2008-04-08 13:15:22 +0000 SIPMediaSession: implemented stream hold requests through StreamHandler 20080408131522-5b6ca-38a4e12a9ae3c61dcc251accd36c3b2f1b689518.gz commit 8a2e68678efe06cb2ea36507a92c5f31b6ab4acb Author: Mikhail Zabaluev Date: 2008-04-07 15:03:11 +0000 Struck out the stream handler hold API. Introduced the 'hold-state' property and the 'unhold-failure' signal on TpsipMediaChannel. 20080407150311-5b6ca-dadbc2ce6d3ae4e01063e92d12cec5ad869c2543.gz commit b10fe314452cb3cb6e076fef269e77f6ddeea730 Author: Mikhail Zabaluev Date: 2008-04-04 15:20:21 +0000 Updated the media channel implementation to the reworked Hold and CallState APIs as of 0.17.3.1. The CallState interface helpers are provided by telepathy-glib as of 0.7.6. This patch does not implement the specified behavior for local hold. 20080404152021-5b6ca-666f266095e8b6765e1f8917b26a8cf42292aa3c.gz commit 8949826f048c6e75427940e2fbe4353613de5dd2 Author: Mikhail Zabaluev Date: 2008-04-04 15:16:12 +0000 Updated to the draft Hold interface as of telepathy spec 0.17.3.1 20080404151612-5b6ca-a019004434d33a1ef8a8db64d94b7d4c8a72458f.gz commit 22b2689625ab977b45d83b4516c239679f9bb19f Author: Mikhail Zabaluev Date: 2008-03-18 16:29:43 +0000 version 0.5.5.2 20080318162943-5b6ca-b0ed6799db52bedc37e46ee66d010ef49f30503f.gz commit c5404a9009f4746df772a563d38eea25dd1443fb Author: Mikhail Zabaluev Date: 2008-03-19 15:38:41 +0000 Backwards compatible use of environment variables SOFIASIP_PERSIST and SOFIASIP_DEBUG 20080319153841-5b6ca-a5854ef3e6aa6c6240b33db37856373b4d303744.gz commit 0cd14962764121c7e412423c64b8f06081d2fc1b Author: Mikhail Zabaluev Date: 2008-03-18 16:27:00 +0000 TpsipTextChannel: capitalized an error message 20080318162700-5b6ca-5365373df38628fc5df5149c03da56f8feb2bf31.gz commit 4ca3c719adf01bdddea5a4f8c507a34851bd12ab Author: Mikhail Zabaluev Date: 2008-03-18 16:26:04 +0000 TpsipConnection: commented out NUTAG_SIPS_URL assuming it's now rudimentary to NUTAG_URL 20080318162604-5b6ca-838a2325499c55849168b9e9bebbd0028079ca7a.gz commit d6cffc04e04030f9eaa6ce83f796e0fa83e16bfd Author: Mikhail Zabaluev Date: 2008-03-18 16:22:59 +0000 TpsipConnection: removed useles TPSIP_IS_CONNECTION assertions 20080318162259-5b6ca-05b8c9f1e1d7197aa016b544fec334e1bc33f6c1.gz commit c5edd8a99e81964c669e36c553a6096fa3c6cc2c Author: Mikhail Zabaluev Date: 2008-03-18 16:22:23 +0000 TpsipConnection: cosmetics in the class init function 20080318162223-5b6ca-7aa7fcee379f3c7e3a46da6d5af60b95e1d5bf13.gz commit e1aa9a119bb4ddeed9df036d038ae77cebb1c27f Author: Mikhail Zabaluev Date: 2008-04-01 12:29:30 +0000 test-message.py: Don't use character sets that are too exotic for Scratchbox. Use Unicode literals without unnecessary translation from UTF-8. 20080401122930-5b6ca-c212bbd77404dc32f7f3b9e3a729b231d22c2f01.gz commit 34da127f72f1acfc6cfa67e3e60fbdbcb99d3f00 Author: Mikhail Zabaluev Date: 2008-04-01 13:06:04 +0000 TpsipConnection: handle the internal status code 904 that indicates a failed authentication 20080401130604-5b6ca-540d8113892d857e237e5ccc0eb56167e6cf1c61.gz commit 6a82fd1a38695d393062e5169182cb5e00852119 Author: Mikhail Zabaluev Date: 2008-03-18 17:22:09 +0000 TpsipConnection: erased the custom implementation of GetInterfaces, with the bogus Properties interface name it returned 20080318172209-5b6ca-279bb5878c617f222dc726a547f9e42556f1a759.gz commit cc9ea218883cba698cdc22feb77153690dfd926e Author: Mikhail Zabaluev Date: 2008-03-18 16:59:09 +0000 TpsipMediaChannel: handle session termination in a nua_i_terminated callback. This is to eliminate a warning about the event delivered for a retired NUA handle. 20080318165909-5b6ca-29322f8b0593313b3b47e4888ae197e1b1471306.gz commit 7eb904a55c0a1c9439e27fc6f7595869aba6bf3f Author: Mikhail Zabaluev Date: 2008-03-18 16:56:25 +0000 Unbreak tpsip_connection_get_interfaces() 20080318165625-5b6ca-c47130895e496d78c5a890f23c6ee5cac9d5b801.gz commit f4ce746ec671843205cd2133e3d9a329e4d85041 Author: Mikhail Zabaluev Date: 2008-03-18 16:24:34 +0000 TpsipConnection: debugging cleanups in ListInterfaces and the dispose function 20080318162434-5b6ca-80a18a0e8a2461723093d236cacc3f6e0f25b8a6.gz commit 4cddabd2ea0470a64c048b6a26be1e8ddf3f98c3 Author: Mikhail Zabaluev Date: 2008-03-18 16:29:21 +0000 TpsipTextChannel: debug logging for messages queued for delivery 20080318162921-5b6ca-9322552180298f433ad305d995879d3f4fc25395.gz commit bded71d64527f52709ba6511f828d80e31a986ea Author: Mikhail Zabaluev Date: 2008-03-18 16:13:41 +0000 Added priv_handle_parse_from() missing for the incoming event handlers; removed the contact list handle repository. 20080318161341-5b6ca-4db4dcfdf20f21c46eabd26796ef561718e90415.gz commit 302b5417fdf8ab066e8fd33b0b6db4a8df642899 Author: Mikhail Zabaluev Date: 2008-03-18 16:11:12 +0000 Removed the RequestHandles implementation, let the base class do it 20080318161112-5b6ca-a2d1a32bb5cc353e6b1b1472144b757ed7284ec0.gz commit 58ad259426f96c968df350c44a3125413e54a658 Author: Mikhail Zabaluev Date: 2008-03-18 14:17:48 +0000 Refactored NUA callback handling to use GObject signal emission. Removed the TpsipConnectionSofia callback state adapter and simplified the stack destruction code. 20080318141748-5b6ca-2654a6c422ffd518ba30a5277dd13997bb358c7a.gz commit 0ad211d26d996833d8e7eb449e5d5ef7c0bbca22 Author: Mikhail Zabaluev Date: 2008-03-18 14:16:14 +0000 Added TpsipEventTarget interface as a start for the Telepathy-SofiaSIP dynamic API under tpsip/ 20080318141614-5b6ca-d4293e6ac6cd5bd7a423e5a8ef08130f0d6ccbf3.gz commit 4e6d5da782064144a6b914fe0a396d293da0b3f2 Author: Mikhail Zabaluev Date: 2008-03-07 13:44:06 +0000 Removed dead code 20080307134406-5b6ca-ac2fff70bb3637659742b0b0f35954917a8532c1.gz commit d12af30e4e9a1a94d4a2529301c79be8393ec634 Author: Mikhail Zabaluev Date: 2008-03-20 17:45:00 +0000 sofiatest.py: add 'proxy-host' to the default connection parameters, as 'port' does not work alone 20080320174500-5b6ca-2135329f87a3a4f2f9765274869c006c1db51ac6.gz commit f68585b95b6c1dec3767a046c839ba300f2ab938 Author: Mikhail Zabaluev Date: 2008-03-20 17:43:58 +0000 Use the value of PYTHON subst variable to run tests with 20080320174358-5b6ca-1aeec78b75b124edc14b4efab0c78909e974e44c.gz commit 4c629fc8bee2ca2c18a0fe071ef817fe778eddaf Author: Mikhail Zabaluev Date: 2008-03-20 17:42:17 +0000 Check for versioned Python binary in descending order, to get the best available 20080320174217-5b6ca-9e62ee39ed52de00e92d367908c1b4eab34bfde6.gz commit d5e7f6b708210c074f29174055efd02f13951f24 Author: Mikhail Zabaluev Date: 2008-03-07 17:03:36 +0000 Remove usage of AS_AC_EXPAND as a needless sophistication 20080307170336-5b6ca-b4193817c9d6a8517be922398570a1c43ab3129b.gz commit 3397654f0be122b91a249c53ecfbd74d0a23c79d Author: Mikhail Zabaluev Date: 2008-03-07 16:36:21 +0000 Removed the client-side stuff from tpsip-extensions 20080307163621-5b6ca-58da21345e53808039c7c5fba46bc50ac3376aed.gz commit 1658c240ac4537cf1c6537e8b06d866ea26b0010 Author: Mikhail Zabaluev Date: 2008-03-07 16:35:34 +0000 Fixed the name of the _SOURCES Automake variable for libtpsip-extensions 20080307163534-5b6ca-ac10f7b51767fdd723dd1583d14a048339f8ecd1.gz commit fbf2aea948cb52cc4604c295427ca3b404f69c87 Author: Mikhail Zabaluev Date: 2008-03-07 16:34:55 +0000 Unbreak the dist tarball name by removing quotes in AC_INIT 20080307163455-5b6ca-5aef8376ddc8213d8b5602ae5cd6c5c761f84971.gz commit fc98344a423c5a2e0d733be2cf7647c13c854e77 Author: Mikhail Zabaluev Date: 2008-03-07 16:10:28 +0000 Removed another instance of DBUS_API_SUBJECT_TO_CHANGE inclusion, unnecessary after porting to telepathy-glib 20080307161028-5b6ca-18ca0a41807663115d2270e68addde100d44ce6d.gz commit 196d73563d96af5031ed969b1cd9d919fda3e054 Author: Mikhail Zabaluev Date: 2008-03-07 16:09:14 +0000 Added m4/as_ac_expand.m4 to the distribution 20080307160914-5b6ca-865e6ab9340a062d74fcf62466a2c791e615fb4e.gz commit 7982a7d2c4fdb06241ea0a8b2370cf20a9b77167 Author: Mikhail Zabaluev Date: 2008-03-07 16:08:49 +0000 Makefile.am: updated copyright and contact 20080307160849-5b6ca-7fc22e3d4a4ce42dd0c9c3968c3451ce9c5e245f.gz commit 15b3e5e0172f7e0c961a7b8618c5e8758ab729d5 Author: Mikhail Zabaluev Date: 2008-03-07 16:07:22 +0000 Renamed extensions subdirectory into tpsip-extensions 20080307160722-5b6ca-75b2d2b88b26231bc9871c52fe7d0f17ad812e42.gz commit 7c2c903e76a3dce01d732849546dca766d6826bb Author: Mikhail Zabaluev Date: 2008-03-07 14:37:39 +0000 Used the occasion to update copyright notices in the code: added missing notices, updated Nokia copyright years, removed "this library" language, humbly added myself to the author lists. 20080307143739-5b6ca-0a4e19949140f3fb974d6b0bff79debf76cf9f9c.gz commit 2735429e13a7efb93a0b9cd13bfd0e898357e930 Author: Mikhail Zabaluev Date: 2008-03-07 13:42:21 +0000 Renamed things for Tpsip prefix all through the code 20080307134221-5b6ca-70f7b26a7a0e3a78bb9717326ee65caff06b3797.gz commit c09a82a1756acc2be18d5d54ac6a212610cfc427 Author: Mikhail Zabaluev Date: 2008-03-06 15:03:26 +0000 Removed the DBUS_API_SUBJECT_TO_CHANGE crack 20080306150326-5b6ca-6eac3736bfd3e254e9fcb52ac799fb13989b3292.gz commit 9c67dc297c0397306910b350e4299ec6fa55f2be Author: Mikhail Zabaluev Date: 2008-03-06 15:01:54 +0000 Renamed the keepalive mechanism enum to the Tpsip prefix. WARNING: work in progress, breaks the build 20080306150154-5b6ca-49ca9b908397fcd910338258dc714e8b7039e0d6.gz commit a8a9688fd33b59c78adccead7f53b9b7b86bcf0e Author: Mikhail Zabaluev Date: 2008-03-06 14:59:49 +0000 Tpsip namespace for generated code in extensions 20080306145949-5b6ca-1b18c499022b114855ba555564abab94a80aeb79.gz commit 4285304415f208f91fabf22c6413bc8ee340834b Author: Mikhail Zabaluev Date: 2008-03-06 14:57:13 +0000 Renamed libsip-extensions.* to libtpsip-extensions.* 20080306145713-5b6ca-a5d4927a2593b18cdbb08ed437a6a7f00eec5ec2.gz commit e9a1056e4da2e7cdf319eeea935e55522e40cd9a Author: Mikhail Zabaluev Date: 2008-03-06 13:32:09 +0000 Renamed source files consistently to the tpsip- prefix. Ditto the intermediate library for extensions. WARNING: This patch breaks the build. A followup patch is needed to unbreak it. 20080306133209-5b6ca-82cc9b8b7f0da7113bb6cb7a9982b8353b5857fb.gz commit 5a0004164c81f2743129328d2b266734b19c1a72 Author: Mikhail Zabaluev Date: 2008-03-06 13:32:09 +0000 Renamed source files consistently to the tpsip- prefix. Ditto the intermediate library for extensions. WARNING: This patch breaks the build. A followup patch is needed to unbreak it. 20080306133209-5b6ca-d5667bf6473efce0b6b8c8a45f19fa7505e026dd.gz commit decaef04902795f8972cdea6700ff6ef15b59e25 Author: Simon McVittie Date: 2008-03-05 15:40:23 +0000 Copy m4_define magic from telepathy-glib/gabble/etc. to generate stable release tarballs with the right name 20080305154023-53eee-5d4d25f5bd3f23c0179968aa4bdb9fe7e4182552.gz commit 1af2898db5a789f5dce356b47da1aa141e2f2c35 Author: Mikhail Zabaluev Date: 2008-03-05 15:31:30 +0000 version 0.5.5.1 20080305153130-5b6ca-67b40e92ddd010af8ebd96aa902d555157593779.gz commit 017a6cefb136ede3900392c36189d472dba3107b Author: Mikhail Zabaluev Date: 2008-03-05 14:48:26 +0000 version 0.5.5 20080305144826-5b6ca-d9bec2cefe61148adbf24e7ec2e869e83c60ed13.gz commit 37a8838f5176336ebd7c678a03f0207b0ae462c6 Author: Mikhail Zabaluev Date: 2008-03-05 14:40:06 +0000 SIPMediaChannel: use direct hash/compare for the call state hash table, fixes the stupid crash 20080305144006-5b6ca-c8e08763a36966e048023a8948f7ae741897b502.gz commit 1b4a78a2ed4836dbefbead17d3b17d2a0bcc4f63 Author: Mikhail Zabaluev Date: 2008-03-05 11:19:59 +0000 SIPMediaChannel: use Channel_Group_Change_Reason_Invited for INVITE-related call membership changes 20080305111959-5b6ca-9f8ccd01e73a2d7028b2eb08c645e906c38b4397.gz commit 5a300f16c2a130ce443ca47109df74e341b39e5d Author: Mikhail Zabaluev Date: 2008-03-05 07:53:11 +0000 'loose-routing' defaults to false. Reasons: 1) backwards compatibility with 0.4; 2) Interoperability problems arise in practice when using initial Route, not the other way around. 20080305075311-5b6ca-3aae92d0449052455e70147f76c2a07f3efe80d5.gz commit 691b4c8e59f3749a9146b35f786ad3e83de39534 Author: Mikhail Zabaluev Date: 2008-03-05 07:50:08 +0000 SIPMediaChannel: set the actor handle for incoming and outgoing calls 20080305075008-5b6ca-ff6ada391ec3ee92f7a39eaf292701b6e05f1c3c.gz commit b8976253cfa05a6c9ddae4091d3827a06ec76a7b Author: Mikhail Zabaluev Date: 2008-02-27 16:45:34 +0000 SIPMediaChannel: updated to the latest CallState declaration changes, add support for the Queued flag 20080227164534-5b6ca-56e93776986662bdeb1d56ac8dc965d48040cd35.gz commit 784f626eef156ec70d4d3d774a66b6ea22649a42 Author: Mikhail Zabaluev Date: 2008-02-27 16:39:51 +0000 Updated the CallState interface specification to include the Queued flag 20080227163951-5b6ca-89faaeb1d537400eaecad936b19fb8556710c9cf.gz commit 468756fed5bc4cba93bb86ab862546c0337199aa Author: Mikhail Zabaluev Date: 2008-02-26 16:37:57 +0000 SIPMediaChannel: implement the new behavior of RequestStreams and MembersChanged, as per Telepathy spec 0.17.1.1 20080226163757-5b6ca-154975c52aaed53ffb5b0a6e4a3ac0704c93e9c6.gz commit aeef618369660dadc6d21e581325566944171693 Author: Mikhail Zabaluev Date: 2008-02-25 17:58:02 +0000 SIPMediaChannel: added Hold and CallState to the list for GetInterfaces() 20080225175802-5b6ca-3bab266d921e1d5248875804b688d658e328bf30.gz commit 96ff1cc99b4c8b56af8a366dcdc06fed7436aa8c Author: Mikhail Zabaluev Date: 2008-02-25 17:57:15 +0000 SIPMediaChannel: staticized the dispose and finalize functions 20080225175715-5b6ca-5ac102b45b522495e7e70a0a286b61e0fa5a965b.gz commit 5fb276ead130888ddf1965c3dff86d740aaf9a41 Author: Mikhail Zabaluev Date: 2008-02-25 17:54:55 +0000 Initial implementation of org.freedesktop.telepathy.Channel.Interface.CallState 20080225175455-5b6ca-9eea9fa26e8e63cdd7e3d6bd573749fee1521384.gz commit cb45d86f6b0357fb94c967b7c879ddbaa022a7cd Author: Mikhail Zabaluev Date: 2008-02-25 16:56:29 +0000 SIPMediaChannel: a stub implementation of the CallState interface 20080225165629-5b6ca-765369cc9f7ea7afbc2954456470cd27f50be8f5.gz commit 145e2474dc7505b7ca3a2d4ec0cfbb6cf0ca7116 Author: Mikhail Zabaluev Date: 2008-02-25 16:34:39 +0000 Extensions: pulled in org.freedesktop.telepathy.Channel.Interface.CallState from telepathy spec 0.17.1.1 20080225163439-5b6ca-43a0172a32fa17ae959955d559fb36c4d2c5884b.gz commit f27567f22df76367f6b70a6c1b42d9e3ece9468d Author: Mikhail Zabaluev Date: 2008-02-25 15:40:31 +0000 SIPMediaSession: stylistic nitpick 20080225154031-5b6ca-90cc50bb62d65a4b036a58830156f19a97fdeb42.gz commit ca01b63c53e95b07126858dead84ef715fff538a Author: Mikhail Zabaluev Date: 2008-02-25 15:39:53 +0000 Reverted the premature optimization of checking old state before trying to add the peer to call members 20080225153953-5b6ca-bc9183eb6f1b2d02b2fb8ebe695a0fc31959b258.gz commit ed4a235e25a6e6ccae6c7edeb11c6ecd9f147c11 Author: Mikhail Zabaluev Date: 2008-02-25 13:20:44 +0000 SIPMediaSession: validate media types for RequestStreams before creating any streams 20080225132044-5b6ca-eda19f7b6da30f3c0994f340787bcdb544fbdd5e.gz commit 12259a462ea4d484665a14e597236d8905780fb3 Author: Mikhail Zabaluev Date: 2008-02-22 17:12:10 +0000 don't emit NewStreamHandler signals multiple times if Ready is called multiple times on the SessionHandler 20080222171210-5b6ca-7caf64c37721e54711978e391444d5af90c04f47.gz commit 6a4b2f4608f50a606160d98c969a7982bc954efd Author: Mikhail Zabaluev Date: 2008-02-22 15:54:43 +0000 SIPMediaSession: added an XXX comment about non-transactional error raising behavior in RequestStreams 20080222155443-5b6ca-2c1c7260333fbad80d4633292b1e6a08d72331c6.gz commit 0b3647a8b639e8ccbbb9ed50dc38c915cfb8b08a Author: Mikhail Zabaluev Date: 2008-02-22 15:38:44 +0000 Streamlined code for RequestStreams and ListStreams, allocating the result array in the same function where it gets freed. Gone are the remaining calls to sip_tp_stream_list_type(), replaced with TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST. 20080222153844-5b6ca-45bdbcb5ef89395c0d03612e7086895939b0c6cc.gz commit 8ee15ed08953e96ae88aed46ec1a9936a7654314 Author: Mikhail Zabaluev Date: 2008-02-22 15:32:45 +0000 Removed the homegrown type helpers, switching to telepathy-glib type macros 20080222153245-5b6ca-f233b00bae8f5a8367f59a96752da335aab2c500.gz commit 9eb23a966d6d585bdd262260d4f14636e3b90d75 Author: Mikhail Zabaluev Date: 2008-02-21 15:03:44 +0000 SIPMediaSession: comment language 20080221150344-5b6ca-08dbfee387525ecf81dcdddc06b388e627c9dd79.gz commit 0c7aa4e869c8d402d041a33ef8119dc279b3297e Author: Mikhail Zabaluev Date: 2008-02-21 15:45:28 +0000 SIPMediaSession: create a new channel as send-only if the local hold state is in effect. This prevents remotely triggered overrides of local hold by offering a new stream. 20080221154528-5b6ca-c004977b5037e305f39f7c268ab77a7d8ba2e307.gz commit 316289b8fea40144a46a07b27c9df21b6d24d460 Author: Mikhail Zabaluev Date: 2008-02-21 15:23:41 +0000 sip_media_session_request_hold() does not need the GError** parameter 20080221152341-5b6ca-35cccca3551cd98cf4fdcf361b68646ee108596e.gz commit 388ebd0e4dab508015774c14040f70be3c9416b0 Author: Mikhail Zabaluev Date: 2008-02-21 15:01:56 +0000 SIPMediaChannel: prettifying 20080221150156-5b6ca-186ea6b784caec2279c1f023e59f8d277c71603e.gz commit db964bd87c1462ab2582b56865ea295ae23b9c9f Author: Mikhail Zabaluev Date: 2008-02-21 14:56:11 +0000 The initial implementation of (draft) org.freedesktop.telepathy.Channel.Interface.Hold 20080221145611-5b6ca-526aa7a5c26aabb973d96967b664116f78a9002f.gz commit dec6ed8ccadcf369bd953bcddc20dc2594e9e6b8 Author: Simon McVittie Date: 2008-02-20 18:24:52 +0000 Only require Automake 1.8 20080220182452-53eee-636d8cb4e1cee1c5bf4697140556370f030064d4.gz commit 89abc47e38b5c68d808d86f3bf8c389ae4d1608e Author: Simon McVittie Date: 2008-02-20 17:01:33 +0000 Add a trivial stub implementation of the Hold interface 20080220170133-53eee-5b82a27036995ed6f503241f678aa8853dcb3362.gz commit 25e44f53f19fb8715a67a535ad100c4b8a20e03d Author: Simon McVittie Date: 2008-02-20 17:01:05 +0000 Link against libsip-extensions.la 20080220170105-53eee-f41dfe8f611aeec25c1b937ad56b916ed0b76a1a.gz commit 03c244ac6782b18de909cd66c2cdcd2b1717ed26 Author: Simon McVittie Date: 2008-02-20 17:00:32 +0000 Include tools, extensions in build system. Check for mkdir -p, xsltproc, Python, telepathy-glib 0.7.3 20080220170032-53eee-b091234e34ec0138213c2e88f2c0e21155deb463.gz commit 834d9b6c4207876decbc8ae9b19af2cf5495016a Author: Simon McVittie Date: 2008-02-20 17:00:14 +0000 Add an extensions library containing the Hold interface 20080220170014-53eee-e789fc709213482d7363fd95f750e6c237970b76.gz commit a6fb706d275cea39556157422da0035deac8234a Author: Simon McVittie Date: 2008-02-20 16:37:58 +0000 Pull in code-generation tools from telepathy-glib 0.7.3 20080220163758-53eee-36e5fe90491953e0f8d7fbfa2cdd8b3fc6a372c3.gz commit ab4e2c524746126bd86174a15dee96c02aefaf79 Author: Simon McVittie Date: 2008-02-20 16:37:02 +0000 Modernize autoconf/automake initialization. Explicitly require GNU make in README, and use automake -Wno-portability (fd.o #14020) 20080220163702-53eee-d502e6fc1e6cb203d07c4ed5a79d2f87fea560b0.gz commit e50b130aa3891b6938d3615158092246cc0afffc Author: Mikhail Zabaluev Date: 2008-02-19 16:34:14 +0000 Specify -1 (stack decides) as the default value for 'keepalive-interval' 20080219163414-5b6ca-7e8f6b1b0129349c63c3bcb966fb470ce25d02db.gz commit 67f3e4c3f363282dee7322be27f5eaac5a3147d0 Author: Mikhail Zabaluev Date: 2008-02-19 16:34:14 +0000 Specify -1 (stack decides) as the default value for 'keepalive-interval' 20080219163414-5b6ca-db47c1c873a6596e66e8b6a1f3c6b4b6b78e2515.gz commit f756a78b55238a695c707815da201442fc5922e4 Author: Mikhail Zabaluev Date: 2008-02-19 16:54:40 +0000 SIPConnection: corrected the description string for 'keepalive-interval' to match the implementation 20080219165440-5b6ca-06048de014426b01e2b61fc9c5af52338d1b917e.gz commit e713aaa5a9cf46d67c0effaa0398e96690c1c619 Author: Mikhail Zabaluev Date: 2008-02-19 16:05:30 +0000 Don't pass a negative 'keepalive-interval' value to the stack, making it really a way to use stack's own defaults 20080219160530-5b6ca-f84280da059fedf9c48d3f4f6f630412f2f8dd0e.gz commit f310ec099900e55c00f44c73aa03b8daf85af990 Author: Sjoerd Simons Date: 2008-02-15 18:25:18 +0000 SipMediaChannel: let ListStreams return an empty list if there is no session yet 20080215182518-93b9a-798aa9ae8d2411baf0606f613b43d4a8f9f892f0.gz commit 3472cca844bbc54343882e484ba66a15278d30da Author: Mikhail Zabaluev Date: 2008-02-15 16:15:20 +0000 version 0.5.4.1 20080215161520-5b6ca-1f64384df3040689ee0a4eb86d7cf77690458e7d.gz commit 58043ebb666ace4fc69c380a5ef3ab7b73f18e25 Author: Mikhail Zabaluev Date: 2008-02-15 15:58:01 +0000 version 0.5.4 20080215155801-5b6ca-2cabbc70f7a577cf0754de24bd842283c16f842c.gz commit 17f3c7e2052e0bb4d29e32f5b6c12082d90f8310 Author: Mikhail Zabaluev Date: 2008-02-15 14:17:37 +0000 SIPMediaStream: removed a piece of dead code 20080215141737-5b6ca-090d8bfea6f8b4487d758c80f3496d81d95e06a4.gz commit 9d023d02fb47c79d7a8826c8b50a317576d71863 Author: Mikhail Zabaluev Date: 2008-02-15 14:16:01 +0000 SIPMediaStream: converted a SESSION_DEBUG in anticipation of stream's own debug facility. Ideally, the stream object should not use the reference to the session object. 20080215141601-5b6ca-16d57660ab427df8719ac9823a661a32f7eed3bc.gz commit 7b301fba0552269149299e85174b342dba6d4b4e Author: Mikhail Zabaluev Date: 2008-02-15 14:13:43 +0000 SIPMediaStream: prevent a race condition between SupportedCodecs and emission of SetRemoteCodecs for a further intersection 20080215141343-5b6ca-bb0201b8563953261e121569679b027d991f8ea6.gz commit ef3962dc2dc8f2eea6a70fb3672e45ba8ed0f8ac Author: Mikhail Zabaluev Date: 2008-02-15 14:11:04 +0000 SIPMediaStream: separate push_remote flags for candidates and codecs 20080215141104-5b6ca-f851dcfd70ff3615efb6a018d64cd470718fa98e.gz commit 063d0d0530be3194cc9ce998501396cc881765e6 Author: Mikhail Zabaluev Date: 2008-02-11 16:13:24 +0000 SIPConnection: removed a gratuitous log message 20080211161324-5b6ca-1a88cfc540506e138bcb9d6548c6b364993912d6.gz commit 3365d139fa1c1f368022cb213a42a51ed5f60bdf Author: Mikhail Zabaluev Date: 2008-02-11 17:03:38 +0000 SIPConnectionManager: prettifying 20080211170338-5b6ca-caf208acf65bbd9b26a1b3c9c6376a0cdf5e5477.gz commit 9c6f42bf2e111397a16df25f1d2398897c760fe7 Author: Mikhail Zabaluev Date: 2008-02-11 16:09:04 +0000 SIPConnection: flagged properties with non-trivial defaults with G_PARAM_CONSTRUCT. Removed or added /*default value*/ comments so as to actually make sense. 'password' can be NULL because of the additional guarding logic in the auth code. 20080211160904-5b6ca-f1d81301cc9c97185cfd382725de2cf2a30aa057.gz commit dbe1eed608f5d43a58674af1acc6b1343b077207 Author: Mikhail Zabaluev Date: 2008-02-11 16:05:01 +0000 SIPConnectionManager: consistently nullify all parameter strings if empty 20080211160501-5b6ca-625246c40f6e2a0fe60930b787da73d5f9d6256d.gz commit 971b1feaeb43406b91447ddd0d539f4ad06cc6b4 Author: Mikhail Zabaluev Date: 2008-02-11 15:56:49 +0000 Added connection parameter 'loose-routing' to allow for the legacy routing behavior, as implemented by Telepathy-SofiaSIP 0.4.x and earlier. The default is true, which means loose routing as recommended by RFC 3261. 20080211155649-5b6ca-5ebacf522f3c4ef0e87a84cf00c878728c9006fb.gz commit bf8683534db479ecff79c244a54845845cac5f75 Author: Mikhail Zabaluev Date: 2008-02-11 14:36:06 +0000 SIPConnectionManager: nullify string parameters if the value given is empty. The previous approach of returning a validation error is problematic with the Mission Control which has no other way to unset a value coming from the profile. 20080211143606-5b6ca-0ea6e56a8d762402a65e2aebbfea4f1a72d767a6.gz commit f9856ec487da8222dd8fa6455577f5052524c086 Author: Sjoerd Simons Date: 2008-02-09 14:56:14 +0000 Override channel-type and object-path properties instead of redefining them 20080209145614-93b9a-6390001c3ecc9a8d547d19f572222b96a9955e34.gz commit bf83c9c3250652a30e26c7a4dd20acb1d3aa0c4a Author: Mikhail Zabaluev Date: 2008-02-06 15:13:43 +0000 version 0.5.3.1 20080206151343-5b6ca-cb7d53c5941af6d9ea94fca7fe82420e39995904.gz commit ab854879225fd7a8740f4ed19a402ddbc86135e4 Author: Mikhail Zabaluev Date: 2008-02-06 15:02:24 +0000 version 0.5.3 20080206150224-5b6ca-2e45dd74f384d16344042ae1dd92f13bcaeedf35.gz commit 49eaa733c084353d9a46ed0a24736d1deca6857a Author: Mikhail Zabaluev Date: 2008-02-06 09:27:04 +0000 SIPMediaChannel: we want to add the peer after 'responce-received' -> 'active', of course 20080206092704-5b6ca-c2d1c45f512b2d9fb465811c29f33bea746dcc40.gz commit f410218d99c19532f86a86cee548e5c2b764580b Author: Mikhail Zabaluev Date: 2008-02-05 17:21:49 +0000 SIPMediaChannel: avoid redundant calling of tp_group_mixin_change_members() on irrelevant state transitions 20080205172149-5b6ca-b4b8bfbe89986131b1378dfc7d73760056e7e024.gz commit bbcc35ef2f42b88225002791cf10ece9ec6f8477 Author: Mikhail Zabaluev Date: 2008-02-05 17:18:26 +0000 SIPMediaChannel: purified priv_create_session() by externalizing the reception of a remote INVITE 20080205171826-5b6ca-b8c50d20acd2268757ff04c82e0d628658e2f3ec.gz commit 01ebe81efc578aae521e8341fd681bfb02a32944 Author: Mikhail Zabaluev Date: 2008-02-05 16:20:41 +0000 Removed the internal 'stream-added' signal, emit StreamedMedia.StreamAdded directly from SIPMediaSession code 20080205162041-5b6ca-16baa96e56f40f9e24a0e1d57b1d0bbf4602889a.gz commit 3d3755b973ba55ca67ddf5bafdffa9d620fbcbd8 Author: Mikhail Zabaluev Date: 2008-02-05 15:59:20 +0000 SIPMediaSession: corrected the comment about session states 20080205155920-5b6ca-5ecd0d64674d1fe0a7610fcf102f40d2bc80f234.gz commit 2be1ac4209aaa1e081b451b84ae8a6b80c9a9e80 Author: Mikhail Zabaluev Date: 2008-02-05 15:58:20 +0000 Renamed the ambiguously named priv_session_media_state() to priv_session_set_streams_playing() 20080205155820-5b6ca-f335c3738dc906ba2fe3274e461a3be49ce0d96d.gz commit e5c3eb266a6cf796ef65bd9b8bf1c429c89a8a6b Author: Mikhail Zabaluev Date: 2008-02-05 15:43:25 +0000 Removed the 'state' property on SIPMediaSession. Use function sip_media_session_change_state() as the way to change the session state. Instead of using detailed signal 'notify:state', use the newly introduced signal 'state-changed'; we get to control the moment of its emission, and the handling, with more precision. 20080205154325-5b6ca-ef4cd28c8dad3860e1c471cde721d56b1d0fe2a3.gz commit 99b4ff90ad0b4b484011b91bd11e1490318408c4 Author: Mikhail Zabaluev Date: 2008-02-01 18:00:19 +0000 SIPMediaSession: debug printout for clamping the number of streams in the response 20080201180019-5b6ca-63274c77bfc925fd3e542c7244b2676ac719c090.gz commit 0c1ea9e1d24403e9b0c59600c0c3284e7087d895 Author: Mikhail Zabaluev Date: 2008-02-01 17:58:40 +0000 SIPMediaSession: always update the number of streams in the remote offer, even if the media didn't change 20080201175840-5b6ca-33f31678d7032413b5d45bf18308680a87ace043.gz commit 9bb6d2db194d763516522521349af5d378c501c8 Author: Mikhail Zabaluev Date: 2008-02-01 17:54:56 +0000 SIPMediaSession: smoother code for responding with NUTAG_WITH. In one instance, the saved event was leaked. 20080201175456-5b6ca-b298c80802160fd0195b020758e32d45d5ecf491.gz commit ec57eea8b7b4b2bda6552b8815c660cdc49f6a46 Author: Mikhail Zabaluev Date: 2008-02-01 17:52:26 +0000 SIPMediaStream: descriptive messages for call membership transitions 20080201175226-5b6ca-f5f17f7a0aff77a202547f7d3e688e6af4379a53.gz commit 994e3ee02cb8255fd8e509353517aa1ed3d3d9af Author: Mikhail Zabaluev Date: 2008-01-31 16:35:09 +0000 version 0.5.2.1 20080131163509-5b6ca-59a090187813535e0d12e8f0dbb8d270bd0f2bbc.gz commit 6c3612863d56896b9c16045f1a60eab0a77df0e5 Author: Mikhail Zabaluev Date: 2008-01-31 16:31:04 +0000 version 0.5.2 20080131163104-5b6ca-7d7605da5dfef0b503d905bd932a24c107206c09.gz commit 65c0cb4cddd62eb90090067b2c4fb730b713535b Author: Mikhail Zabaluev Date: 2008-01-31 14:17:22 +0000 Updated TODO with recent developments, added two new issues to keep track of 20080131141722-5b6ca-a6ca6ddb655dbd482d2aa6eab6a2bb9e3a60cc12.gz commit 544f7cafafa44a18fd10b3a8922d0cfff90245ac Author: Mikhail Zabaluev Date: 2008-01-31 16:02:42 +0000 Reverted a part of the last comment fix because it was a change to a worse English; I need some classes 20080131160242-5b6ca-1afac001d76d8b3aa6ccbb5c7b3584436816ddd7.gz commit 515771a6354089a0f8cc6b47f3e52d92622682e6 Author: Mikhail Zabaluev Date: 2008-01-31 14:24:44 +0000 SIPMediaSession: improved some comment language 20080131142444-5b6ca-4cde6cc07d6308b09a242c4ed0d5133cae28a6c2.gz commit 1a5393a67cc615931f7aecb38c41a50386da94cf Author: Mikhail Zabaluev Date: 2008-01-31 14:23:30 +0000 SIPMediaSession: while processing a remote offer, mask locally requested direction changes with the direction as set by the offer 20080131142330-5b6ca-2b46f614397cea7acf71fd5809c5f86e6d725f4a.gz commit 73ccb72ff709239b3ba746c1040ceb788b5ce842 Author: Mikhail Zabaluev Date: 2008-01-31 14:19:52 +0000 SIPMediaSession: remember the number of streams in the last remote offer, and exclude possible streams added after that from the answer 20080131141952-5b6ca-3be8ae548a658c47ce4394f36cc43cd7b364b654.gz commit 966ffccb4c0d8a9f3a2d49d21cc1fbb6c39aac12 Author: Mikhail Zabaluev Date: 2008-01-22 17:31:57 +0000 SIPMediaSession: removed the unreachable state assertion in priv_request_response_step(), because stream additions requested by the user can trigger state machine processing. 20080122173157-5b6ca-17f1158460ebb7cf2fe6a7eff9e4d4e91f5725ec.gz commit 1494cbe4732b869033e039317a081939eeb36f97 Author: Mikhail Zabaluev Date: 2008-01-10 12:05:12 +0000 version 0.5.1.1 20080110120512-5b6ca-8d27929ce6da8c525345b50bd34e715cdde761e1.gz commit cd15c8c0841bf4a9d3f87ac78fcdde91683e75d4 Author: Mikhail Zabaluev Date: 2008-01-10 11:46:00 +0000 version 0.5.1 20080110114600-5b6ca-61ece474d238268930017373e89205393f3e1f32.gz commit 8985dc0aa6e7a205aa72226c22967a5651b0bcd0 Author: Mikhail Zabaluev Date: 2008-01-09 16:47:39 +0000 SIPMediaSession: prevent a potential assertion failure if there are multiple streams with empty codec intersection 20080109164739-5b6ca-0b369ba540f3f85d47a3ba08dfb20907faa95835.gz commit 400bd538fec72f853dc73003abd770e90a618314 Author: Mikhail Zabaluev Date: 2008-01-09 16:35:32 +0000 Don't close off streams missing in the answer if there are local media changes pending negotiation. Added a comment describing the behavior in case of a stream number mismatch. 20080109163532-5b6ca-e8944658abbbdc918db3dad7052beba6e9ed4a55.gz commit 99ee44e9b6e2968632a09a00b05cfbfc0a6dff5f Author: Mikhail Zabaluev Date: 2008-01-09 16:04:53 +0000 Refactored stream direction and pending send flags. Pending send flag management is mostly internalized into the stream code. A check made against premature clearing of pending send flags for new streams that haven't been negotiated in an offer-answer exchange yet. 20080109160453-5b6ca-8c8e4ae0b1a11511bf3df370e33c3c1fb529f700.gz commit 3dd909a2a148af605d7e7ce5c2b96dd38d0c4b17 Author: Mikhail Zabaluev Date: 2008-01-09 14:09:43 +0000 Renamed sip_media_stream_is_ready() sip_media_stream_is_local_ready() for clarity 20080109140943-5b6ca-2c320550df267efe3155803eabc73e13fb77d14a.gz commit e5bd1f010ee216b93a9a869d464b9fa2d3c03d39 Author: Mikhail Zabaluev Date: 2008-01-08 16:40:02 +0000 Fixed memory corruption due to an invalid g_object_set() parameter list 20080108164002-5b6ca-7012b05581ef3c7124c42382586fa9ab62e842ac.gz commit 9592a7f2bcd0990ebfad843023a3a639efec2955 Author: Simon McVittie Date: 2008-01-04 12:50:29 +0000 Cope with TpChannelIface channel-type property becoming writeable in telepathy-glib > 0.7.0, avoiding warnings when channels are constructed (fd.o #13896). If telepathy-glib is <= 0.7.0, the added code will never execute, but is harmless. 20080104125029-53eee-68ee29fb3dff0084e46adc863da812fa092b075b.gz commit 712817301d839cf180def411d40253faaa58b9a1 Author: Simon McVittie Date: 2008-01-04 12:44:32 +0000 Bump nano version to 1 to indicate post-0.5.0 development 20080104124432-53eee-61331461c2621900cab438bae2cb230eeb8bace8.gz commit a2810d6402033f16b44bcc62b0b6d12a1e16de66 Author: Simon McVittie Date: 2008-01-04 12:38:01 +0000 Change behaviour of SOFIASIP_DEBUG and SOFIASIP_PERSIST to match recent Gabble. SOFIASIP_DEBUG now controls debug logging only, not persistence. SOFIASIP_PERSIST controls persistent mode but does not enable extra debug logs. Depend on telepathy-glib 0.6.1 to achieve this (it could be made conditional, like in Gabble, but 0.6.1 has been out for a while so I don't think it's necessary). 20080104123801-53eee-5bff2c004f14d74059ef77e66cd253eac48d4598.gz commit 601cea86da16cc9fa37561eb6f0fe421bed36c26 Author: Mikhail Zabaluev Date: 2007-12-31 12:56:00 +0000 SIPMediaSession: postpone any request-response state machine action while local streams are not ready. This simplifies the state machine logic in priv_request_response_step(): there was need to guard against non-ready local streams in every state. 20071231125600-5b6ca-4c5c6ab1c19f7d09fa1b4ca63eb5eb3a8ae3d6a0.gz commit a8aae129b5f9e578f2f1328ad2b63b30a9db7353 Author: Mikhail Zabaluev Date: 2007-12-03 15:01:05 +0000 Added coverage support. Patch by Dmitry Rozhkov. 20071203150105-5b6ca-6ff7e2b4e90031e315f09443ec545632249f789a.gz commit e649b82d50394453f30ca803212dc3679d67f9eb Author: Mikhail Zabaluev Date: 2007-12-19 13:05:34 +0000 SIPMediaChannel: cleanups 20071219130534-5b6ca-3b489f71c03259dee4a69feae4e30e21f12d622e.gz commit ea2b518c836506654272363ef38266b7ad94d2d3 Author: Mikhail Zabaluev Date: 2007-12-07 15:59:13 +0000 Don't leak a route URL parameter buffer into the connection's memory home 20071207155913-5b6ca-61de6b74d01c7cecfbde318e1b8c967bf34bbae5.gz commit c4f4f94184654d8b66bf2f65ec6e574b1327642b Author: Mikhail Zabaluev Date: 2007-11-27 15:56:47 +0000 Use initial route set instead of NUTAG_PROXY. The transport preference is no longer encoded in the proxy URL. 20071127155647-5b6ca-ed4e3fbd9e4f352b561ad0943630bced4edd1d9d.gz commit aae3449d8a0d95ff093decca3304a463fdc37157 Author: Mikhail Zabaluev Date: 2007-11-27 15:53:11 +0000 SIPConnection: new dedicated parameter 'transport' for the SIP transport preference 20071127155311-5b6ca-a08ff0bac30f1741718c39b28792672ed9190fc9.gz commit c96f7b62cb1988a720b1b6be4c886a38a719f79b Author: Mikhail Zabaluev Date: 2007-11-27 15:49:48 +0000 Bumped the minimal required sofia-sip version to 1.12.7 20071127154948-5b6ca-1971a9173be9dc9cdf1c07baea33fdb7bfbfd342.gz commit 000fb86083d8f210569f8eb42eb066064f8faa26 Author: Mikhail Zabaluev Date: 2007-11-29 13:57:12 +0000 SIPMediaChannel: rescinding is meaningless for incoming calls, don't set the flag 20071129135712-5b6ca-d90beebb62e691a5ae650663ab3ab6e090cf7290.gz commit d4a6903fa2df653cf298640c6961e81911a72974 Author: Mikhail Zabaluev Date: 2007-11-29 13:44:24 +0000 Purged a meaningless channel group change that's been commented out for long 20071129134424-5b6ca-9a1fb59efeaf28348c5548781ab79fba82369048.gz commit c2469c8f6978bd31b90557fc07c40aa7a46eea8c Author: Mikhail Zabaluev Date: 2007-11-29 13:43:09 +0000 Disallow adding members to an incoming call channel (sf.net bug #1840543) 20071129134309-5b6ca-ace04781958166a54d5f86fd1314373a0589b474.gz commit 1fc0133091342468d806c50507e4d96862b21644 Author: Robert McQueen Date: 2007-11-28 02:19:20 +0000 correct FSF address and other LGPL 2.1 boilerplate 20071128021920-418b8-41316311ee2ad7cb9089df8a30e21475ea4d753f.gz commit 6a63c851e9602ee8124d3afebeec99f43327d1f9 Author: Mikhail Zabaluev Date: 2007-11-27 16:01:12 +0000 Removed the dead remnant of http_proxy 20071127160112-5b6ca-b21aa7bc2656753af940bdc7e4c80cdb4ca4b555.gz commit 500e109e8a052eca132c0ecdd870c1fbf728d2a0 Author: Mikhail Zabaluev Date: 2007-11-16 12:48:35 +0000 Removed the bandwidth modifiers for RTCP (RFC 3556) from SDP, because of alleged iop problems with some Cisco gateways. 20071116124835-5b6ca-851e71d63d540f6bc717c00b4ba38d47fca869c7.gz commit 69b36a624a740893c6e730be3161fcfb4da5f1fc Author: Mikhail Zabaluev Date: 2007-11-24 15:06:17 +0000 Don't switch session state from 'response-received' to 'active' until the session has been accepted remotely 20071124150617-5b6ca-9319d887210d631ee110f9023ee6fa50ecfb953b.gz commit 2a31b33184d3d3a6fb82cfaf845bc88aba674e71 Author: Mikhail Zabaluev Date: 2007-11-09 12:14:20 +0000 SIPMediaSession: forgot to free the value of 'local-ip-address' at finalize 20071109121420-5b6ca-b5038479366e9cebcd9800bdd6ecee4f37328bb1.gz commit 7f89d20396370161c34b36350de294527dcc2d96 Author: Mikhail Zabaluev Date: 2007-11-08 17:56:26 +0000 Removed a couple of outdated comments 20071108175626-5b6ca-e14c668a56ee3d717829a3c55c410fd196d5553d.gz commit 9cd7107ac902673619eabc5861324601066c794c Author: Mikhail Zabaluev Date: 2007-11-08 17:56:04 +0000 sip_media_session_finalize() lacked static declaration 20071108175604-5b6ca-f755597e4ab7a6baecbe19c1080f0caddcf1fa0b.gz commit 920aa67f4195c4da106472efe34676d2283bd2ea Author: Mikhail Zabaluev Date: 2007-11-06 15:37:02 +0000 SIPMediaStream: moved a comment about two properties to its proper place 20071106153702-5b6ca-0292f9b9534c33ff2ef3b08f8c82cb7bac4d0ad3.gz commit 554c7b0e1f79dd4e120cdc44c0e8d8e128565cf1 Author: Mikhail Zabaluev Date: 2007-11-06 15:36:14 +0000 SIPMediaStream: don't perform class type retrieval repeatedly 20071106153614-5b6ca-d14484a688a9f460305a8615babcb0c2869d61df.gz commit 87a09419a5db1e0dffc42d37c7db110c033fd4ed Author: Mikhail Zabaluev Date: 2007-11-06 15:19:59 +0000 SIPMediaSession: no need to free object_path before setting the construct-only property value 20071106151959-5b6ca-d0be4a3269ce008dc3fa09f0c838466068312e35.gz commit c5e64f704f44c07f2291e2f64b7f0769b9f7b93b Author: Mikhail Zabaluev Date: 2007-11-06 15:19:00 +0000 SIPMediaSession: don't leak the object_path string 20071106151900-5b6ca-7a71a7082baabbefcb30d7f4f5994792778b433d.gz commit cc41e3e619065b69a7a3df34912895dc36b2b36f Author: Mikhail Zabaluev Date: 2007-11-08 17:44:13 +0000 SIPMediaStream: use sip_media_session_rate_native_transport() to pick the preferred native candidate 20071108174413-5b6ca-ddbeea4f5ebede5eab16631cb6847761c519562f.gz commit a0508ed28c0e30bdbfc49e0f2b6d646cfb74edb1 Author: Mikhail Zabaluev Date: 2007-11-08 17:50:39 +0000 SIPMediaChannel: pass the 'local-ip-address' property down from the SIPConnection to a SIPMediaSession 20071108175039-5b6ca-6d5d254e57164070fec1a7d1ee8a497c2392ea87.gz commit 6ca102bd0b4dc7a2ab700de171f2779621ab62ed Author: Mikhail Zabaluev Date: 2007-11-08 17:40:17 +0000 Added sip_media_session_rate_native_transport() to promote transports that match the 'local-ip-address' property 20071108174017-5b6ca-33192107dd923ab8a2a177f93f5a609e14f2d10a.gz commit db1c11c9b213b58276d15e77df0e9109254291a3 Author: Mikhail Zabaluev Date: 2007-11-06 15:16:47 +0000 Added property 'local-ip-address' to SIPMediaSession 20071106151647-5b6ca-cb5361333afe6f5195de11376400b54d1e99650b.gz commit bb81608d6e303354c75c408e06622db1357aa561 Author: Mikhail Zabaluev Date: 2007-11-07 13:34:58 +0000 Perform more stringent sanity checks over the status messages and Reason: header text in CANCEL. Check if the string is a non-NULL UTF-8 nul-terminated string before sending it over DBus. 20071107133458-5b6ca-f9b676b12d46d185272374808e12e6394aca77bf.gz commit a66e43b6636c4e11be7e2a66291b727557cb1e2d Author: Mikhail Zabaluev Date: 2007-11-07 12:49:25 +0000 When the call is terminated, drop the associated auth entry 20071107124925-5b6ca-1acb96616fca23638b43edd5fe1ea932de195bae.gz commit 05ba9f6f5a7a20703d7969c75854f1fde49c3076 Author: Mikhail Zabaluev Date: 2007-11-07 12:48:10 +0000 Don't tell the stack to BYE call handles that are terminating already 20071107124810-5b6ca-36c2269706c97ec5bc4b2a548803d577c97b90c2.gz commit 668d21f8b2914707c3cbb34f425edc6d98021588 Author: Mikhail Zabaluev Date: 2007-11-06 17:32:56 +0000 Set transport parameter in the local binding URL when the same parameter is set in the outbound proxy URL 20071106173256-5b6ca-758fcdb5c4765775d24b55e748c41b59aaca1359.gz commit 4cf8bed29e49f7a997544437ee9030e2992ddd10 Author: Mikhail Zabaluev Date: 2007-11-05 14:24:02 +0000 Bumped version to 0.5.0 for the development branch 20071105142402-5b6ca-a29263087eb2de54b8307fa1357401d030a79a4b.gz commit 9ffa010c148a442132e50c822dc0324bf5b20f9c Author: Simon McVittie Date: 2007-11-05 11:09:52 +0000 Add telepathy-sofiasip.8 man page 20071105110952-53eee-86b57bc74b613171d0a8bfc571d2d4cd5838c28a.gz commit ce5a7fa68f17d1a09eb7c9a9085c5100048674ea Author: Mikhail Zabaluev Date: 2007-10-30 15:51:02 +0000 SIPMediaSession: move parent finalize to be the last thing 20071030155102-5b6ca-3d2ca6f77a43d04b38e5fcf7ac80a365a6e28253.gz commit 3a2a822e0ad50c0be05f47874e71ea1a50329f32 Author: Mikhail Zabaluev Date: 2007-10-30 15:49:28 +0000 Uniformly arranged finalization tracing for SIPMediaChannel and SIPMediaSession 20071030154928-5b6ca-d2a14fb39ba71ce2ef75b91702405d079e9655f0.gz commit 63d1b5c4332561d362b70ba29e7eacd6476b1857 Author: Mikhail Zabaluev Date: 2007-10-30 15:20:43 +0000 SIPMediaSession: removed the dispose-time assertion about the back reference to the channel: a signal emission on session state changed to 'ended' causes the channel object to be finalized before the session object is disposed. 20071030152043-5b6ca-4d58b69c544796f3cb2709e95c7796277b1eac2d.gz commit 4f4907ccf26245a0b3047de0f0e82e0158c5dee2 Author: Mikhail Zabaluev Date: 2007-10-30 14:18:24 +0000 SIPMediaSession: make the uplink pointer to SIPMediaChannel a weak reference. The "channel object is alive" assertion at dispose stage may fail due to refcounting in the g_object_set that triggers channel destruction in the 'state' property change handler. 20071030141824-5b6ca-dfa06ceff6c2e8c981130f5f5dc4101ac4c195bc.gz commit a1e944d583392f6fb7bad0d106a7a4d8ba5709e7 Author: Mikhail Zabaluev Date: 2007-10-30 14:28:32 +0000 XXX comment about a redundant closing round for all streams in the session 20071030142832-5b6ca-01696179687cee9740e9f031a6c13b01ff93facc.gz commit c56f20ea491c0c7bc300f69971eee447b830a756 Author: Mikhail Zabaluev Date: 2007-10-30 14:26:22 +0000 SIPMediaChannel: more tracing love in dispose 20071030142622-5b6ca-d691fd902ba2bc99b37a315f67265cb1724cbff4.gz commit 03b65e74ea0f652e8802c1a531c389697f265fd9 Author: Mikhail Zabaluev Date: 2007-10-30 14:25:52 +0000 Added a TODO item about session state implementation as a GObject property being too heavy and laden with hidden effects 20071030142552-5b6ca-b675fb14530e959f093bb3f2cb74ca175c689f29.gz commit 79db57ddb9c013e1839fcea10deb0b2d4c73d07d Author: Mikhail Zabaluev Date: 2007-10-30 14:18:24 +0000 SIPMediaSession: make the uplink pointer to SIPMediaChannel a weak reference. The "channel object is alive" assertion at dispose stage may fail due to refcounting in the g_object_set that triggers channel destruction in the 'state' property change handler. 20071030141824-5b6ca-1c2dce0e00734811ad2fb92620aa3661f2ed42f5.gz commit 32a08ba9a478df0cb5cbb82e7f6dd592f583e9c9 Author: Mikhail Zabaluev Date: 2007-10-29 16:05:43 +0000 SIPTextFactory: explicitly close channels in the implementation of close_all 20071029160543-5b6ca-bfaa109114512213322ca31153b69da34a6f5a7b.gz commit 59390d716bf22d4d2367107673955edf9fd111a3 Author: Mikhail Zabaluev Date: 2007-10-29 15:56:09 +0000 SIPMediaSession: don't reference count the pointer to SIPMediaChannel as the session is always contained by the channel 20071029155609-5b6ca-f0566868a9881d6be035e618b998bf1e81a5e954.gz commit ebd6a771dd5e224253ae3bfaf2739ec62187cb0b Author: Mikhail Zabaluev Date: 2007-10-29 15:54:55 +0000 SIPMediaFactory: explicitly close channels in the implementation of close_all 20071029155455-5b6ca-0d86046815b5735438301fb86c5a4237f5530ab3.gz commit 0477e3e31af82d788d072997819547772e765c04 Author: Senko Rasic Date: 2007-10-26 11:54:34 +0000 SIPConnection: call nua_shutdown only if neccessary, otherwise manually clean up sofia adapter 20071026115434-01440-ed68cb851646dc334e5d756a56253addf0f73ab6.gz commit 5ec5fc6de5862aa512cb1147f8c71fa19818a220 Author: Senko Rasic Date: 2007-10-26 11:12:16 +0000 SipConnection: don't overwrite error from tp_handle_ensure 20071026111216-01440-0b4ce2e326febe3ee811ab56e158b147888ab614.gz commit 50935454db0957f3a1f2291e550324f32613a852 Author: Senko Rasic Date: 2007-10-26 11:11:25 +0000 SipConnection: NUA stack can be NULL at disconnect, if we aborted connecting before it was created 20071026111125-01440-e002e7c738ccdd954da3621487c8f8ec32b1d1f1.gz commit 221931d95f18ad07f1f92f2543fb621a621d94d0 Author: Simon McVittie Date: 2007-10-26 11:18:02 +0000 Also update comment for bindir -> libexecdir 20071026111802-53eee-46070fa71d846235eed910c14a121f70fd620e31.gz commit 2e863be3132f1cf972d88087ba78a13379741303 Author: Simon McVittie Date: 2007-10-26 11:04:20 +0000 Move CM executable to $libexecdir, adjust .service accordingly 20071026110420-53eee-b1366aba07f29da7ac1be834fbe58fcf6773c1ef.gz commit 64f1c767fb755d1d277a19b3db6e5e8649e42acd Author: Mikhail Zabaluev Date: 2007-10-23 16:39:08 +0000 Fail gracefully in case the account URL could not be created from the string 20071023163908-5b6ca-0f702e9904cccd31f315f18ef88a69cca0b75af9.gz commit 37d11f10404c0f55a2bcfb4cba68be84b9f253f2 Author: Mikhail Zabaluev Date: 2007-10-23 16:33:33 +0000 Implemented connection manager parameters 'local-ip-address' and 'local-port', to enable fixation of the local socket binding in pathological IOP cases 20071023163333-5b6ca-62363e3c4e67ab68eba94e728fe2886e2e914bdd.gz commit 16ce552f468e5a8d53ce541aa02da535c24b40bf Author: Mikhail Zabaluev Date: 2007-10-19 14:10:26 +0000 Removed an obsolete XXX comment 20071019141026-5b6ca-a1e3b9cdba766ea44e52ecbe29b928c9df759179.gz commit 23f93ab5c441695244105c0c6edc48e0a0c8236d Author: Mikhail Zabaluev Date: 2007-10-18 15:23:07 +0000 SIPMediaSession: added another state, 'response-received', to resolve some uncertainties and race conditions 20071018152307-5b6ca-9be59df80bfd13eb3d45519620d1b5c1d6c3c7dc.gz commit 009a8e17740109344531dc992edd1df5826b9823 Author: Mikhail Zabaluev Date: 2007-10-11 11:18:52 +0000 Bumped version to 0.4.1 20071011111852-5b6ca-9f9f9c4f00d6f7648ae1431daf747b8b3417fa46.gz commit edc04299c6340c1684440a8e094f317b205bc998 Author: Mikhail Zabaluev Date: 2007-10-11 11:16:35 +0000 Never destroy the register use handle the hard way, as it causes Sofia-SIP to crash in some cases. Also removed a race condition between a 200 response from the server and a disconnection operation that might skip the necessary un-REGISTER. 20071011111635-5b6ca-9b8357f075b4838db59ef7ea0ea20edad2b6690f.gz commit de2cf324d9fa62752050168c875a5e8845a43e38 Author: Mikhail Zabaluev Date: 2007-10-10 16:18:33 +0000 Bumped version to 0.4.0. Whopee! 20071010161833-5b6ca-b135f15bb697c17a38a7a91ae4e168944cb43819.gz commit 8f8fd02ac6952beb939a3207677ab6746e24664a Author: Mikhail Zabaluev Date: 2007-10-10 15:43:04 +0000 TODO: updated with recent developments 20071010154304-5b6ca-8d3c37a9fef25a5c2039a0a1e0d478677ccc9e82.gz commit c0fd919bbfc4014166d82eec64a7f25bb9cd99ab Author: Mikhail Zabaluev Date: 2007-10-09 15:19:27 +0000 Erased the ugly session ID atavism inherited from Gabble 20071009151927-5b6ca-2878603425680bd2f13303399b56952d74209c18.gz commit 054551061055b3ef7b680ad8ef83321554c05b69 Author: Mikhail Zabaluev Date: 2007-10-09 12:58:25 +0000 Brushed up debug tracing in SIPMediaSession 20071009125825-5b6ca-25fcc6456fc5813602732b321d78e4599a2adb82.gz commit 3bbbbaa1e6fdc084fc80c096cc5dc8b75846bdb8 Author: Mikhail Zabaluev Date: 2007-10-09 12:57:38 +0000 SIPMediaSession: don't assert in sip_media_factory_session_id_unregister() if the session_chans hash has been destroyed already 20071009125738-5b6ca-119c9e58b481a494644841bfc550e685d6853006.gz commit 8b976b83e1b94c6260d8716a7420e2a4ffa40fab Author: Mikhail Zabaluev Date: 2007-10-09 12:59:11 +0000 Bumped version to 0.3.31.1 for development 20071009125911-5b6ca-0ae58bde11eff85e0589e3cb6a995a4993aa4a48.gz commit 0eda421a363c5395b6504987df074cca6ac6fb13 Author: Mikhail Zabaluev Date: 2007-10-05 18:23:15 +0000 Bumped version to 0.3.31 20071005182315-5b6ca-b6ebaab0dbd2edb7d22679dcc9b059a64a17b664.gz commit 47b971909431556ba55bef4289386353407520f8 Author: Mikhail Zabaluev Date: 2007-10-05 18:14:57 +0000 nitpick 20071005181457-5b6ca-4a402153eee0c3882d7522e6c4dee314301fa40d.gz commit fb3a35d7022ea814b97dfb493c1a0d95db24b14d Author: Mikhail Zabaluev Date: 2007-10-05 17:44:50 +0000 Cache auth credentials by NUA handle. Unfortunately, good ref/unref management of NUA handles as keys in auth_table causes crashes, and I have no time to debug it now, so they are accounted as simple pointers. As the lifetime of each entry is normally limited by one request, this shouldn't cause problems bigger than the previous approach of matching against one connection-wide auth string had. 20071005174450-5b6ca-ca1a336c645a4d2470e2384b9da37c569adb5916.gz commit 6be6a8d049e410f697880fb4d20f70f361a81d7c Author: Mikhail Zabaluev Date: 2007-10-05 14:40:13 +0000 Remove the auth loop prevention kludge that came to bite us in the back. We rely on Sofia-SIP to avoid resubmissions of the same authentication response. 20071005144013-5b6ca-17adec96c77f9139ec5efeba660a54eef7d183e3.gz commit 3677dd9d34a2114face87183ebc22128ac207fc0 Author: Mikhail Zabaluev Date: 2007-10-05 14:48:53 +0000 Brushed up debug logging in sip-connection-sofia.c 20071005144853-5b6ca-2c6c636ab8cb89ea80187fb49e52c11efb9b8dbd.gz commit cf012c4fc840b219c70be58b6e3ef647c1d91f2f Author: Mikhail Zabaluev Date: 2007-10-05 14:47:52 +0000 Updated a comment in the nua_r_invite handler 20071005144752-5b6ca-24d0ebb7073abe28f8a6cd76c3d874f5ff942bf6.gz commit d4eaf18f39ded9563e08e4f9c0b7aa244db133ff Author: Mikhail Zabaluev Date: 2007-10-05 14:47:03 +0000 Authenticate our BYE requests when challenged, to deal with the odd proxy that requires it 20071005144703-5b6ca-e02748d3cefbd86e1acf73e69fdd289e37baa079.gz commit 577c35a24e7f11ee7f11dd3ef0e76749de2d32d0 Author: Mikhail Zabaluev Date: 2007-10-05 14:40:13 +0000 Remove the auth loop prevention kludge that came to bite us in the back. We rely on Sofia-SIP to avoid resubmissions of the same authentication response. 20071005144013-5b6ca-92fb964f34c3a4eab1e08e2bada1357f568f05ae.gz commit 6290d2fee9358f16d608d4acfa8cb1b988f898dd Author: Mikhail Zabaluev Date: 2007-10-05 10:57:31 +0000 Debugging cosmetics 20071005105731-5b6ca-47f54d78d3f67b70c891387f89dd5a64cf8dd9ba.gz commit 7dba0513e5ce0a817247114c5e721c6500194092 Author: Mikhail Zabaluev Date: 2007-10-05 10:56:29 +0000 Declared some functions static as they should have been 20071005105629-5b6ca-894d234675baca6adb2efd37e2d081aa23691d76.gz commit 946f10191b4e573f8778387bb7366f6e22dd9b03 Author: Mikhail Zabaluev Date: 2007-10-05 10:54:37 +0000 Emit Closed when a text channel is closed by the internal logic 20071005105437-5b6ca-04a29d3a61540696bcaa3b675140b6ab91a4a224.gz commit 584061138cc8ca82612c8750c2a1afbd576cb46c Author: Mikhail Zabaluev Date: 2007-10-04 15:30:44 +0000 SIPTextChannel: received status codes 404, 480 emit Channel.Text.SendError.Offline; lump some obscure status codes under SendError.Unknown 20071004153044-5b6ca-1385113b741ed34bc1caaf21e13391380a174d2f.gz commit 612840946e6e0bcd903b1fb0bf85b895691b415e Author: Mikhail Zabaluev Date: 2007-10-04 14:25:59 +0000 Fixed a bogus null check in priv_handle_auth(), check for the real thing 20071004142559-5b6ca-2d2cfa93d8a1b22bba3d4c3591a098bd08251cbd.gz commit d30f2588a16a357fc07488291cb2ac8151c5fe8d Author: Mikhail Zabaluev Date: 2007-10-04 14:24:49 +0000 SIPMediaSession: emit StreamRemoved for the channel whenever a stream is closed 20071004142449-5b6ca-2c8c0b30242b9d5c855fde338fb515bee4e322ba.gz commit 77e4662e4b2c38daecc1c794f6887217fdf46e39 Author: Mikhail Zabaluev Date: 2007-10-04 13:29:20 +0000 Removed unused variables discovered by coverity 20071004132920-5b6ca-0701bc09c2a8fcb5ffe7987438f4a0e90c069cfa.gz commit d7f6ecfdd4b6d9d85c80d3518ba8f662a21d2db0 Author: Mikhail Zabaluev Date: 2007-10-03 14:54:33 +0000 Disable the 'natify' outbound option when 'discover-binding' connection parameter is disabled 20071003145433-5b6ca-590a7e9d89851a976d79b14ad2dd386bcc2741a0.gz commit f27de415b54d8dc7c589e01be504fec3dede19d0 Author: Senko Rasic Date: 2007-09-25 16:02:09 +0000 sip_conn_create_register_handle.c: create a handle even if To: isn't used 20070925160209-01440-e3ad5ee2d69a9597aa86d27a14d6f3b02247ec6a.gz commit 7244ac95174557a44d6b7218f54059191f8dc77b Author: Mikhail Zabaluev Date: 2007-09-26 10:42:42 +0000 SIPConnection: check for register handle creation failure 20070926104242-5b6ca-5ad76de65eeb72c3d0d766585c46515b3d1b51da.gz commit 7956a72cb09f28a8b73a0b6dcc39057366e5a397 Author: Senko Rasic Date: 2007-09-25 16:02:09 +0000 sip_conn_create_register_handle.c: create a handle even if To: isn't used 20070925160209-01440-48685ad18c38efefc8df4d92da3f2274d74e4536.gz commit 93eb1dea203acb3c58c73436e3d651bac90dd3cd Author: Senko Rasic Date: 2007-09-24 15:03:43 +0000 SipMediaSession: if invite was received, properly remove the caller from the members so that MC registers the missed call 20070924150343-01440-5f61e0e329c556db7dd20f3a31c8fad0afd4e931.gz commit 8595a7e7e4c53360f357fe6a34003c87d6999886 Author: Mikhail Zabaluev Date: 2007-09-20 15:20:58 +0000 SIPMediaChannel: map a 404 status code to GroupChangeReason.Offline The reason is, many proxies return this status code for known user names which are currently offline. 20070920152058-5b6ca-69e919c676d15eb2a3c0d349fd3297192f38c008.gz commit 6b3e085ecda8003b9ffbc5b72d3f9625c28d66c4 Author: Mikhail Zabaluev Date: 2007-09-20 15:09:14 +0000 Bumped version to 0.3.30.1 for development 20070920150914-5b6ca-416c580b6c42a6ab8b1a98ab36945a3ac736488c.gz commit f674b9c1a62333fe39f344cc5d5b7c1762b99cd9 Author: Mikhail Zabaluev Date: 2007-09-20 15:03:27 +0000 Avoid using g_hash_table_remove_all() introduced only in glib 2.12 20070920150327-5b6ca-4552a0f16244e01df704e2a19f042c734b74a60f.gz commit 571aa090797fbb3fa2fb8461995e13bf22d466ca Author: Mikhail Zabaluev Date: 2007-09-20 13:01:46 +0000 Bumped version to 0.3.30 20070920130146-5b6ca-d0b532e1803ea597facbe0dfb039de62ad90ef2c.gz commit df80035e4ea4002a67efc4ef80390a782f0586f8 Author: Mikhail Zabaluev Date: 2007-09-17 17:35:27 +0000 Don't let the client set the keepalive interval too low 20070917173527-5b6ca-391b5c46349969ed5809e831db80abaeacb3ce27.gz commit fc497a57d9907bb17b009eadd6251d9f5341eccd Author: Mikhail Zabaluev Date: 2007-09-13 16:34:14 +0000 Don't feep at nua_i_options as an unknown event 20070913163414-5b6ca-9cc4c4afc4dceb17d103495bdc8bcad859750d97.gz commit 52dd7d6855f6a5ba230d23a32f863abad81ffb1b Author: Mikhail Zabaluev Date: 2007-09-13 16:33:18 +0000 Track the handle of the event in the debug output of the NUA handler; NUA itself is not interesting 20070913163318-5b6ca-36b7542d071e742d8e138f562892dbf5b832d9ba.gz commit fc3d9deb071226e5ae7a6b7ef9664c8d8c45ae60 Author: Mikhail Zabaluev Date: 2007-09-13 16:27:34 +0000 If a CANCEL request has the Reason header, recognize certain SIP cause codes as indications that the user has acted on the incoming call in another branch of the forked call, and set the actor handle on the MembersChanged signal accordingly. 20070913162734-5b6ca-9b485df212953c520f3a7848e37c9f9b0a32f293.gz commit 23d7c16dca181ca004d4acb8fd18d6aa786d4985 Author: Mikhail Zabaluev Date: 2007-09-13 16:23:43 +0000 Assorted string comparison fixes 20070913162343-5b6ca-7611778d0e6bbefe93cb97258253319e2cd6d744.gz commit a1678083b9b748d77008d1647cb3d8709bad9150 Author: Mikhail Zabaluev Date: 2007-09-13 11:33:55 +0000 Erased the HTTP proxy parameter, we never came to use it 20070913113355-5b6ca-d8a4c623aab85b09c8b7d4cd6e01da140f5f57fb.gz commit d94fa9d3f33e050e3d168d11fcabc7f29c3bf1f9 Author: Mikhail Zabaluev Date: 2007-09-13 11:20:56 +0000 When authenticating in 'foreign' domain, fall back to the primary auth username when 'extra-auth-user' is not set. Also use the URL user name in From: (but not To: anymore) as a fallback. 20070913112056-5b6ca-540daab520621300f0c598968687be6964e178ff.gz commit 33d717dfe784f88f75838b58d4fa6f4a85a56d79 Author: Mikhail Zabaluev Date: 2007-09-11 13:44:06 +0000 God rid of the unnecessary constructor and the redundant parent_class static variable 20070911134406-5b6ca-de055fbac230cf1f04041cc6a12164a124298b70.gz commit 68ef7645a2698c3dfe98fcd1c55b6b51d58b807e Author: Mikhail Zabaluev Date: 2007-09-11 13:37:04 +0000 SIPConnection: set the error if the address handle is invalid 20070911133704-5b6ca-059564df970a18b3cd04d65b83be865651198b85.gz commit ec825df5ff4e7ff05c11cfc9fab6bdffa0bba79e Author: Mikhail Zabaluev Date: 2007-09-11 13:35:24 +0000 Static string flags for all SIPConnection properties 20070911133524-5b6ca-2c55a6c41fe663e0314f4c72bf0c07f0ad30174d.gz commit d5d786fdaa5660000c30887d70185e3960ebde59 Author: Mikhail Zabaluev Date: 2007-09-11 13:34:06 +0000 Debugging cosmetics 20070911133406-5b6ca-a8715d87d156c1b29987f3b3c5cd721020e3798d.gz commit 7aab378f5612188ba191a654b28a198849466d43 Author: Mikhail Zabaluev Date: 2007-09-11 13:31:53 +0000 More robust extraction code for the default proxy URL 20070911133153-5b6ca-4b21424b3ce7dde5fffde549f9ca3e39a8b79bb8.gz commit a236ea6ee8ec8188fa31fa27baaa7a6b0d6e57f9 Author: Mikhail Zabaluev Date: 2007-09-11 11:58:17 +0000 If the proxy URI nails the transport parameter, set it in Contact as well. Switched to keeping proxy and registrar URL properties as url_t structures, for easier access to the components and validation/normalization done by Sofia-SIP. 20070911115817-5b6ca-333b9e3c5c8a87d3903e477538ce2b9b353dc895.gz commit aaf15920b922955d87ab6f94335b6d7350754095 Author: Mikhail Zabaluev Date: 2007-09-10 12:52:03 +0000 Always call nua_unregister() when disconnecting 20070910125203-5b6ca-a407ce9f2cdd0f0c952bb8d3f918abdf48df1607.gz commit c781c523a56e3c9478420e33230d9a2f14b980dd Author: Mikhail Zabaluev Date: 2007-09-10 12:50:37 +0000 Trigger successful call establishment handler with state change to nua_callstate_ready in nua_i_state, nua_r_register will again handle only errors and auth 20070910125037-5b6ca-f189525038ac42261859ec64870563fdb5afa190.gz commit abc4353ccff9261953dd0994ad3f5608a5ef9984 Author: Mikhail Zabaluev Date: 2007-09-10 12:46:02 +0000 Bumped version to 0.3.29.1 for development 20070910124602-5b6ca-2ffb2dd5441d0a5c85c7e2d4a52b72e8575555c2.gz commit 7ef02681ee90acbde7dd0bf64460552517e0a447 Author: Mikhail Zabaluev Date: 2007-09-06 13:34:22 +0000 Bumped to version 0.3.29 20070906133422-5b6ca-ec67a22ce82d5dbbb2227e8690fcf2ef6dfc8387.gz commit f409da22886dc386a75c05bf616ba562db26aa1e Author: Mikhail Zabaluev Date: 2007-09-06 13:01:46 +0000 SIPMediaStream: don't declare boolean members as 1-bit fields 20070906130146-5b6ca-6f773d6d1e7e6991092677be079ec7955a81eed6.gz commit a45e5b507bf0b250d23235ff9b2590c0263aa788 Author: Mikhail Zabaluev Date: 2007-09-06 12:24:31 +0000 SIPMediaStream: work around the gotcha with comparison of two boolean expressions by their integer values, when setting sending/playing 20070906122431-5b6ca-ef2d43218464634cbbd16bcaccf459d5ee9ebb8e.gz commit 5a7850a974b88a47c3c47beda51814f05610327f Author: Mikhail Zabaluev Date: 2007-09-06 12:21:42 +0000 SIPMediaSession: clear pending send flags whenever session comes to active state, not only when it's first accepted 20070906122142-5b6ca-d28851d6131b47f46cb14fc3072fd63d15bad2c9.gz commit 3f1756181eef9497cdca3a434a074c0bb21159e5 Author: Mikhail Zabaluev Date: 2007-09-06 10:47:26 +0000 Removed inclusion of sofia-sip/stun_tag.h 20070906104726-5b6ca-7719964d12d85ac5bf4fc63a1cf9f519708f314d.gz commit 8a5210001baad7226b4290815f652ceaa610a4db Author: Mikhail Zabaluev Date: 2007-09-06 07:23:22 +0000 Don't include port property in the default proxy URI derived from the account domain 20070906072322-5b6ca-f09585097a2c69ecbee8caa0e5e06647071faad9.gz commit 189662c6e5dd825ab3e6cc6e5761c014e8caf5a6 Author: Mikhail Zabaluev Date: 2007-09-05 16:11:34 +0000 Use GroupChangeReason.Offline to signal the 480 status received for a call peer 20070905161134-5b6ca-f6e63173d847afe06bc886291a56b713a678a586.gz commit 72920d13c2a0ff0ccfa0cf26d01b060668588d31 Author: Mikhail Zabaluev Date: 2007-09-05 15:32:59 +0000 SIPMediaStream: the avpair parser may terminate prematurely if there's a whitespace; instead of failing an assertion, pass the parameter string as is in this case 20070905153259-5b6ca-f98df19ca499fd3f5abcd01fb0b81f75e2e3a601.gz commit be5ff88bb04a9159f9469c731aaadbb8543b8b09 Author: Mikhail Zabaluev Date: 2007-09-05 15:07:36 +0000 Bumped version to 0.3.28.1 for development 20070905150736-5b6ca-ed3068a0b95192d5347e8e0c94561d75a7d9b120.gz commit 873df5d4fa33690701b4a4304c97cb884bfe3264 Author: Mikhail Zabaluev Date: 2007-09-04 14:52:36 +0000 Bumped version to 0.3.28 20070904145236-5b6ca-0081473286b1d6c57df3ebfb1437f623e44398a4.gz commit 0b0416d7ca3cb6204c75af9b67848453b709d1f7 Author: Mikhail Zabaluev Date: 2007-09-04 08:17:47 +0000 Purged some unnecessary macro substitutions from configure.ac 20070904081747-5b6ca-81df802eed51e25a71346fdf2c41c571680c711e.gz commit bf524634025266394fc49535e821a8d39530ddc8 Author: Mikhail Zabaluev Date: 2007-09-04 08:15:21 +0000 Added syslog handler for Sofia logs, configure option --enable-syslog 20070904081521-5b6ca-127fe58519da795f8bdc3601e2c05f23516da587.gz commit 6ff9d5cb493738364338b979f8de2c4aefaebe2b Author: Mikhail Zabaluev Date: 2007-09-03 11:24:04 +0000 SIPMediaStream: avoid passing NULL as a hash key 20070903112404-5b6ca-4d947c0caa61a94aa3b7f701088b1a67368bc2c2.gz commit 1adce7a9552dc02ab9fd2d3991ce468bb292a4e9 Author: Mikhail Zabaluev Date: 2007-09-03 10:52:52 +0000 SIPMediaStream: handle the case of NULL codec parameter value, just in case (the fmtp line gets the bare name parameter) 20070903105252-5b6ca-1aa7b6f5ef6e35ac96f10c83ebd2240245bfd75b.gz commit b1b0aff9af723666d6bb6826ff8c5a4efc83afae Author: Mikhail Zabaluev Date: 2007-09-03 10:50:09 +0000 Implemented parsing of fmtp attribute into codec parameters 20070903105009-5b6ca-0f24b4e3a229ebb771e0e3e0082f42947fc87c32.gz commit de423eda22ab1ff458af1f545bdaebe64b78b84e Author: Mikhail Zabaluev Date: 2007-08-30 16:50:15 +0000 Implemented marshaling of codec parameters into fmtp attribute line 20070830165015-5b6ca-cff9999fc8ab7bbd1f4f4716c37e3964d725a0dd.gz commit 9c4cbddf1e131fe4d8816a2a08bcf901e3e7f24a Author: Mikhail Zabaluev Date: 2007-08-27 12:14:30 +0000 Don't retrieve the unused values from the transport structure 20070827121430-5b6ca-f7101b946faa3badc92d93d1a35f32e07d1d4795.gz commit fd055a9613713e9f87b73a106322bd7494c7b91b Author: Mikhail Zabaluev Date: 2007-08-27 12:12:30 +0000 Don't copy the transports array from the candidate structure, traverse it in place 20070827121230-5b6ca-aa0b96d16891cc7f241db5870e9cd52c295ff24a.gz commit 6628ed2a2551f23faf472cc1b05b6be4f9c4850d Author: Mikhail Zabaluev Date: 2007-08-27 12:11:16 +0000 Commented out debug strings which fell out of use 20070827121116-5b6ca-8deb68058c1ff66369117f4b952df972796299c5.gz commit f4d9672172575a9792bc9b837f4f59ada27ea890 Author: Mikhail Zabaluev Date: 2007-08-27 11:38:07 +0000 SIPMediaChannel: taught the SDP generation routine to use GString and free the data acquired from dbus-glib 20070827113807-5b6ca-a1460cc51124e44291ef9f9a168965831f1cbb93.gz commit 3d2deec78ab1368619465c62c20e335c78c84ab9 Author: Mikhail Zabaluev Date: 2007-08-31 15:19:42 +0000 Always update the sending state in sip_media_stream_set_direction(), even if the direction and pending flags properties did not change. The reason is, we temporarily disable sending in sip_media_stream_set_remote_media() and call sip_media_stream_set_direction() at the end to finalize the properties and the sending state. In case the direction does not change, the sending state was left disabled. 20070831151942-5b6ca-4d8b5daa30d8cc6599edd76d8094df05676e82a7.gz commit bf6ec334d25174da904768960aa6b9a52e9fb047 Author: Mikhail Zabaluev Date: 2007-08-31 15:14:51 +0000 Don't do excess changes of sending state if there was no media yet 20070831151451-5b6ca-ad0439bc501312f84181d012ec0e3d7e552853ac.gz commit 3fe1ce4c9441083cbe5de642b10702af451222f4 Author: Senko Rasic Date: 2007-08-24 13:09:29 +0000 test-handle-normalisation.py: properly test space character encoding 20070824130929-01440-25524c69e282c0cd9c20e8a28b05aaf012920a5b.gz commit e6c2a8eef09862e04a96de49d2189e362c5d135d Author: Senko Rasic Date: 2007-08-24 12:37:45 +0000 tests: upgraded to new refactored servicetest.py 20070824123745-01440-6d79f3edd2bd8ee1af4a30ac2bbce009631f69c1.gz commit b8c76d0b1f3c9244d15e2c50d04657933b377846 Author: Mikhail Zabaluev Date: 2007-08-24 12:30:03 +0000 SIPMediaChannel: honor the remote pending send flag to prevent early media sending 20070824123003-5b6ca-afb4e8d6b6cb3d40d35ce319bfd53c505e98f0e6.gz commit 0c4314dfc6a277bd204113af8cbb709ef31cc4cd Author: Mikhail Zabaluev Date: 2007-08-24 12:28:25 +0000 Don't set the outgoing session state to active until it has been accepted remotely 20070824122825-5b6ca-41f85bdd881058038f2d67ca058ceae343c30bd0.gz commit 25a2f1e779dc7c2de31d7657a67f2b38a1d10db6 Author: Mikhail Zabaluev Date: 2007-08-24 12:25:22 +0000 Handle 200 responses to INVITE by clearing the pending remote send flag 20070824122522-5b6ca-efcebcf7d251c718bd836b1e29ddbf2f03dce6df.gz commit ec8ef7233b339d7dbfe8af8fc70a91a0eda2caf8 Author: Mikhail Zabaluev Date: 2007-08-23 14:42:17 +0000 Bumped nano version to 1 for development 20070823144217-5b6ca-24dbc86e75f5f3c35617330149a8caa721d96897.gz commit 2ebdb8c7fffb64a59fa02d0bc1c5cb95ae0ee1b6 Author: Senko Rasic Date: 2007-08-07 11:52:54 +0000 sip_conn_normalize_uri(): removed useless assertion 20070807115254-01440-db89fbfccd9ab88af08ee62134d9cc6be57ade5a.gz commit 7a7a6f3216f9d59a3a6963cbc114226659934a53 Author: Mikhail Zabaluev Date: 2007-08-03 13:28:48 +0000 Bumped version to 0.3.27 20070803132848-5b6ca-f742fea6e3613fe003d83562f5dd1a2d004f72dd.gz commit a97af486124b08d5d7336d043a1c664d6d979fb7 Author: Mikhail Zabaluev Date: 2007-08-03 13:21:05 +0000 Explicitly set the list of allowed methods 20070803132105-5b6ca-6f5bafd1d088f17b91254380b23272de769f0ff1.gz commit 7a802d2b211a515f0d316c90ba677c7305791e15 Author: Mikhail Zabaluev Date: 2007-08-03 12:13:13 +0000 SIPMediaSession: cosmetized the main loop in priv_update_remote_media() to do away with goto 20070803121313-5b6ca-44a17c633e50c66b210276b3b09aed961a8e7a64.gz commit 59e6e6c0d645274414e818ff680b7c9da49e0d5b Author: Mikhail Zabaluev Date: 2007-08-02 14:02:49 +0000 Push the initial sending/playing stream state right after Ready is received 20070802140249-5b6ca-5b0e55a977bc4ce64247289650bb450b4ad14c62.gz commit caa3a6d59d4ffb223d53865a31bfbb335fd223e3 Author: Mikhail Zabaluev Date: 2007-08-02 11:14:30 +0000 SIPMediaSession: implemented rollback on failed incoming session offers 20070802111430-5b6ca-f56a3e37aeb61ce992ef4525c73c3f4db0b9f39b.gz commit 3d71fae65429838368db892710d7c3cd517354cf Author: Mikhail Zabaluev Date: 2007-08-01 14:43:13 +0000 Dereference the sip structure pointer after the check for appropriate status in priv_handle_auth() 20070801144313-5b6ca-4d0978484586375137f4a1f32bd8aa1c121c678f.gz commit 31f29db8f0b56412b1b34dbf5346d703c7370dc0 Author: Mikhail Zabaluev Date: 2007-08-01 08:08:00 +0000 Removed a dead piece of code 20070801080800-5b6ca-9cbe612d7c611e7edbb261ab8eae1eb258986339.gz commit c1db37e685bead8a87b99de2ed3452c3d2dd312e Author: Mikhail Zabaluev Date: 2007-07-31 14:57:37 +0000 Simplified the error message in the self-call case 20070731145737-5b6ca-d1701498ab85d4e4bfa7b15fae465827207e76a8.gz commit f915a9e0cad575c56a54003b6a353950b10eebdc Author: Mikhail Zabaluev Date: 2007-07-31 14:56:55 +0000 Report invalid handle when trying to call yourself 20070731145655-5b6ca-30f9ffb82b60f6ffaaed12005113dff2a9e77e68.gz commit 1461b036e2e59aef0d066faf28a92cf3d2d448b3 Author: Mikhail Zabaluev Date: 2007-07-31 14:36:49 +0000 Don't emit NewChannel if the requested peer handle is not valid (e.g. when attempting to call self) 20070731143649-5b6ca-7326ac288c67349e86ecd02bc1e45eed65a224c8.gz commit 04910194ccad741db0fc67717006170d01280565 Author: Mikhail Zabaluev Date: 2007-07-31 11:30:37 +0000 Removed public declaration of sip_media_channel_add_member() 20070731113037-5b6ca-4288af75eae478c362c45e254e39d545d52f560a.gz commit ae0e8822f5aefb2a88e54b96be7dac5ae4c07ce3 Author: Mikhail Zabaluev Date: 2007-07-31 11:28:32 +0000 SIPMediaFactory: use tp_group_mixin_add_members() instead of calling sip_media_channel_add_member() directly 20070731112832-5b6ca-f06feec7322b3ee386f0661ae6236fcbe399f841.gz commit fdde8667422ba3f6fc90d313212d0d7fdbffe9f8 Author: Mikhail Zabaluev Date: 2007-07-30 15:55:23 +0000 Bumped nano version to 1 to fix the public release 20070730155523-5b6ca-b25b8f634676b5849c2b6c89b4f15eb79a057d27.gz commit f00a4194e8bda91625132b7d96f3c88b810b2e68 Author: Mikhail Zabaluev Date: 2007-07-30 15:46:07 +0000 Use tp_debug_set_persistent() to implement SOFIASIP_PERSIST behavior, not yet committed in telepathy-glib 20070730154607-5b6ca-8eff49579e0a8a2227ddac84229f4cc539a1453c.gz commit 4a7b96fbbf25e980f7fd5925d75459578238d51b Author: Mikhail Zabaluev Date: 2007-07-30 15:46:07 +0000 Use tp_debug_set_persistent() to implement SOFIASIP_PERSIST behavior, not yet committed in telepathy-glib 20070730154607-5b6ca-7d8aa8d2c5c9cf02462ffc9d6f8d0f8d50b8c647.gz commit 555fcaa42f546dd4458feb9606842e08813afd2a Author: Mikhail Zabaluev Date: 2007-07-26 11:22:34 +0000 Bumped version to 0.3.26 20070726112234-5b6ca-6e3b72e1371b28d8b35c1805aab6706f424138a0.gz commit a36f7898f52ffd97286aad80a32a790d2034db0e Author: Mikhail Zabaluev Date: 2007-07-25 14:53:40 +0000 SIPMediaSession: commuted an assertion in SOA code, which in't always true, to a runtime check 20070725145340-5b6ca-8fee533b8ce4735cb771c50693d778dddbb3bf4e.gz commit df3f82e47c302f8caa04b604c420ecbab91a1354 Author: Mikhail Zabaluev Date: 2007-07-25 12:49:58 +0000 Added 'discover-stun' parameter with the default of TRUE 20070725124958-5b6ca-bc221fb2df4c0c4ed88af742fa56b93729b9a091.gz commit f00e3fffdbb00577e121a72ab7fe794c18e44cd7 Author: Mikhail Zabaluev Date: 2007-07-25 12:14:15 +0000 Static string flags the for 'stun-server' property 20070725121415-5b6ca-82fae9b1d495374f250aabb721b8542234ca314f.gz commit 564357068084851cdfd49409948733f41f4441fe Author: Mikhail Zabaluev Date: 2007-07-24 13:23:44 +0000 Avoid mixing STUN host name and IP address in the same private data member 20070724132344-5b6ca-1a1d72270a0142c7e5221281c2d4df635ca878d1.gz commit 782750acfd5f6ba6a4453242b4945edf7a3555fa Author: Mikhail Zabaluev Date: 2007-07-24 13:20:10 +0000 Made 'stun-server' and 'stun-port' settable properties of the media factory 20070724132010-5b6ca-084c6ac96d5f7b8fcee4eea6b8130c7e4551ecb8.gz commit 435d5ae06a2f9137f239569174151c0e56a44fa8 Author: Mikhail Zabaluev Date: 2007-07-24 11:49:22 +0000 Removed the useless STUNTAG_SERVER update 20070724114922-5b6ca-350741f435a857a0b941eb51f9cfbe4d1a21e6a9.gz commit 8ba562a9d6d06d5efb13938703ae8d6bb1ac151c Author: Mikhail Zabaluev Date: 2007-07-24 13:09:53 +0000 Bumped version to 0.3.25.1 for development 20070724130953-5b6ca-74e6c6adc5767982b8673b8e1b94b6f43702e094.gz commit 0e40a99ebe06f0859b20d8f720107739be646af5 Author: Mikhail Zabaluev Date: 2007-07-12 14:33:25 +0000 Bumped version to 0.3.25 20070712143325-5b6ca-3c0ef8cf71711b3c05b8df9b1364919feb11490c.gz commit eda91e857d8d81a3397eaaf6ba0fe62ab37b1798 Author: Mikhail Zabaluev Date: 2007-07-12 14:32:44 +0000 Bumped Sofia-SIP version dependency to 1.12.5 to reflect the tag usage 20070712143244-5b6ca-a7ff3d17bef278f32fe92ed33c31a3c7c05a77b3.gz commit 6920a9e21c0bb6cd79ca51e8ffb7557df8a80802 Author: Mikhail Zabaluev Date: 2007-07-12 14:06:06 +0000 Form destination URLs with user=phone parameter when our phone heuristic fires up 20070712140606-5b6ca-efd05c7c0e01496012da29d9eba5adad54a706ad.gz commit 57aa0b306ed14ee2c8a5531173a54587cfc7cc6e Author: Mikhail Zabaluev Date: 2007-07-12 13:25:22 +0000 Tighen the heuristic on telephone numbers: allow only the delimiters accepted in the tel: URI spec and inline whitespace, also '+' can be the leading character. 20070712132522-5b6ca-5ad5fd18f2d2624062ae059447ea230b64c352e2.gz commit c7b57ba340e86a33727c878175e61dffa7a5dacd Author: Mikhail Zabaluev Date: 2007-07-12 11:50:05 +0000 Refactored out the remote non ready counter, which has become brittle and ugly 20070712115005-5b6ca-13d4d0be9b07f895b53a25030fd4e63e46e70a2d.gz commit c161b8560a9ecf6b351e48d0bf81009f7edd73ce Author: Mikhail Zabaluev Date: 2007-07-12 11:35:02 +0000 Ifdefed out an unused variable to build with -Werror 20070712113502-5b6ca-b294ea16433cc9e82948981fac201e477908403f.gz commit 145db18107b12d07f8869ef11021bd164040df80 Author: Mikhail Zabaluev Date: 2007-07-11 17:37:04 +0000 Bumped development version 0.3.24.1 20070711173704-5b6ca-157fbd78c93d2c19e7c064e83a6b4fb35280407e.gz commit 193937fb8f27054cd02766a27684136fa0a7e44f Author: Mikhail Zabaluev Date: 2007-07-11 17:23:27 +0000 Allow updates to remote media while the stream handlers are still pondering a previous update This implementation is quick and ugly 20070711172327-5b6ca-19b56657c96e06dcc88761943c4f9eae84055ed3.gz commit 7e80dee15860f4930da0bc9e39def98c36f9ee20 Author: Mikhail Zabaluev Date: 2007-07-11 17:20:54 +0000 Comment out the custom AddMembers implementation because it doesn't seem to help 20070711172054-5b6ca-5e2d952aea10db331c622e5615bfff2479c11de0.gz commit 78f28cc181a3d4ea52506e933b0abde5207403dc Author: Mikhail Zabaluev Date: 2007-07-11 17:20:09 +0000 SIPMediaChannel: really handle the case of calling to ourself 20070711172009-5b6ca-105098ee742e8f81907e241857d51f1392b9ff6a.gz commit 684512b807f313970e4757948be371d868e282b3 Author: Mikhail Zabaluev Date: 2007-07-11 16:31:55 +0000 Handle nua_r_cancel by ignoring it 20070711163155-5b6ca-00710d83a6eba143647bf127573d269095b3c27b.gz commit 807cf344119a453b8c3beb1ec7868d9d9a81e74c Author: Mikhail Zabaluev Date: 2007-07-11 16:31:08 +0000 Reference the NUA handle we don't own prior to destroying it 20070711163108-5b6ca-ec8037fb2e7ecae9c6c18971f5d1f8bc89dfa7af.gz commit cb06ceb04f0a42a2ec84a3a9454f785626e5cb6a Author: Mikhail Zabaluev Date: 2007-07-11 16:26:19 +0000 Send BYE to the call handles for which we have destroyed the channel, but still get call state updates 20070711162619-5b6ca-6395ee89a3660ccc1ab2f42a19d2ed7fc2983a71.gz commit 850d85150cd2735d72dc48b3152d9cb53469386b Author: Mikhail Zabaluev Date: 2007-07-11 16:24:11 +0000 Maintain those commented out responses to CANCEL we don't get to use 20070711162411-5b6ca-e1e1f8e4f103cc9a20f5fb2ce78026dffcfb5060.gz commit b7f52a7fcd19a623eb24e29d890d93f8d6cefa5b Author: Mikhail Zabaluev Date: 2007-07-10 16:04:09 +0000 Bumped version 0.3.24 20070710160409-5b6ca-686301113a532313e942bfa58f298613ad7fce77.gz commit d237b5bbdc35b0284422a2ec83ec5b6c2bab5013 Author: Mikhail Zabaluev Date: 2007-07-10 15:33:58 +0000 Changed the placeholder m= line for a rejected stream to satisfy the SDP parser in Sofia 20070710153358-5b6ca-b0a9721553a15ba739b265bd7de07c310e11f241.gz commit 3b65f108f1b70686587d6739da776c0268c52e2a Author: Mikhail Zabaluev Date: 2007-07-09 17:40:23 +0000 Bumped version 0.3.23 20070709174023-5b6ca-264bf62052feb9386f27e97dd49a6e3a49b7088d.gz commit 6091abff780459c7391a56b50b88972db3b892be Author: Mikhail Zabaluev Date: 2007-07-09 17:22:03 +0000 Fix an assertion about pending intersection 20070709172203-5b6ca-e5cb6defc19d1130cd7cfd7bc1dc66e760a11f2c.gz commit ffd29303c6dcfd2b97141673d72ff450f481032e Author: Mikhail Zabaluev Date: 2007-07-09 16:44:52 +0000 Track pending codec intersections in streams to accurately update the remote_non_ready counter in the session 20070709164452-5b6ca-7845a744c00876462f0d83368174366441ac1ca0.gz commit a74c91c9c4dcabb02b275d25d8fbfc7c2fccd3ff Author: Mikhail Zabaluev Date: 2007-07-09 16:43:30 +0000 SIPMediaStream: grouped the boolean properties to 1 bit fields 20070709164330-5b6ca-09d4e915bcee8c933fb76640c9c955522c470535.gz commit dc5ad95e0db806b0e437fa047bc813d8c8ea2ba1 Author: Mikhail Zabaluev Date: 2007-07-09 15:15:46 +0000 Debug output tweaks 20070709151546-5b6ca-f615aa8161ceb328a6b77d611df7dab486dd7071.gz commit 9773c5d6b082c41fa11becf633430d32f6e8a900 Author: Mikhail Zabaluev Date: 2007-07-09 15:15:16 +0000 SIPMediaSession: when local media change due to request from the client, check if the moment has come to send an INVITE or a response 20070709151516-5b6ca-a21aa262ea6fec404c608e746ba417479d07234a.gz commit 83a432a789697711a8848cb070f24c4a338188f7 Author: Mikhail Zabaluev Date: 2007-07-09 11:25:32 +0000 Don't get stuck with no answer when a stream has been closed due to locally unsupported codecs 20070709112532-5b6ca-81505af7036a138113885391038d7bc2b97886a3.gz commit 433d779088aa2b5e957417940ce9131610ec5072 Author: Mikhail Zabaluev Date: 2007-07-09 10:26:42 +0000 Enabled mtrace for debug builds 20070709102642-5b6ca-e3c0a148fec91912f910a79319c24b5e43052571.gz commit 0fa66aea5c3aa418f03e6cad5e584123ead90a69 Author: Mikhail Zabaluev Date: 2007-07-09 10:26:42 +0000 Enabled mtrace for debug builds 20070709102642-5b6ca-917a95509b98cafa1d23125317f1e73d138baaac.gz commit 83238f7fd59e7acbf8ae33e69ff39cb5115def8a Author: Mikhail Zabaluev Date: 2007-07-09 10:25:48 +0000 Enable custom handling of MESSAGE requests, allowing us to respond with status codes at our discretion 20070709102548-5b6ca-5b831141e58290a34e79292564a8e87b21d6eee1.gz commit 36c005c3541a3a0d2742b17af966495648a32068 Author: Mikhail Zabaluev Date: 2007-07-06 18:00:42 +0000 SIPMediaSession: removed a state case not expected to be reachable 20070706180042-5b6ca-692a17ab111cad1c37bda21a29e1f13b0c21f8d1.gz commit ec1c82ed0dc954add5e9972cba9ba2c947fe948d Author: Mikhail Zabaluev Date: 2007-07-06 17:59:54 +0000 SIPMediaSession: would like to see more debugging output on an empty SupportedCodecs 20070706175954-5b6ca-0fca7e029893769e47517f7b01ef918ce93a39ab.gz commit 71feabeb846083fb075c068d4c61190a8e15d8b6 Author: Mikhail Zabaluev Date: 2007-07-06 17:56:23 +0000 SIPMediaSession: allow direct state transition from '[re]invite-sent' to 'reinvite-received', in case we receive another INVITE before the stream handlers cope with media changes in the response 20070706175623-5b6ca-690385bba4a4d999a69a78dc028c4048432afa9d.gz commit e76b92ee7ad5d9c2e6c3ead9e29fe9da15fc3135 Author: Mikhail Zabaluev Date: 2007-07-06 17:53:35 +0000 SIPMediaSession: don't destroy the call handle, only unref it; this softens the effect of some alleged Sofia-SIP problems 20070706175335-5b6ca-8fea3e0a0898c429a1368269ff37d9cf9f663218.gz commit de6eb24e127994fc46c1b2e660ea4fdf0c1babd8 Author: Mikhail Zabaluev Date: 2007-07-06 17:50:25 +0000 Don't create and destroy an intset on every session state change 20070706175025-5b6ca-cc54ecc44317a1e1837b35c128b68190bd6d7c7b.gz commit c46185c138e653f96ec51f6c7e3fdcca27bfd013 Author: Mikhail Zabaluev Date: 2007-07-06 14:40:13 +0000 Bumped development version 0.3.22.1 20070706144013-5b6ca-37f2d676cba461dd8c104847d93f6df2a8c687ec.gz commit af857afd14d9988f055f00df6c9c056853f9cef1 Author: Mikhail Zabaluev Date: 2007-07-06 14:30:41 +0000 Prevent excessive re-INVITEs on RequestStreamDirection if the direction does not really change 20070706143041-5b6ca-b6b76df64cd7abb1a6793c25d4a7b0d9e3d32056.gz commit ab1d44c5f9dbd70f33f99050400ac8bc89049e51 Author: Mikhail Zabaluev Date: 2007-07-05 15:43:11 +0000 Bumped version 0.3.22 20070705154311-5b6ca-e7ce69b139ad29cafd9e664e224424375d3eef6a.gz commit 475f3c2697b538c656042ce7759fc83c939daf93 Author: Mikhail Zabaluev Date: 2007-07-05 13:46:37 +0000 sip-connection-helpers.c: cosmetics to priv_user_encode() 20070705134637-5b6ca-f4882ca22ea20cb242b7a65bd37986375bc186d3.gz commit 1936cb8a475a39b353f4524655eac3c0c0773d83 Author: Mikhail Zabaluev Date: 2007-07-05 14:17:01 +0000 Don't lose the local pending send flag on requested direction changes 20070705141701-5b6ca-9f9417533cd9ed035adcb7125578b0bb0e740463.gz commit 5c5552e08fd0187499e37f433165b6640c3019e8 Author: Mikhail Zabaluev Date: 2007-07-05 13:50:07 +0000 Comprehensive implementation of local and remote pending send flags 20070705135007-5b6ca-6bd2784e10fb7b07199b599b100e0ac2d0baf4e7.gz commit 53b3dd8ac81dd37f010212e5cb8c8f7393991be4 Author: Senko Rasic Date: 2007-07-04 16:36:28 +0000 priv_stun_resolver_cb: examine all answers, if more than one A-type record is given, randomly pick one 20070704163628-01440-230d09d42f9891b7955ec52cdd485e35b4d5b7ac.gz commit cddb3382661abcf241984cddd70d5400c6f02dd3 Author: Senko Rasic Date: 2007-07-04 16:35:38 +0000 SIPConnection: don't perform STUN SRV discovery if use supplied stun-server param 20070704163538-01440-310020d37464dc912f66592322aceed1af6dfafe.gz commit b27354061e89602ce91871d4261176810a669d20 Author: Senko Rasic Date: 2007-07-04 12:41:11 +0000 Using auth-user only in nua_authenticate; modified register-test.py to test auth-user feature 20070704124111-01440-69c7c360486021c71c86505b6e6baa04c59d1067.gz commit 441a065f7d8a38086e933f386bd7fa1909a646df Author: Senko Rasic Date: 2007-06-28 16:17:14 +0000 SIPConnection: properly setting userinfo in Contact: header; new param auth-user can be used if registration username is different than in public account uri; store account uri details as uri_t stucture instead of saving just domain part 20070628161714-01440-826a97b26c92dea2406b0ba569b3ba0bc4720eb5.gz commit 07288e053cf61c64faf805ecb0d2195079dd4eba Author: Senko Rasic Date: 2007-06-28 15:22:29 +0000 sip-connection-helpers.c: fixed a typo and a warning message in priv_user_encode 20070628152229-01440-5cc191dafe276c8519e036a07f2b08783ee484c1.gz commit 1200d6102032d5b971c75b7a453fc784bbf90786 Author: Mikhail Zabaluev Date: 2007-07-05 10:47:41 +0000 Better debugging in sip_media_stream_set_direction() 20070705104741-5b6ca-fe1688ec21b89f8de6d35aaa80060aeb03113594.gz commit 4f9cc69513f910d4f492f265584158119f3b506a Author: Mikhail Zabaluev Date: 2007-07-05 10:47:07 +0000 Made sip_media_channel_set_remote_media() less spammy and stricter about the session check 20070705104707-5b6ca-db92b63fe263b5317ab4b6644e9d09e2e3b558ba.gz commit 46730f8f966c376b5738555584ec8df815e5faf4 Author: Mikhail Zabaluev Date: 2007-07-05 10:44:10 +0000 When updating remote direction for stream sending state, consider the effective direction 20070705104410-5b6ca-9384de905ed67a32f056f138b30add006649877c.gz commit 1919113898bd5b2bbbed151886bf21b09553ca91 Author: Mikhail Zabaluev Date: 2007-07-05 10:41:11 +0000 Renamed sip_media_channel_set_remote_info() to sip_media_channel_set_remote_media() 20070705104111-5b6ca-72a76535b55f4165f67c0c07d836ef297469545e.gz commit fe100d06124429218f4918127b6a644c2f1bac29 Author: Mikhail Zabaluev Date: 2007-07-05 10:41:06 +0000 Bumped version 0.3.21 for development 20070705104106-5b6ca-988aac1fbdfbc7292235c0a43ca688a145317766.gz commit 3b796e530b4b915615db5e1282c56d3d4ae01073 Author: Mikhail Zabaluev Date: 2007-07-04 11:54:22 +0000 Bumped version 0.3.21 20070704115422-5b6ca-e77a08074ca607da5bd546e6904a1f0e3181cb7d.gz commit 0214ef5f4d7bfedb62e0ba612728eb77a696d835 Author: Mikhail Zabaluev Date: 2007-06-29 17:24:57 +0000 Updated Nokia copyright years in src/sip-connection-helpers.c 20070629172457-5b6ca-bf4bf3b7a8e2bcc88b2b40a507a639f910d052ce.gz commit c36825da5fd721fa77a9a7bea993244b830af535 Author: Mikhail Zabaluev Date: 2007-07-03 13:36:49 +0000 Fix a crash in sip_media_stream_set_remote_media by always updating the pointer to the current remote media description structure 20070703133649-5b6ca-05b9273711b93b558249b19c974c61a32f66ef10.gz commit 76d8ed668eea938174390edcd69e9088fa51f456 Author: Mikhail Zabaluev Date: 2007-07-03 12:30:55 +0000 Untested implementation of RemoveStreams 20070703123055-5b6ca-71093bc18d9b5dc0d4ab0cd5a2d524dd3ab6bf34.gz commit b7fe516b35ef194141714b1c19f3021c3b44a056 Author: Mikhail Zabaluev Date: 2007-07-03 11:56:52 +0000 Removed an outdated TODO comment 20070703115652-5b6ca-66a12b1410aabf54ef02bb7fc23b97f42c856647.gz commit c22272896e22a3b830741a27ecc6358cf6e7db9a Author: Mikhail Zabaluev Date: 2007-07-03 11:56:32 +0000 Dump the generated SDP in one place for the whole session 20070703115632-5b6ca-13df26c38c5a25eb9a38bac346b2af4f4e1078af.gz commit 4678ef2741098a3a307164c04a661f1702d190e2 Author: Mikhail Zabaluev Date: 2007-07-02 16:57:52 +0000 Fix SDP generation goofs, and reverse a recently added assertion 20070702165752-5b6ca-299af769a6fe62f04f24df33df04794f4a23be33.gz commit e2d2a73208399d4214e22e83d2a4fe162cc36933 Author: Mikhail Zabaluev Date: 2007-07-02 16:52:15 +0000 Mask remote stream direction changes with local direction when it's not an offer, to thwart remote violations of the SOA spec Use the occasion to rename _set_remote_info functions to _set_remote_media 20070702165215-5b6ca-4d5a7105f96bfe6c85bd34e394b243b9581be076.gz commit 93500623cbde7bc5df25bc6b5b57e8c09157e978 Author: Mikhail Zabaluev Date: 2007-06-29 17:26:33 +0000 Don't set the stream to sending if the local pending send flag is set 20070629172633-5b6ca-156b4709aabaa59c4538fc2ff0604309a20a4d37.gz commit 2f6c50b7dfa9b38271784e54eb9d5c57476c2902 Author: Mikhail Zabaluev Date: 2007-06-29 17:25:54 +0000 Emit SetStreamSending in the (improbable) case the sending flag is set at the time of Ready 20070629172554-5b6ca-896ad30f3830541a8493f5198aedaff2d5d0c741.gz commit 3c303d110b59674e6d9d804b0329f5450cc831d1 Author: Mikhail Zabaluev Date: 2007-06-29 17:22:24 +0000 Implemented locally issued re-INVITEs on stream direction changes. Also do on stream addition in the middle of the session 20070629172224-5b6ca-11bb665ae3d38e3b0bd5e6bda06eeeb62a7c37ee.gz commit cd7e63d758cc5fadcf6277129487ab8b1fac0687 Author: Mikhail Zabaluev Date: 2007-06-28 13:01:33 +0000 small cleanups and improvements in SRV discovery code: no sorting required, more sanity checks 20070628130133-5b6ca-586cdef91f51a18aabb167a679526b57fda6136f.gz commit f3968b539bd3947c729e64a86ea0b0ad782c2cc1 Author: Mikhail Zabaluev Date: 2007-06-28 09:01:15 +0000 Cosmetics in URI helpers 20070628090115-5b6ca-e598ec730bba2f2197e0cf0d646e20bd5351c529.gz commit 4a3373a3157839980e7b9040f3ebe10c1f7672fc Author: Mikhail Zabaluev Date: 2007-06-27 13:36:44 +0000 Bumped version 0.3.20.1 for development 20070627133644-5b6ca-91cc60ce8291a5224fd293e967d5eb96d3be638e.gz commit d975481b42913666ec1e6100963c4d7e5f86d6e4 Author: Mikhail Zabaluev Date: 2007-06-26 11:16:26 +0000 Bumped version 0.3.20 20070626111626-5b6ca-b99347ed7f542b0e79ad24524ee95967fcbdb6c6.gz commit 10f96dd957d0c3758d20f057aee243596f5742a3 Author: Mikhail Zabaluev Date: 2007-06-26 11:16:13 +0000 Removed done TODO items for messaging 20070626111613-5b6ca-edbc2e639a8b81515a9ddfc17a7d7561ba2908ad.gz commit fd3f05cedf16f03e8a36177140b41c0cf1d6cf5d Author: Mikhail Zabaluev Date: 2007-06-26 11:11:26 +0000 If the message text is not going to be converted, validate it to be proper UTF-8 20070626111126-5b6ca-dbc4f81ed46f2fc295e43df852a74beb5862f88e.gz commit 71f5631ae0a519a66e37378bfd72c3ca3499b211 Author: Mikhail Zabaluev Date: 2007-06-26 11:07:45 +0000 Don't leak the converted body text even if it's gone wrong 20070626110745-5b6ca-1c3b6d3aa6ad1e2188cfc914dc0b2e92106136cc.gz commit 3aafffc97f5b796d28da8b81e2206908b2214a5b Author: Mikhail Zabaluev Date: 2007-06-26 09:05:11 +0000 cosmetics 20070626090511-5b6ca-987300745f1d3acc65bbebb49b98b463fbfd4628.gz commit a4574fe6a4ca207277f416b4608b18224dded629 Author: Mikhail Zabaluev Date: 2007-06-26 09:04:58 +0000 Verbose member change signals on member addition, better comments too 20070626090458-5b6ca-88adb92b9440c0c1c39fb5a034109e56f6e8a56c.gz commit 6f4f4c137cae2687d8dd0f0695b3394c155d1158 Author: Mikhail Zabaluev Date: 2007-06-26 08:33:44 +0000 Removed property 'creator' off SIPMediaChannel, makes for less redundancy 20070626083344-5b6ca-2463b715caf9547c5f7e0feaad7c1a886fbf4f8e.gz commit 9d5041ccdd86397358cb8f08a579c1da4bb234b6 Author: Mikhail Zabaluev Date: 2007-06-26 07:45:37 +0000 Found the cause of the refcounting problem and fixed it 20070626074537-5b6ca-6c3f0bb8dd7f6562fe20b8f7b98217b76710269c.gz commit 0fd54b05240393134facd51df0769a1bcacc3bbd Author: Mikhail Zabaluev Date: 2007-06-25 17:20:27 +0000 Keep references to Telepathy handles SIPMediaChannel or the session owns 20070625172027-5b6ca-9481cdf7440ab27be081ce92d34fad24dafd7892.gz commit 44f15301d662ebfbcf130b79e80ffbf8291f770f Author: Mikhail Zabaluev Date: 2007-06-25 17:16:50 +0000 Handle nua_i_cancel by emitting MembersChanged removing both call members with the peer as an actor 20070625171650-5b6ca-abdf6e1a23dbdf2ecfff4b8b6b0ac01f52df5762.gz commit 319c81e0bdb3f203ad0b1a9ee138a85b5ca2595e Author: Mikhail Zabaluev Date: 2007-06-21 15:45:04 +0000 debug log cosmetics 20070621154504-5b6ca-333a4946a9ede2e6e60d8ba8437b51821a915dc3.gz commit 7732f7d7613fe52fccd1d1dacf5162a7b4e03c5a Author: Mikhail Zabaluev Date: 2007-06-21 15:42:19 +0000 Provide error responses on various error conditions in the nua_i_message handler 20070621154219-5b6ca-49f75c68b04981c4ccd212d88681e5e8e351bef1.gz commit e4c882cb4715b23311c431415a35d630b195874b Author: Mikhail Zabaluev Date: 2007-06-21 15:09:42 +0000 Removed the unused sip-connection-helpers.h inclusion 20070621150942-5b6ca-f1236fb908b01d5046ab2b536cff1e55fc9799c5.gz commit af6b90ebc5ae4807a1bd58265e27af08b81f0178 Author: Mikhail Zabaluev Date: 2007-06-21 14:59:30 +0000 debugging cosmetics in sip_media_channel_peer_error 20070621145930-5b6ca-b4791bd2296949aaa68d4c0fdc243b8963b18e59.gz commit 09eadce40230e7f5cd151b2e2114559876c70914 Author: Mikhail Zabaluev Date: 2007-06-21 14:57:53 +0000 When the call is signalled terminated by the Sofia stack, call the new function sip_media_channel_terminated() bypassing the hangup code 20070621145753-5b6ca-1da6be109048c675f7e038147d71f98851bcd32e.gz commit a375e696d0705b39bd5730b98712ae4875eb9e28 Author: Mikhail Zabaluev Date: 2007-06-21 14:55:46 +0000 SIPMediaSession: moved state change reactive code to from sip_media_session_terminate() to the state change routine 20070621145546-5b6ca-12cb070a44f9baaae707f6f74b2fd2e21730eb1c.gz commit c8040230bc3673c4ea6c1f8dbb3e6e01800390b4 Author: Mikhail Zabaluev Date: 2007-06-21 14:50:55 +0000 Better debugging of the nua_i_state handler 20070621145055-5b6ca-09d8a26096b393739a8772c0237692553f04bf3f.gz commit 6c281542b08a3592d3183076f73183f259f48c38 Author: Senko Rasic Date: 2007-06-21 11:59:35 +0000 cosmetics, and a check that all input bytes have been processed 20070621115935-01440-d845e8e7d9238282487577797a7cf277162f4e46.gz commit e24920fa45d189f3f5b3ca04f544cd0a87ac4edc Author: Senko Rasic Date: 2007-06-21 11:19:42 +0000 Use available GLib and Sofia functions in detecting and converting message charsets 20070621111942-01440-2d4d44afda1dfebfc1011ebc1cf243060d46e78e.gz commit 6347720105ccdfc99d6b72d76658c0267c05008d Author: Senko Rasic Date: 2007-06-21 10:41:42 +0000 SIPConnection: if incoming MESSAGE is not in utf-8, attempt to convert it 20070621104142-01440-cd2e033cb8b79798f731c5e288a5b1f0770e05d0.gz commit ef12dd7dc1a3cb265ff50fe48ad7f298fc18e88d Author: Mikhail Zabaluev Date: 2007-06-19 16:35:25 +0000 Temporarily enabled short session timers to test non-modifying re-INVITEs 20070619163525-5b6ca-b785ea80cea96a3dbec9d05279b2a732e4b5c513.gz commit aa35d4d77927de88ce5cdd6037941fad38fa09db Author: Mikhail Zabaluev Date: 2007-06-19 16:35:25 +0000 Temporarily enabled short session timers to test non-modifying re-INVITEs 20070619163525-5b6ca-1948468898dc6102c7c1560916b8cd46b5d129d1.gz commit 3a5dc1530f73709791e3e6fdc2eb5f299f2c0a57 Author: Mikhail Zabaluev Date: 2007-06-19 16:33:43 +0000 fixed a warning printout 20070619163343-5b6ca-88287bdfa391060dbe18dc2dd7c209b9a582af97.gz commit 3ae9e5875e336c8a60ca17b783be44dc1b754ef1 Author: Mikhail Zabaluev Date: 2007-06-19 16:33:00 +0000 Restore SOATAG_RTP_SORT/SOATAG_RTP_SELECT on the initial nua_invite() because it influences subsequent automatic re-INVITEs 20070619163300-5b6ca-a61cbbf233985f2243a827fa61da64c08c1e42b2.gz commit c81358f688a825721e148ffcc387d27e75f82529 Author: Mikhail Zabaluev Date: 2007-06-19 16:30:00 +0000 SIPMediaSession: don't leak a SIPConnection reference in priv_save_event() 20070619163000-5b6ca-6769570af23c87063ae05c54ba409271f635564a.gz commit cc29fa0481b642ffe09183b9b0d127088a3aff5b Author: Mikhail Zabaluev Date: 2007-06-19 16:28:12 +0000 It turns out we do receive nua_i_state with a re-INVITE even if the SDP hasn't changed 20070619162812-5b6ca-2e0a39bf860841062d50ec3c0a3178fbae2d2be2.gz commit 14c5c38f0d4933480c39555959cb498308ed5f76 Author: Mikhail Zabaluev Date: 2007-06-19 16:25:40 +0000 Respond with 180 Ringing only on the initial INVITE 20070619162540-5b6ca-3b5a6564e29de454b1d99b43fb3d9b05c4bb2546.gz commit 57f215026ac87860facb550a335de9dcbab074f6 Author: Mikhail Zabaluev Date: 2007-06-19 15:03:01 +0000 no need to go so far for the peer property 20070619150301-5b6ca-a5a18f54c3b8ee61982eb2e53134fcfe03a4fc46.gz commit 0017052a0fe01c9dddf6de23749b0e6698c5804a Author: Mikhail Zabaluev Date: 2007-06-19 15:02:35 +0000 Added a TODO comment about 3pcc 20070619150235-5b6ca-ffc912fb1a785bed85878d4829462c6f3d457ef9.gz commit 03eeecf8c42e646356cb78093f10bea37895a4d8 Author: Mikhail Zabaluev Date: 2007-06-19 14:52:52 +0000 SIPMediaSession: implement an idle catcher function to work around the case when we receive nua_i_invite but no nua_i_state because no session change was detected 20070619145252-5b6ca-4a7fb5d90685678cf06d421baaf17a75a9d6e8b7.gz commit 6a1afe935593507eaa6f895920f3e6ed734ea969 Author: Mikhail Zabaluev Date: 2007-06-19 14:19:16 +0000 Renamed sip_media_session_set_state() to priv_session_state_changed() to highlight that the function should not be called directly 20070619141916-5b6ca-5d5079133500dd715901d6fc3cda7db96933ba58.gz commit 212d6d39ffc0c94329cb329451cef1d2b3e4514e Author: Mikhail Zabaluev Date: 2007-06-19 14:09:57 +0000 SIPMediaSession: more informative debug logging for native candidates 20070619140957-5b6ca-a8c3c3b7737a523e1ed96195433a5689b51f2106.gz commit e62c9820df1b65ed4d4b9213f33cbffbe885bf34 Author: Mikhail Zabaluev Date: 2007-06-19 14:08:56 +0000 SIPMediaSession: removed an outdated oa_pending property 20070619140856-5b6ca-ed176192007232fa8b5a2e44aeb09bc72821f92d.gz commit 9af3864169026a39eac8047ba83cd2dd18dad55e Author: Mikhail Zabaluev Date: 2007-06-19 13:52:50 +0000 SIPMediaSession: removed a huge block of dead legacy code in priv_request_response_step() 20070619135250-5b6ca-d1f1337f793d13eff6cda2e73961969000079596.gz commit a80ddf4f48164c4da8b83bf1f7de6044d07f32c3 Author: Mikhail Zabaluev Date: 2007-06-19 13:51:27 +0000 Removed outdated information on priv_create_session comment 20070619135127-5b6ca-3b722cc9ddf0f765c52725b6d264068497d4a110.gz commit 2855af12ff85d1c9d1c2467990fe828ecc79ec8d Author: Mikhail Zabaluev Date: 2007-06-19 13:49:49 +0000 Removed 'initiator' SIPMediaSession property, unused now 20070619134949-5b6ca-ca2566ddaf6e53ff8ed6a2ae83be82403d40ae28.gz commit 76ca2d11915a930fb0ab02102e4bdb927f2c3486 Author: Mikhail Zabaluev Date: 2007-06-19 13:33:59 +0000 SIPMediaStream: flag sdp_generated was redundant, use stream_sdp pointer itself 20070619133359-5b6ca-0868989f9cfe4e6437765a2b31af181edcd064a3.gz commit 5cb8c74ce4c275963bc3181b2e15b352935115a8 Author: Mikhail Zabaluev Date: 2007-06-18 18:13:11 +0000 redundant assertion 20070618181311-5b6ca-7017f1e390b695c01ae601d50c27e1586479ff2e.gz commit 7608f09f22f374fbe5cfc6bf0e0a0d6a81d9346e Author: Mikhail Zabaluev Date: 2007-06-18 18:12:36 +0000 sip_media_stream_is_ready(): turned a check for priv->ready_received into an assertion because it should be true whenever SDP is generated 20070618181236-5b6ca-716b2d3035021e71cb96facb91d47b5dc3d01068.gz commit 60c2f60502c4736f48fc7eba48cc54a30007438e Author: Mikhail Zabaluev Date: 2007-06-18 18:10:32 +0000 Removed a misplaced obsolete state check 20070618181032-5b6ca-47f8b1d1846cb9f4e4c375c13db75410ae89cf55.gz commit 99bf10b7a71e2e4eda7685dd064bd82a5f8d1228 Author: Mikhail Zabaluev Date: 2007-06-18 18:07:24 +0000 SIPMediaStream: emit SetActiveCandidatePair only when all native candidates have been discovered, as opposed to every time a new native candidate is added 20070618180724-5b6ca-5e1842a236b1f50cb1637e2877f619d0fde0dd46.gz commit e6396d5169e8812b98baf0ab3c3960485f8863e4 Author: Mikhail Zabaluev Date: 2007-06-18 18:01:22 +0000 Avoid sending 'ready' more than once from a SIPMediaStream 20070618180122-5b6ca-ecabdaa3bb7b802b79243ab862fffc354c852149.gz commit 0ce08f7771711a12509ec9a3d45a5183993bbd13 Author: Mikhail Zabaluev Date: 2007-06-18 17:11:33 +0000 cosmetics 20070618171133-5b6ca-f5936e081acf9be844662edf45c1059fbf09425d.gz commit 90290166a19e8f8be508034358029089fcd548b9 Author: Mikhail Zabaluev Date: 2007-06-18 17:10:21 +0000 Respond with appropriate SIP error codes on various error conditions while handling nua_i_invite 20070618171021-5b6ca-06b3769eb0cc2c8a262589c6cbcfc394532c8f31.gz commit 2b166ee5ae7577f34ad62eacbea5199032a8cabd Author: Mikhail Zabaluev Date: 2007-06-18 17:08:36 +0000 Unused codecs variable removed 20070618170836-5b6ca-e7b45a35009d0415e04a795bbc1b31a795137c81.gz commit 756c860d9074fdde31a2916261a329391e293d3d Author: Mikhail Zabaluev Date: 2007-06-18 16:53:54 +0000 Reworked SIPMediaSession states to handle re-INVITEs with NUTAG_AUTOANSWER disabled 20070618165354-5b6ca-95eb583ea15cb6829f00650b794a9ce2f7061c1d.gz commit 60173b005571754352ad7a399c24c1c5f1f97a8a Author: Mikhail Zabaluev Date: 2007-06-14 13:51:07 +0000 Corrected the SIPMediaStream 'pending-send-flags' property description 20070614135107-5b6ca-2b5783fc6fa4f37cba11ebe779ec2691e479fc8b.gz commit 09028f857b7ee27c6bd77e9519a80da708ff7e17 Author: Mikhail Zabaluev Date: 2007-06-14 13:49:37 +0000 Implemented stream state property to correctly include it in the stream lists 20070614134937-5b6ca-e4c07e01dc725bd1b286bd8b2ac9e47e7e4a131c.gz commit 7d59d1eec0b2e6ccb8c22cfd5358b5c78d71baab Author: Mikhail Zabaluev Date: 2007-06-13 17:29:35 +0000 SIPMediaStream: emit SetRemoteCandidateList with the single candidate instead of AddRemoteCandidate 20070613172935-5b6ca-021c53b05f23d19d88536c2ab60f818aa49cf27d.gz commit 72989ac0233f531c9eb2ac59a8aa5d4c9855af8e Author: Mikhail Zabaluev Date: 2007-06-13 17:27:02 +0000 SIPMediaStream: emit SetActiveCandidatePair also after the native candidate becomes available 20070613172702-5b6ca-8400c24c6395a8522fe426afa98743ac3e370dec.gz commit cac094db3bd624d0495763d083982c109a41a617 Author: Mikhail Zabaluev Date: 2007-06-13 16:41:14 +0000 SIPMediaStream: validate the remote candidate ID announced in NewActiveCandidatePair against the locally stored value 20070613164114-5b6ca-e2f326d7c8e7f0eec58a2507d156bb4ebb11c967.gz commit 02fc12f8996fdb561ffad8867c7076d32a9b0c05 Author: Mikhail Zabaluev Date: 2007-06-13 13:38:44 +0000 Ifdefed out an unnecessary change of group flags just before the channel is closed 20070613133844-5b6ca-03f41cac66c322daf1e4e65ed29b07ed5e94745a.gz commit d2e2d6d98b3649e482477c4df3857efea0f0206a Author: Mikhail Zabaluev Date: 2007-06-13 13:36:46 +0000 SIPMediaSession: keep one backup copy of the previous remote SDP structure, because streams still use it in sip_media_stream_set_remote_info() 20070613133646-5b6ca-829662eb6d79ecfbf7129f78549949b6da07fcb8.gz commit 96d06b8ce6f3bf4c1d562de38def75fa3f7b71d7 Author: Mikhail Zabaluev Date: 2007-06-13 11:05:14 +0000 Added myself to authors in source file comments 20070613110514-5b6ca-1c0278b808d6273aea57010b0891dd95d19314d9.gz commit 074317cd16024db986283578b93f52837be4add9 Author: Mikhail Zabaluev Date: 2007-06-13 11:04:38 +0000 Updated Nokia copyright years 20070613110438-5b6ca-7aa1f478f83ed4c29e18176ae8267de417cc7829.gz commit 9fee7ba12f75cfd9c47747b5b23f1b5bda8db09a Author: Mikhail Zabaluev Date: 2007-06-11 12:21:57 +0000 No, better make it an assertion because it carries some performance cost 20070611122157-5b6ca-5a3b336e25caad233cdb7e1a760c38682afc7d77.gz commit 61806eea4f058818cba6b99b28beb12373cb2aaa Author: Mikhail Zabaluev Date: 2007-06-11 12:20:17 +0000 SIPMediaSession: restore the check about the remote SDP having to be modified in sip_media_session_set_remote_info(), but make it a GLib check to raise enough hell 20070611122017-5b6ca-d3342919bcf4fb86825ff26ba8ae2f159ac64e13.gz commit 254228741ac5e0436c0de730d74bb19699d9fb25 Author: Senko Rasic Date: 2007-06-19 11:42:28 +0000 Ignoring non A-type results in STUN resolver query 20070619114228-01440-c20522413515177b9987faadb9548281f4dd15ab.gz commit 7e94b2b2fe212e736350d02b0a9a3604c5145d8b Author: Senko Rasic Date: 2007-06-14 11:57:32 +0000 added test for outgoing and incoming text messages 20070614115732-01440-e7ee2d788e9ffebdc251f683e3b5dc88a777d6ce.gz commit 497cd634f55be8caaa6fe4f8b64ec8dbf42efaa7 Author: Senko Rasic Date: 2007-06-13 11:17:58 +0000 synced testing framework with gabble's version and updated tests to use the new @match() feature 20070613111758-01440-d42134a2d485b8585f8266287a209717a556b445.gz commit a56e844bd4430209b3a7a7ae61f193a979ebcbb0 Author: Mikhail Zabaluev Date: 2007-06-13 16:18:01 +0000 Fix a debug printout of discovered STUN port 20070613161801-5b6ca-12bcb31ff1d85b12d37a7ef0e18a4a37f7648e6a.gz commit 5a90c006f438e3443fb29fb0d100599df5c8ded6 Author: Senko Rasic Date: 2007-06-13 14:25:50 +0000 properly choose between SRV records for STUN server if several records have the same priority 20070613142550-01440-8c019eb4a6a07e495aea5e0c9a71eca65a49ab04.gz commit 867d94a5fb9204b70c68bec9d035c10dcb001125 Author: Senko Rasic Date: 2007-06-12 16:22:28 +0000 SIPConnection: if stun server address is not given, do a SRV request on the sip account domain 20070612162228-01440-ccde62d0fc607c768001eec365061d23f36a7ceb.gz commit aad32e38df20bfdabcc57e824973ff4e7fb3e0f1 Author: Mikhail Zabaluev Date: 2007-06-07 10:30:06 +0000 Close media channels before sending BYE when terminating a session 20070607103006-5b6ca-6ac8a3098a7a86e6944086c57c195a19ab375a88.gz commit d310105301ed45b4f31a9c0c44f8464a54b6915f Author: Mikhail Zabaluev Date: 2007-06-07 09:24:08 +0000 SIPMediaSession: reap the stream objects consistently in the 'close' signal handler from streams 20070607092408-5b6ca-825672f2a34807b5a382bb98586247d2603ecfc6.gz commit 43d733808d5a4f5b57b0523cf531a1001e80af8b Author: Mikhail Zabaluev Date: 2007-06-07 08:30:38 +0000 Shut down the streams that were not matched by the same number of lines in a session answer or update 20070607083038-5b6ca-21804a1b3ddacf28aabf660840fccdf98f5a2e9b.gz commit 4911b447dfe9e37b20146bac3d51aec250ddc9f6 Author: Mikhail Zabaluev Date: 2007-06-07 08:27:58 +0000 Don't check if the whole session is not modified, as we shouldn't get a nua_i_state in this case 20070607082758-5b6ca-49a7b2937022e612b29339fc7d28a831127daf31.gz commit 401a7f9cd735b87a522951a6200c90025386cfb9 Author: Senko Rasic Date: 2007-06-11 09:30:58 +0000 sip-connection-helpers.c: added missing user-unreserved character for handle normalization 20070611093058-01440-0587715e59c4d5604cb990e23f58b89d28cd91a9.gz commit f92c2e1af5102f9e32c8c83141cd2b4b11f455f7 Author: Senko Rasic Date: 2007-06-08 11:45:37 +0000 sip-connection-helpers.c: improvements to handle normalization 20070608114537-01440-ed753f3481b258791d61d5a373bb6db58de812e3.gz commit 189fb26c43a25c4d4db636b721d5363e3ac7302e Author: Senko Rasic Date: 2007-06-06 11:27:53 +0000 SIPMediaChannel: cosmetics 20070606112753-01440-bb5837d439e53478c9853675eb59efb5b79f4d27.gz commit 7a8cb9aca063862e96b66081676bd0feb1693ba9 Author: Senko Rasic Date: 2007-06-06 10:58:31 +0000 SIPMediaChannel: improved self-calling check by moving it to overridden add_members function 20070606105831-01440-34ead70ee199bdc007bac48b6f84692dd7f775ee.gz commit 0ae9e3408d8dd3713d4fc9dfd72a69bd9a0a244c Author: Senko Rasic Date: 2007-06-04 13:33:53 +0000 sip-connection-helpers.c: unescaping characters in valid sip uri's that don't need escaping 20070604133353-01440-01dce49da630c1cc00beecdd6657d9a2facdf12f.gz commit a820001a73ae3171437aa95244c68991cbfc5896 Author: Senko Rasic Date: 2007-06-04 13:18:29 +0000 SIPMediaChannel: guard against calling ourselves 20070604131829-01440-1c837c18940767c7e5539c78ae8499374b2e79bd.gz commit 98320abb309e222d01d2fd5e60acc8d284fe4b5d Author: Mikhail Zabaluev Date: 2007-06-06 15:54:51 +0000 Bumped development version 0.3.19.1 20070606155451-5b6ca-e097dca2b754c7a9915fbd245029461356b567b2.gz commit 3bac48f594647ddb1a4ecd12f55d307d16118326 Author: Mikhail Zabaluev Date: 2007-06-06 13:19:02 +0000 Removed a call to g_hash_table_remove_all() not implemented in the old GLib 20070606131902-5b6ca-9f54b6674ac6f1377865ee874132964a334b8537.gz commit f601e202dfb4208f3d686c2d55f60ed3e793c8a2 Author: Mikhail Zabaluev Date: 2007-06-06 11:09:57 +0000 Bumped version 0.3.19 20070606110957-5b6ca-41077c55b7c41caf0b6c26d14c223122f519a604.gz commit ba566d73f75d8679fbb52c69c3ed463e96825761 Author: Mikhail Zabaluev Date: 2007-06-06 08:33:43 +0000 Updated TODO with recent developments 20070606083343-5b6ca-d50c25f0ac5989a20ce5a22d481ab699cb060efd.gz commit 8bcaafd00c840eaba4b14e7c1e1f5a24b40b70c6 Author: Mikhail Zabaluev Date: 2007-06-06 08:31:13 +0000 Added TWISTED_TESTS to the distribution 20070606083113-5b6ca-5d18b9ba1483ab4af6afe18c6ccf11198926d2ec.gz commit 3678eb66e938f580e53322aaab66adb62e54aa92 Author: Mikhail Zabaluev Date: 2007-06-06 08:30:30 +0000 Fixed name of sip-sofia-decls.h in the sources list 20070606083030-5b6ca-6bb8b17ca26452241324330858830d9435daeab1.gz commit 64bb26b114a3e23ebea014b0a1320f3ebec0d546 Author: Mikhail Zabaluev Date: 2007-06-06 08:23:46 +0000 Dropped configure check for libtelepathy 20070606082346-5b6ca-5176d52d53bdf7dd1e303b1487855f41b5bdb1d5.gz commit c4c7683da293ae06ec478321af79668f5ef35dbb Author: Mikhail Zabaluev Date: 2007-06-06 08:22:43 +0000 Don't build or distribute tp_caller as part of the test suite 20070606082243-5b6ca-c2dafd82b51c4d04e55253692ff14763b5783d31.gz commit 14ab663a2b669c3e7df8b3eefe91a67146c41f8b Author: Mikhail Zabaluev Date: 2007-05-29 11:08:18 +0000 Don't add sip: scheme if the proxy URI contains any colons, just to be sure 20070529110818-5b6ca-b4c7e3a97849fd4e109e7bf6c1dc37bd36bbafca.gz commit 05d7a2f5bfc0ab72f2fd024e2b72220cd51c4d14 Author: Onne Gorter Date: 2007-05-29 09:33:07 +0000 make more uri schemas pass Add checks for gt:, skype:, tel: ... extendably However, this should turn into /[a-zA-Z0-9\-\+]+:.*/ regex check 20070529093307-a0bdd-c4f052b24d06e8270c426112852642cacdca61d7.gz commit adee62ec3f6bc88fe932e1d3f45ce2414eb3f920 Author: Mikhail Zabaluev Date: 2007-05-31 13:23:07 +0000 Set NUTAG_URL("sip:*:*") to enable randomly assigned local ports, per suggestion of Kai Vehmanen 20070531132307-5b6ca-ee8040b715d91847dd4d1343f4fca3c054102d20.gz commit 6aeb5d547fe003c0a374c3354233c584c1ef6276 Author: Mikhail Zabaluev Date: 2007-06-05 15:12:28 +0000 Don't accumulate allocations of SDP data for remote info updates 20070605151228-5b6ca-727916d06b92ccb462ede4989a1fd40da66e1525.gz commit c5ccb7f495d042f2fb9e754fc38ed19f857f624d Author: Mikhail Zabaluev Date: 2007-06-05 13:49:34 +0000 g_assert_not_reached() to alert on unimplemented channel member changes 20070605134934-5b6ca-c86dc22b24c1598c83c8144f2f527a22847ead4a.gz commit a0c8b34d27785ec5201d35531a240396640302f5 Author: Mikhail Zabaluev Date: 2007-06-05 13:29:57 +0000 Signal zero bandwidth for RTCP (RFC3556) until RTCP is supported in Farsight 20070605132957-5b6ca-1edf7f1bb0cfbedb2cf349ec300ba3d1cf68a420.gz commit 14ec5094e5ebeb38748e83685a32df8fe07cf7ef Author: Mikhail Zabaluev Date: 2007-06-05 13:02:47 +0000 SIPMediaSession: more robust destruction of the NUA op handle 20070605130247-5b6ca-0c6849724977dd3f116897ed21f2dc0b47bf7820.gz commit 2e17db2d9e3ef56d3046365879c953693851ba35 Author: Mikhail Zabaluev Date: 2007-06-05 12:17:39 +0000 SIPMediaStream: generate a direction attribute in the SDP 20070605121739-5b6ca-68dd28b713ca1c138f619e89cbf9d65b42234e71.gz commit 492e1081aceaaa4940d5c8b6ce1074e160ea87a9 Author: Mikhail Zabaluev Date: 2007-06-05 12:16:28 +0000 Really static and const arrays for constant strings 20070605121628-5b6ca-0dcf44d991fd83002440e8c8d525b934d64678a2.gz commit 6756cf71628b8d1c4f52521fbb520b46cd169256 Author: Mikhail Zabaluev Date: 2007-06-05 11:22:21 +0000 Removed the useless parameter for sip_media_session_accept() 20070605112221-5b6ca-3b7291f34f8e142adae47b2769c6ac3f329ce269.gz commit c52eb3494d9b69a7c872734c0c41dddbd7e1dbc2 Author: Mikhail Zabaluev Date: 2007-06-05 11:10:41 +0000 Removed the outdated declaration of sip_media_factory_get_only_channel() 20070605111041-5b6ca-185fd5110a6332873b5bb34e223cc5f04f12d14a.gz commit 82cf556a7d3cc6b116bdc424903782bd77616c62 Author: Mikhail Zabaluev Date: 2007-06-05 11:02:31 +0000 Migrated the NUA operation handle ownership from SIPMediaChannel to SIPMediaSession 20070605110231-5b6ca-26d07880accc474d84a3a80c15b1bf350514d508.gz commit a8a4cd669c563ba0cab4ab0bf1b042df2998c4d4 Author: Mikhail Zabaluev Date: 2007-06-05 07:25:29 +0000 SIPMediaChannel: the remove_member vtable method must not be set when remove_with_reason is set 20070605072529-5b6ca-4663221f628e20954e198bfa5f24b4fab87e9966.gz commit 92f806ab3c566cfd6195f5f5a28d64677a35cbc4 Author: Mikhail Zabaluev Date: 2007-06-04 17:23:28 +0000 SIPMediaChannel: AddMembers will now return the error 'not implemented' if requested changes aren't handled 20070604172328-5b6ca-1f7189bf83cf90fece6d0e89447352e2c26f2988.gz commit e7e3282ca4a191c3703429de7f548ec34542484d Author: Mikhail Zabaluev Date: 2007-06-04 17:19:56 +0000 Use member change reason _PERMISSION_DENIED instead of _BANNED to signal authorization failures 20070604171956-5b6ca-ee29f450bec6efad011bddbe2f2b0659a7254866.gz commit 466e549ca55b37ba7ee6bede740d1c8707b1c4f9 Author: Mikhail Zabaluev Date: 2007-06-04 17:11:46 +0000 SIPMediaChannel: implemented RemoveMembers and RemoveMembersWithReason for the Group interface 20070604171146-5b6ca-2c4c87f2967ea39c9d4c56dae0e2d911306d64ce.gz commit 93485bf47563a2fb6409d9149c180822b5aeaf94 Author: Mikhail Zabaluev Date: 2007-06-04 17:10:01 +0000 Bump dependency on telepathy-glib to version 0.5.13 20070604171001-5b6ca-228fdbf230f1120f32c7ad01977a2397255f6af8.gz commit f1524aae105f5c43481adf7ade988c5554faff0e Author: Mikhail Zabaluev Date: 2007-06-04 17:07:36 +0000 New method sip_media_session_reject() to reject incoming requests 20070604170736-5b6ca-a960f92fc1c79e49fc0d5ed999e44971782ee54a.gz commit 8a4940bf95f45f929a887a55f807b154a82194f4 Author: Mikhail Zabaluev Date: 2007-06-04 12:10:51 +0000 Purged the unused signatures from signals-marshal.list 20070604121051-5b6ca-9af26e45ec37d0865d39a8418ba1a245b04b2008.gz commit b9a3b2be3537c0f5c7311f95e8c802cfb4e158fe Author: Mikhail Zabaluev Date: 2007-06-04 12:09:12 +0000 Less expensive signatures for 'ready' and 'supported-codecs', as the codec list is not used in the handlers 20070604120912-5b6ca-6290b7ca05f78bc60cb0a1c76c11950fc1c15b85.gz commit 7a24b1b11b539146ed0785a08fcd1605caf0182a Author: Mikhail Zabaluev Date: 2007-06-04 11:39:28 +0000 Removed the 'new-active-candidate-pair' signal, useless until ICE is implemented 20070604113928-5b6ca-3bcc167b93821c5076158500cfbd1e462ecd9425.gz commit 6c45d355baa3e07c47e0484ac8ae807ee2703fe5 Author: Mikhail Zabaluev Date: 2007-06-04 11:31:26 +0000 Removed the last remnants of legacy GObject signals on SIPMediaChannel 20070604113126-5b6ca-f9d1507e9a6b8f1b289b0a827343338a706a7f26.gz commit 981737a4eba1bc8665a36de7308a36f31bfdbf79 Author: Mikhail Zabaluev Date: 2007-06-04 11:24:09 +0000 Removed unnecessary SOA tags on the initial nua_invite() 20070604112409-5b6ca-f9f4fb58ade063a3b37b3b01aa293a8b5f76b447.gz commit 5134a85393748ed6218800326351109d1d9c66cf Author: Mikhail Zabaluev Date: 2007-06-01 16:24:36 +0000 SIPMediaSession: unref the temporary SIPConnection reference after use 20070601162436-5b6ca-7b1b119359899fbf3a79903d40d7826b490ace58.gz commit 41ae77d90bde9098f0d9fbea9683035daf6814c9 Author: Mikhail Zabaluev Date: 2007-06-01 14:44:21 +0000 Unified stream -> channel signal bubbling for StreamStateChanged and StreamDirectionChanged 20070601144421-5b6ca-030937fb20fb1c6facda7815320c4851475e75f3.gz commit 3b63d4b02d3ab9f7c4e62cebcae11918cf8ec82b Author: Mikhail Zabaluev Date: 2007-06-01 13:44:39 +0000 Corrected the printf format to get the object path in SIPMediaStream 20070601134439-5b6ca-db54fc21a60203650f8ae7614f9b89c77f068955.gz commit 62023b19bbc86d530573e3ea87cd4b279e3fa652 Author: Mikhail Zabaluev Date: 2007-06-01 13:43:17 +0000 Removed a hunk of obsolete code, already ifdefed out 20070601134317-5b6ca-02c45cc2a38cd2508c8a4f59c47cdb8c9675f8dd.gz commit 9454d86edd086843d6271735b83f2031a2533d9a Author: Mikhail Zabaluev Date: 2007-06-01 13:39:36 +0000 Use the stream direction property to emit NewStreamHandler 20070601133936-5b6ca-5fd901b08a3b72e044b3198052553dc77c1be031.gz commit 0162188576e127fc65717b5282d32120f5c47581 Author: Mikhail Zabaluev Date: 2007-06-01 13:35:57 +0000 Handle 'direction-changed' signal from a SIPMediaStream, emitting the Telepathy signal StreamDirectionChanged 20070601133557-5b6ca-fb128354cd7f4dac85130d1c84ecb2657817f5df.gz commit 9f999ae477e8bb7487af63600363ac53f786626d Author: Mikhail Zabaluev Date: 2007-06-01 13:35:24 +0000 Implemented utility method sip_media_stream_get_id() 20070601133524-5b6ca-4e350042da4ed9f7336ba3009a2e68a5c6353dd6.gz commit f6cf7e3ff483f83c46c82b52668164e06f84585a Author: Mikhail Zabaluev Date: 2007-06-01 11:51:00 +0000 Changed the default stream direction value to bidirectional, reflecting the default and legacy behavior 20070601115100-5b6ca-727815035556bd24a0810ea093305192219e9d03.gz commit 0341349ab8eeb2eabec9a5acae229147ad00a412 Author: Mikhail Zabaluev Date: 2007-06-01 11:49:55 +0000 cosmetics 20070601114955-5b6ca-e5873d9fe903cdc1c13b9dc30b5f639354e2fd79.gz commit a3888b2125cea7aaa2c8060afb2170f1390fb3c9 Author: Mikhail Zabaluev Date: 2007-06-01 11:48:54 +0000 List channels with actual values of direction and pending send flags 20070601114854-5b6ca-f7b0ccfb968d80a6f7787f0b56ada471f9161c0b.gz commit 75f81b85135d61e05bcf3217de00c12dc6ae9f2d Author: Mikhail Zabaluev Date: 2007-06-01 11:45:42 +0000 Properly keep object references from SIPMediaSession to the SIPMediaChannel, and from SIPMediaChannel to the SIPConnection and the media factory. Remove the SIPConnection reference in SIPMediaSession 20070601114542-5b6ca-fd176eb37579d4b83f92fac5f7e58377c1b695ff.gz commit 71a393c9f39e4897e4e4202581dc9feebe551194 Author: Mikhail Zabaluev Date: 2007-06-01 10:40:33 +0000 SIPMediaStream: init non-property values in the init routine rather than the constructor 20070601104033-5b6ca-bdb7bdbf05977e0a2701ff408e407ece7b9dbcaa.gz commit 8d10434fc8ba720667a0c9926fea37ea67c32e1f Author: Mikhail Zabaluev Date: 2007-06-01 09:44:05 +0000 Implemented signal 'direction-changed', emitted when direction or pending send flags change 20070601094405-5b6ca-a13d5bb1db08daae1f56cd8be57c38b98b9b8305.gz commit 495409dd4d8e70083bf7dab934aca1c6e189fed5 Author: Mikhail Zabaluev Date: 2007-06-01 09:39:10 +0000 Implemented properties 'direction' and 'pending-send-flags' on SIPMediaStream 20070601093910-5b6ca-8f43c5634770ed23b0c24c64d46eb995ad13d0be.gz commit a0683c2c2487f647d7790f06c852a23a686bcfce Author: Mikhail Zabaluev Date: 2007-05-31 13:45:33 +0000 cosmetics 20070531134533-5b6ca-374087cb7a58b5d010c978188e0c0c375bdca39f.gz commit dd83a67bd83f3d01715bbf96f0123252eac00a62 Author: Mikhail Zabaluev Date: 2007-05-31 13:45:11 +0000 Removed an unused variable 20070531134511-5b6ca-f85c021eaaadb4453fc6d788679f710ab2595ee7.gz commit b424ce79e297e7a3cf6aabd557e79272ce2a4d75 Author: Mikhail Zabaluev Date: 2007-05-31 13:23:53 +0000 Reworked processing of remote stream media and candidates: - Don't keep Telepathy data structures for remote information, store it on the session using an sdp_media_t structure. - Properly generate and retrieve candidate IDs for native and remote candidates, respectively. - Detect non-modifying remote session updates for the session, individual streams, and connection lines to prevent emission of bogus DBus signals. - Carefully ordered updates of candidates and codecs, in order to prevent sending wrong payloads or, as much as possible, receiving unknown payloads. 20070531132353-5b6ca-598a211599a151e0a1827dd399c93b5b387c3492.gz commit bd8c2e4a2ffb1e2471bda4aeed11c2663262a24c Author: Mikhail Zabaluev Date: 2007-05-30 13:29:56 +0000 SIPMediaStream: remote media sanity checks moved to sip_media_stream_set_remote_info() 20070530132956-5b6ca-71acbd952783199a9c0f43ea02d446909d580fae.gz commit 84ca9c9626b45f9cd69954a29157ca878dfeef80 Author: Mikhail Zabaluev Date: 2007-05-30 12:39:52 +0000 Removed the signal new-native-candidate on SIPMediaStream because the callback did nothing 20070530123952-5b6ca-f0a3242822531177ed5b54750a7df5971b34298b.gz commit b404f2089fc208471d12bf06d30a8a6ad354ef5e Author: Mikhail Zabaluev Date: 2007-05-30 12:31:11 +0000 Don't check for a 127.0.0.1 local candidate because it's a bug to get one anyway 20070530123111-5b6ca-ee236340e9386c61353157402fa7e50e7ea89270.gz commit 375d97c4014efe17503986e6b1dde1f31ed4e3a6 Author: Mikhail Zabaluev Date: 2007-05-30 12:18:32 +0000 Added an XXX comment about the corner case when the remote peer changes the stream media type on us 20070530121832-5b6ca-229d7c0b30b2674f5df2e24cc99bc425c8324f16.gz commit 4b58d0c4727e3c5b6a4d235dc0541ef0dd7ebfb4 Author: Mikhail Zabaluev Date: 2007-05-30 12:17:01 +0000 Clear the cached list of remote codecs before populating it from SDP 20070530121701-5b6ca-f5a738a529c5b231a7dc4c5f187da32fd0c1482a.gz commit a588efed1141742412f37d998c6a9a5549ec04bd Author: Mikhail Zabaluev Date: 2007-05-30 11:46:42 +0000 Reused the Sofia -> Telepathy media stream type conversion as sip_tp_media_type() 20070530114642-5b6ca-68843d739702ac239eb0813d77f494165b83354b.gz commit d44a3b07a25da2866343ad8628c08eeb588f31cc Author: Mikhail Zabaluev Date: 2007-05-29 15:14:19 +0000 Stick to one media description in priv_set_local_codecs(): - don't run away to subsequent media descriptions if this media type is not good, return FALSE instead; - do early sanity checks and debugging for media type. 20070529151419-5b6ca-e3a3de56b72c555552769795e30704e232261ff0.gz commit 4ddeae8b8917b064dcc8f0dced643ec1636e464c Author: Mikhail Zabaluev Date: 2007-05-29 14:29:04 +0000 sip_media_stream_set_playing(): more reasonable debugging 20070529142904-5b6ca-d81c64d37144ddbc65c4b60f9e37937b3da4527e.gz commit 24ad28fbd3c67b22da8d5659dbd175a3fdae99ad Author: Mikhail Zabaluev Date: 2007-05-29 14:13:31 +0000 priv_set_remote_codecs(): reuse the optional parameters hash table between iterations, only emptying the hash at the end of each one 20070529141331-5b6ca-3f5dd85665d2386f41968ee8776a4749793dd466.gz commit 6eafedfd3f63b818c6b11e3a782b289c5dcdc696 Author: Mikhail Zabaluev Date: 2007-05-29 14:02:06 +0000 Store the D-Bus struct type in a variable instead of calling a function in loops 20070529140206-5b6ca-ccc7d370f862106df2b9ed05e011b71b45cddf54.gz commit c296509ad01256deebabf95dad7bcc646f5ab847 Author: Mikhail Zabaluev Date: 2007-05-29 13:34:05 +0000 Don't leak the optional parameters hash table; added a FIXME comment to populate it 20070529133405-5b6ca-4b85111a50669c736b01c01622e3b6075a47afcf.gz commit 093f0d9356303b0c55f7a36f807779b9193f9e9d Author: Mikhail Zabaluev Date: 2007-05-29 13:09:46 +0000 Pass exact types of values for transport structure members. Use Telepathy constants for the initializers where appropriate. Check the protocol type to exclude any non-RTP streams, lest we lie to the client. 20070529130946-5b6ca-e578589ed4f72b61d11d54eabfe604e0a5daf3f1.gz commit 1b44a45e8f466d4530df58b8cbbf0820be6859c2 Author: Mikhail Zabaluev Date: 2007-05-29 12:30:27 +0000 SIPMediaStream: factored priv_set_remote_candidates() out of sip_media_stream_set_remote_info() 20070529123027-5b6ca-d9dbc2b6450bc3ebc0b8635bbe536a4f268deb1f.gz commit be57c49183ac86d496fd6064bd10549eaea2de48 Author: Mikhail Zabaluev Date: 2007-05-29 14:37:44 +0000 Declare the DBus-GLib type helpers with G_GNUC_CONST 20070529143744-5b6ca-214afa58866653f6134495bd4004f3c937936e80.gz commit c8af644b96dd34a5a331398e728d2efcd16ee7b1 Author: Senko Rasic Date: 2007-05-30 14:40:27 +0000 sip-connection-helpers.c: minor fix in temp home creation 20070530144027-01440-b41f1624cf204e30da728c572cdcb18c68cbc319.gz commit 47e6bed36b7b79069a864b87d93c1e56c6efb56d Author: Senko Rasic Date: 2007-05-30 14:21:15 +0000 SIPConnection: minor fixes to handle normalization code and the corresponding test code 20070530142115-01440-92ca50ec4eae86fb873d1405be77cca86adb2b4e.gz commit 3832ec7650411a97ded94e3dd3ca776ffe577502 Author: Senko Rasic Date: 2007-05-30 13:33:22 +0000 Added a test for the handle normalisation code 20070530133322-01440-19493ac0a7654503a63c094ff05a019684f4ae41.gz commit d251cb000d866164a7d7043ed63ad4d2b68d82c2 Author: Senko Rasic Date: 2007-05-30 13:30:05 +0000 SIPConnection: moved handle normalization logic to sip-connection-helpers.c, made a few modification, and introduced a new private variable domain storing our local domain 20070530133005-01440-915d3ab0087b13508ba1cb9dfef4192a01c3c331.gz commit 9102a06eaae6a628e21eff7d8a1aaf2c812c6b05 Author: Senko Rasic Date: 2007-05-30 11:45:08 +0000 Improving handle normalization and converting of plain usernames and phone numbers into SIP URLs 20070530114508-01440-d3fd9e1ce97ded708192e32a7fe4f7a61e195a98.gz commit 79218372398c5b0878703a1437ec203197856c10 Author: Senko Rasic Date: 2007-05-29 09:28:07 +0000 Fixed servicetest lazy test decorator name, properly making the test scripts executable 20070529092807-01440-aa0d14cca1584906b05da36774184552a48de926.gz commit fa3260ae71afd99907e864553aff2decd2c70548 Author: Senko Rasic Date: 2007-05-29 08:58:57 +0000 Added twisted-python based test suite, modelled after gabble's 20070529085857-01440-de376e60e4e00fbafc49e2a237569750a7bc9bac.gz commit 766bc6443a2b114e74d69993a4ce66246d97931e Author: Sjoerd Simons Date: 2007-05-28 15:35:33 +0000 Don't try to unset GValue's without a type 20070528153533-b58c9-6f6e0399caea538e27762127d16f809c2f837303.gz commit 55d00ae438afc250e960dd5dca40fa89b5f692eb Author: Sjoerd Simons Date: 2007-05-28 14:44:14 +0000 Don't override GetParameters and ListProtocols. tp-glibs base connection manager handles these just fine 20070528144414-b58c9-2e539b9576a03242be72fb2965039227cb579ee5.gz commit 2107af36cee530d92d4d21f1759455ee296dd398 Author: Mikhail Zabaluev Date: 2007-05-28 13:10:50 +0000 Further reduced unnecessary inclusion of sip-sofia-decls.h 20070528131050-5b6ca-f3cd51b38a5b478d3539af08cdfd4e88d55b13f8.gz commit ff01c899c9e60347d10b914c481c30fa185ece56 Author: Mikhail Zabaluev Date: 2007-05-28 13:03:38 +0000 Another cosmetic inclusion reordering 20070528130338-5b6ca-bb0bd50f57de7b46057021a09262554080401ec0.gz commit 0a2d1f08be4437728785d5e42cd091d557dc3862 Author: Mikhail Zabaluev Date: 2007-05-28 12:55:00 +0000 Removed outdated definitions of _TP_CM_UPDATED_FOR_0_5_7 20070528125500-5b6ca-f00556e8e7a4f3dd9801f0d4d5e36b9a9db515ad.gz commit 7a9e05ff97943e714cec5cdf8a8dc6dce905eef7 Author: Mikhail Zabaluev Date: 2007-05-28 12:50:59 +0000 Spring header cleaning: shipped all Sofia header customization stuff into new file sip-sofia-decls.h; cleaned up inclusions everywhere 20070528125059-5b6ca-f217322012f9671b82ba4977b137f21d04f91c94.gz commit 43cfbd52b4ed21cdbb1bcc93c2776ae33e25f008 Author: Mikhail Zabaluev Date: 2007-05-28 12:40:06 +0000 SIPMediaStream: removed the unused SIPConnection reference 20070528124006-5b6ca-48db1f57aeb1324ad2c390c8b3f8cf3bf359b83f.gz commit 822154f0aa637b8bd96fed6c9fd16591ec595708 Author: Mikhail Zabaluev Date: 2007-05-28 11:42:42 +0000 Added some missing header inclusions, removed some redundant ones 20070528114242-5b6ca-c27e8f33aa20f8704ca92aece27a9ab43ba8379c.gz commit c0f22bb57c2db7c03aedf33942ade91da88b6009 Author: Mikhail Zabaluev Date: 2007-05-28 11:39:30 +0000 Don't (re)parse the SDP from NUA, retrieve the parsed data structures from the stack 20070528113930-5b6ca-2463b4b4d09e2e7a8ae8949c7f777c7b21562df7.gz commit 244d9dc8ba147b38c6f261617ad5818c70654e71 Author: Mikhail Zabaluev Date: 2007-05-25 15:22:47 +0000 Deleted another piece of code that's been ifdefed out 20070525152247-5b6ca-437c381144d267f8df1db7827be1b8220ec7240b.gz commit 773dd9b66d01ae927c68cdd6aea8a872d79c80b1 Author: Mikhail Zabaluev Date: 2007-05-25 15:19:32 +0000 Eliminated the freeing functions because D-Bus already knows how to free its collection types 20070525151932-5b6ca-173a0fe4d13f9838c07bfad49079ebd10573019f.gz commit 4ac9c29202d067aa2dc71ec7498b1343602f8d01 Author: Mikhail Zabaluev Date: 2007-05-25 10:57:01 +0000 Added missing telepathy-helpers.h inclusion 20070525105701-5b6ca-ce9f6c5a7dac102e3a45034da05623bde6e5db34.gz commit 52ace9e4ee2638cc8e757db9761a85e78ad3cd18 Author: Mikhail Zabaluev Date: 2007-05-23 15:58:57 +0000 Don't compose a proxy URI if it was not provided in the parameters. Let the stack do it better with regard to route headers. 20070523155857-5b6ca-a252ae6390732eed3b62c9753f7ea131492cd799.gz commit 25f6ca2a294ccdf5817a01613a829530047177dd Author: Mikhail Zabaluev Date: 2007-05-23 15:58:57 +0000 Don't compose a proxy URI if it was not provided in the parameters. Let the stack do it better with regard to route headers. 20070523155857-5b6ca-2d5dbd771db2622930b1b67ca24df081dc35b98e.gz commit c7ab5457045e3d68cfa04752e180c09ced2a87d2 Author: Mikhail Zabaluev Date: 2007-05-25 10:33:02 +0000 Macroized sip_session_handler_type() 20070525103302-5b6ca-0010d581d29174e346dc0a11e27dc3f02be01584.gz commit 0844f9b30271166e043dfa46e99de1089fe63d7d Author: Mikhail Zabaluev Date: 2007-05-24 18:20:03 +0000 Properly namespaced the Telepathy pending message list free function because it's public now 20070524182003-5b6ca-430c88598f357cf40d6eb23eac5b499a6ebafe07.gz commit 36ba610d37b060b57ca03c4660cc6354d24fb20b Author: Mikhail Zabaluev Date: 2007-05-24 18:18:05 +0000 Define the DBus type functions as public 20070524181805-5b6ca-31b95f0fdba972a2192d9294adb59601263e7d08.gz commit 07afc6c1b1db534b9a163407209de75d75ba1635 Author: Mikhail Zabaluev Date: 2007-05-24 18:17:07 +0000 SIPMediaSession: macroized the DBus type functions 20070524181707-5b6ca-01798f9e44977c421e45d09461b0a6d55e0db308.gz commit c2521bf18249b12364062f16dec0f45a26f1f82b Author: Mikhail Zabaluev Date: 2007-05-24 18:15:43 +0000 Added macro DEFINE_TP_LIST_FREE to easily define destruction functions for Telepathy DBus array types 20070524181543-5b6ca-247762918d9eb59f79bc774a7119f47be0e1de64.gz commit 7e437ca73faaf6d6b4ff818ffae85f5c19972106 Author: Mikhail Zabaluev Date: 2007-05-24 17:47:19 +0000 Better iface casting in sip_text_channel_list_pending_messages() 20070524174719-5b6ca-6611025c81b766e9b4e66adf624a6a3cadeffbac.gz commit a37294bb2fbfb1f52c4cdd09a6b7b793817289b2 Author: Mikhail Zabaluev Date: 2007-05-24 17:45:54 +0000 More readable looping in sip_text_channel_list_pending_messages() 20070524174554-5b6ca-fbc74f123d78ae617c668d51442ed9951514a8c7.gz commit 6ae567a12fc487bd2d1f4225b11c7cf6650ef974 Author: Mikhail Zabaluev Date: 2007-05-24 17:26:44 +0000 Refactored management of DBus pending message list into separate functions 20070524172644-5b6ca-1f6d56b303e1b3f2d1962ea1277ce5cc0aa30c91.gz commit fcc7fe9d4c4e7167c87184661260672dc6ed3d48 Author: Mikhail Zabaluev Date: 2007-05-24 17:14:31 +0000 SIPTextChannel: don't leak the pending message structures after pushing them to the client 20070524171431-5b6ca-b04b5fecafede436bcf4267fd5824febb50d8f93.gz commit 0eb6cfe30efc4ff3c1395179b6e3c30ac0f5f81a Author: Mikhail Zabaluev Date: 2007-05-24 17:07:35 +0000 Added a comment about dubious use of GValue assignment 20070524170735-5b6ca-650001b72bc1d72166954d1338abf93dc5563714.gz commit dd57c26c0aaa64150dcab43881d36c519c57c8cf Author: Mikhail Zabaluev Date: 2007-05-24 17:06:20 +0000 Removed an earlier ifdefed out piece of code 20070524170620-5b6ca-e69f35a065f29a0564619b14f5bb73f1c6548cf8.gz commit 457470c1784ba672e4ea9006e1cdff61f54649b4 Author: Mikhail Zabaluev Date: 2007-05-24 17:04:39 +0000 Removed obsolete stuff from telepathy-helpers.h and its implementation with the whole of telepathy-helpers.c 20070524170439-5b6ca-5b2c01c9153dde7281de9bcd7bb6302e654723de.gz commit 6dd6854ee071c75ff161c1b7900b9c5fa552e491 Author: Mikhail Zabaluev Date: 2007-05-24 16:53:48 +0000 Replaced type macros mapping to expensive D-Bus calls with macroized caching type functions 20070524165348-5b6ca-0af4cbc9092ef4de14e3167cc5ed837d0900bdd3.gz commit c3657e683ce08cc6000d055380cd096f5ca7f901 Author: Mikhail Zabaluev Date: 2007-05-24 14:10:54 +0000 Stream list processing fixes: - Use fast local type-caching functions for stream lists and session handler lists instead of macros expanding to slow DBus functions. - Don't create an intermediate list for stream objects in the SIPMediaSession, create the D-Bus structure list directly. - Don't leak boxed values in stream lists and session handler lists after they have been used. 20070524141054-5b6ca-3d822620dfa1e936f0d679a5c754d7323e58c747.gz commit 7bc58d5f15d2f4dddef4f4d022b9d6036c9843fd Author: Mikhail Zabaluev Date: 2007-05-24 07:48:05 +0000 Bumped version 0.3.18.1 for development 20070524074805-5b6ca-9dde44c763ecf51d9c63d1a33de2ee9f9f6f1584.gz commit 581dc087cd761ea567ca43b3850de013493fbdcb Author: Mikhail Zabaluev Date: 2007-05-21 16:51:15 +0000 Bumped version to 0.3.18 20070521165115-5b6ca-ff4469013c31db7914a1b41abd2ee8e162bab8ae.gz commit 1582222c41281e8d9da6f4fd1c917b8d4a4df1ac Author: Mikhail Zabaluev Date: 2007-05-21 18:14:20 +0000 Better debugging in sip_conn_resolv_stun_server() 20070521181420-5b6ca-83726a2fbfb35cc5a373de5f6d07098c0866e2df.gz commit d51ca926b63c9aa37f0a1f48b81a796d3e9805f0 Author: Mikhail Zabaluev Date: 2007-05-21 18:13:09 +0000 Refactored common code in STUN server property setting 20070521181309-5b6ca-4dd012a3f8ba25024f696b9bcd0f6ef7774ef894.gz commit 9e97db2d12c306a461dc63b4c2ca8c7f20dc23e1 Author: Mikhail Zabaluev Date: 2007-05-21 17:51:01 +0000 SIPConnection: properly handle NULL value for stun-server 20070521175101-5b6ca-0a176664af9642081c10c895eea538c55f48100d.gz commit 040ff02a6a57902de1a9b49bc843f330840be33a Author: Mikhail Zabaluev Date: 2007-05-21 17:50:13 +0000 DNS query type is a constant, no need for a variable 20070521175013-5b6ca-e48b603c21ec21dbaf87d68d16e42b9726797cf4.gz commit 23255201eac3552245848f039fe97e204bdcc462 Author: Mikhail Zabaluev Date: 2007-05-21 17:49:34 +0000 Redundant inclusion of sofia-sip/sresolv.h 20070521174934-5b6ca-a84383b3b0dbaebece7d76a1d7b8a2705423624c.gz commit 4cca6a9ec81723c9829b71f762a3e95860008ef3 Author: Mikhail Zabaluev Date: 2007-05-21 17:44:34 +0000 Enhanced debugging in sip_conn_update_stun_server(); cosmetic changes 20070521174434-5b6ca-9d9b0745fc79566d75e266d88bc1fb8dd8e714b5.gz commit a0e0b07f7d0394e57a8d1e8a443883e78ae7c738 Author: Mikhail Zabaluev Date: 2007-05-21 16:37:10 +0000 Do nothing in sip_conn_update_stun_server() if the STUN server property is NULL 20070521163710-5b6ca-998fffd6c0fd04f4ed087b135ab8ef1f70e1dad6.gz commit eca90e14aae4298b538dd1da2a3db3a6a720fbcc Author: Mikhail Zabaluev Date: 2007-05-21 16:37:10 +0000 Do nothing in sip_conn_update_stun_server() if the STUN server property is NULL 20070521163710-5b6ca-a09dee1712ca2276ac410a0d9d28a6fc4b7f0848.gz commit 9c43bba8911dfec44d6bf390f8098a509057fba9 Author: Senko Rasic Date: 2007-05-21 17:15:27 +0000 SIPConnection: a small fix in stun server address free 20070521171527-01440-a7e38349cbcf3782bce0aef3f11b8a9bbfbf2948.gz commit 88019e55022c00d2a2a14b723205b4960e0cd982 Author: Senko Rasic Date: 2007-05-21 17:02:24 +0000 SIPConnection: don't try to resolve stun address if it's already an IP address 20070521170224-01440-49840c33d15efc2d4b30001518333083d5d87a73.gz commit f0df7328e5ad7dc65d60dfc64dede1448a97fdc1 Author: Mikhail Zabaluev Date: 2007-05-21 15:39:31 +0000 Added Senko Rasic to the AUTHORS 20070521153931-5b6ca-9ad71bd3ddddbfde2dafaf8b9599c04b1c36be0e.gz commit 30136f45c2c76e633fa0be21f608ef15a7682ccb Author: Mikhail Zabaluev Date: 2007-05-21 12:22:08 +0000 Set proxy-related tags only if the proxy URI is set. If proxy is unset but the registration SIP address is SIPS, mandate the SIPS contact. 20070521122208-5b6ca-b25baa4273aa24317712f1f7e3c09a7a7f80b9d4.gz commit 2062ae80d01190b7eb0914ca8c55267d42bac33d Author: Mikhail Zabaluev Date: 2007-05-18 12:57:48 +0000 More DEBUGification, removed some trailing newlines in debug strings 20070518125748-5b6ca-33de3034cb8c1d6d557b0a55719724f9a1431c4d.gz commit e709062437979ded95c4c9bb0297f545c0e42690 Author: Senko Rasic Date: 2007-05-21 09:51:32 +0000 SIPConnection: improvements to stun address resolver 20070521095132-01440-448456f367bb3d08c1dab861e474e9c46f7930fd.gz commit 62aec6cbf564f4a321f049af774e43120fe090ed Author: Senko Rasic Date: 2007-05-17 15:52:35 +0000 SIPConnection: use sofiasip resolver to async resolv stun server address 20070517155235-01440-7b30a673d534df254edcd02a4cdd62aa93af456b.gz commit e4697dc7109fa7dc123da5ecdeb82ad0007a5b4b Author: Mikhail Zabaluev Date: 2007-05-18 12:50:41 +0000 Replaced a printf with DEBUG macro 20070518125041-5b6ca-d134b8cba5072cba2d8c8fb389e65e76921c835e.gz commit b8182c4eeb9156602ce8590459f32156e547c3d1 Author: Mikhail Zabaluev Date: 2007-05-18 11:43:46 +0000 Don't use -1 as the default value for keepalive interval 20070518114346-5b6ca-ab15d97ed94b387c5f7b214e530c750c12938a40.gz commit 567d491e250fc09ed373a363b05fd22b5957c535 Author: Mikhail Zabaluev Date: 2007-05-18 11:42:35 +0000 Bumped version 0.3.17.1 for development 20070518114235-5b6ca-e3b718ec9be520ddf47dea1bb485e55de0e852ce.gz commit 23d9b9ebca476ea66e11a3dd0075a4978efa3a5b Author: Mikhail Zabaluev Date: 2007-05-16 09:15:33 +0000 Bumped version 0.3.17 20070516091533-5b6ca-9e835e9f4877e66eba86e4e3757c89eefbd8b9c6.gz commit b9fc4048254e5e490cae595a586c3c254a3a6f1d Author: Mikhail Zabaluev Date: 2007-05-16 09:11:34 +0000 Unbreak the temphome code in sip_conn_create_*_handle() 20070516091134-5b6ca-0aa404eef9b43f5e5a59fcc4ce40ec15c8a88e70.gz commit 641bcba506ceb3e4f6e8947be3a1f1fcc31cd7be Author: Mikhail Zabaluev Date: 2007-05-15 13:18:36 +0000 Reuse TP_CHANNEL_GROUP_CHANGE_REASON_BANNED as the indication of a call rejected due to not having proper auth credentials 20070515131836-5b6ca-3a6a76a0584738258f77207248f9d8bc7dcbc881.gz commit 27d7c0efcd88215aacf26860cdaa0e71a1632c0a Author: Mikhail Zabaluev Date: 2007-05-15 13:11:23 +0000 Set the peer as the actor in MembersChanged emitted on the peer's call error 20070515131123-5b6ca-b93d919c0f40255d255edeb58c07e8a2bb1e0fbe.gz commit f198b32ef54f92e202b518ff798ad8d988c3dbd4 Author: Mikhail Zabaluev Date: 2007-05-15 15:46:15 +0000 Create the temporary Sofia homes on stack 20070515154615-5b6ca-24f0d500eca17485c9e180123c0e35d194b7593b.gz commit a45fd0614f583507596eb4a073f866095aa93c78 Author: Mikhail Zabaluev Date: 2007-05-15 15:20:48 +0000 More sensible debugging of sending BYE 20070515152048-5b6ca-60155e5a0fff5569b5eb0274013a72c683c406ec.gz commit e6d598a1abb4a2cf299cc4fa03e1183178e59231 Author: Mikhail Zabaluev Date: 2007-05-15 15:18:17 +0000 Remove a disastrous usage of an uninitialized outdated variable 20070515151817-5b6ca-f067945b3c1818b62e4230e4f4cda18261f346c9.gz commit 53b57a3ed090b7996860ff279940a7bb94036061 Author: Mikhail Zabaluev Date: 2007-05-15 15:14:49 +0000 Rely on reference counting to track the call handle without leaking it 20070515151449-5b6ca-09c3036ac41be7e8520f756d94288ac6d8110cd9.gz commit 82cde52e91606f6bf093ad6d79e28e03b54eb1df Author: Mikhail Zabaluev Date: 2007-05-15 10:58:26 +0000 Clarified the description for the discover-binding parameter 20070515105826-5b6ca-34a59fd4cc54a0a666e31db432dbd3db4f86a5d3.gz commit ccd2dd0cf1345f08fb4d5af92b08ced3a85aefbf Author: Mikhail Zabaluev Date: 2007-05-15 10:26:46 +0000 Pass Telepathy handles to the helpers creating NUA handles. An attempt to resolve the requested_address/address debacle by using tp_handle_inspect() where appropriate. Deallocate the header structures allocated for SIPTAG_TO values. 20070515102646-5b6ca-2367286df051f0d4284de9e2a3084465b32b5b6f.gz commit e70adc503deb2e2adb2092a0d839a39f05b85863 Author: Mikhail Zabaluev Date: 2007-05-14 17:40:37 +0000 Fixed up a string leak in priv_r_get_params, added a WTF comment about the piece of code containing it 20070514174037-5b6ca-4f8e0155a1f4ab7635ceb09a0aa00d1716d26a06.gz commit 973ecf0f960fdd4b074ce74130784a8436b1e986 Author: Mikhail Zabaluev Date: 2007-05-14 17:38:48 +0000 Fixed a lurking bug in error rollback code in sip_connection_request_handles() 20070514173848-5b6ca-d6dded2a5b35cba844f121b86e5eac510c1c99c1.gz commit 9a017890701eb03425ebd170d25c006b2ea715de Author: Mikhail Zabaluev Date: 2007-05-14 17:27:55 +0000 Consistently unreference the Telepathy handle we acquire with priv_handle_parse_*() 20070514172755-5b6ca-cf00a42a7242fcc2f120be4912d69865a0301d93.gz commit 00955eb371d307fe4d7092dce5835b0ebf1f34ab Author: Mikhail Zabaluev Date: 2007-05-14 17:07:30 +0000 sip_conn_sofia_nua(), sip_conn_sofia_home() are no longer used anywhere, removing 20070514170730-5b6ca-544b5a0a10d8482348ab1d9b0488e0ece65ffec4.gz commit 4e88f3d86f9f3b85af6baba733fe49c0519e7f5c Author: Mikhail Zabaluev Date: 2007-05-14 16:59:36 +0000 Handle creation helpers got SIPConnection* parameter instead of a NUA and a home which are always taken from the connection 20070514165936-5b6ca-9c6eb8f454c48006a327f41b738beecb559fb881.gz commit 4d8ce9fd63511b1bc13d9e72438a09886e1f5e14 Author: Mikhail Zabaluev Date: 2007-05-14 16:34:19 +0000 trailing whitespace 20070514163419-5b6ca-67682824a2a7350596d170776405f5f4d0f2047e.gz commit 34876fe1c6d3d9dba15a0e44a4f40c248c0d7c6b Author: Mikhail Zabaluev Date: 2007-05-14 16:26:12 +0000 Refactored code retrieving addressing information from SIP headers. Now the helper functions return handles, which in future will have qdata with a display name. We don't need Subject header content anywhere, dropped that. 20070514162612-5b6ca-4c6eba44ccd908db728418d137d52bc9d67e32cd.gz commit 0eca98f13fda31faf7fdca3470e534c585c46502 Author: Mikhail Zabaluev Date: 2007-05-14 12:27:18 +0000 small debugging improvements in sip-connection-sofia.c 20070514122718-5b6ca-941a571d97fae4d324bf671795d517b21a459d8e.gz commit 92799167e26d2a28ed14d1ec844c4fafeb1503f3 Author: Mikhail Zabaluev Date: 2007-05-14 12:25:29 +0000 Moved header parsing and related resource use closer to the handle work in priv_i_invite(), to clarify further refactoring 20070514122529-5b6ca-596d68d87a9fcf3faf349621db608cff3bef2313.gz commit 0bb29c8caeadaf6d1b2aeea6ff0291751ae214ca Author: Mikhail Zabaluev Date: 2007-05-11 14:57:32 +0000 Don't need remote URL to create a session, certainly not as a session ID 20070511145732-5b6ca-747aa10cc792082dff2467adaa7c0be1c09a9086.gz commit 183ae55c0f364dd0284f2c09040cf122f1207d68 Author: Mikhail Zabaluev Date: 2007-05-11 14:02:26 +0000 Removed the unused subject_str parameter for sip_media_channel_respond_to_invite() 20070511140226-5b6ca-2407d796d09a5a4b0bbd777a8c2715e09254b88e.gz commit 9d41bc26907b0f21bf4beca481f9e720bd6e1f65 Author: Mikhail Zabaluev Date: 2007-05-11 13:59:29 +0000 Use a plain C string instead of a GString for message text 20070511135929-5b6ca-c293d4d25264fb6bb053048ac06f1b9dca80bc5a.gz commit 80f1d50a8b959bdf780a23cf078f6f217aeca2c4 Author: Mikhail Zabaluev Date: 2007-05-11 13:54:44 +0000 Removed an unused GObject* variable 20070511135444-5b6ca-a42411373d01cccdd287140971d088f12b9717bf.gz commit 2114fca192763e8507d4cd92bcf221bf3420efd7 Author: Mikhail Zabaluev Date: 2007-05-11 13:53:49 +0000 Removed irrelevant parameters for sip_text_channel_receive() 20070511135349-5b6ca-95a907e93e88bdf1c8293303a7b9b5e474b9beba.gz commit 49eaf2a07749b7fd72b24d3f7e865e4a0faecc80 Author: Mikhail Zabaluev Date: 2007-05-14 16:34:01 +0000 _LIBADD is redundant for libtpsip-convenience 20070514163401-5b6ca-7f3ee4ab8d54719341cd6eb72933e3f67dd70f6a.gz commit ede30daf8accd108ec63af81e82880ee8df24464 Author: Mikhail Zabaluev Date: 2007-05-14 16:07:31 +0000 Corrected linkage of telepathy-glib 20070514160731-5b6ca-e868115029bb27609c33c1eb9467becf11f8bb3f.gz commit 79b865799d2a0e32ef84f749733837b31c308514 Author: Mikhail Zabaluev Date: 2007-05-10 12:53:12 +0000 Removed irrelevant D-Bus signature comment 20070510125312-5b6ca-8024d2927f91be1d64754904fb4afe4e14c986b5.gz commit df75e167a3ebb1a59ccb0d1d56cd2a0655111024 Author: Mikhail Zabaluev Date: 2007-05-10 12:52:25 +0000 Don't leak message data if it has been successfully delivered 20070510125225-5b6ca-7aa097f46dd57478b4219f31f1df075114dedcad.gz commit 02086266d48cc4b864ac0ab5ab7239ff8acbc019 Author: Mikhail Zabaluev Date: 2007-05-10 12:51:12 +0000 compact, silent body for a comparison function 20070510125112-5b6ca-91cc8170d9773e362ea1fdf2df59e4b1f980fa84.gz commit 28ae0a60bee409cfec43c6d8a62c8824e78f399d Author: Mikhail Zabaluev Date: 2007-05-10 12:44:32 +0000 Object path is not settable after construction, hence no need to free it before setting 20070510124432-5b6ca-a59c3b83ce265abf2ff7ded8d185278311dcfd1a.gz commit aab1f39923b6dd09f27d8a0bf86c151eb9a609b7 Author: Mikhail Zabaluev Date: 2007-05-10 12:40:31 +0000 Consistent debug logging in sip-text-channel.c using the SIP_DEBUG_IM flag; purged excessive debug printouts, improved others 20070510124031-5b6ca-83b002848c9f631a613aea87332b87be9f113c8a.gz commit 41763e28cb7416b7c06857c2935d28a910009f6b Author: Mikhail Zabaluev Date: 2007-05-10 11:33:07 +0000 Unbreak freeing code for the object path 20070510113307-5b6ca-e6eadc0ff0e6dac7449ece70b1da2cb16b9344f4.gz commit 8be8b4770436f0273cb528740e85e0e9c3c1cb16 Author: Mikhail Zabaluev Date: 2007-05-10 11:31:19 +0000 Do not leak queues of pending incoming and outgoing messages, the associated NUA handles, and the object path on destruction of SIPTextChannel 20070510113119-5b6ca-528217dc9928007216f6ea060280a76950cf15ae.gz commit 7a397d6e08f3b674cb033a971ddb587d74a38742 Author: Mikhail Zabaluev Date: 2007-05-10 08:58:34 +0000 Don't leak the object path on destruction of SIPMediaChannel 20070510085834-5b6ca-772f3b5a7b40e964b282f63656963b6f6e81e528.gz commit 1f79a967602527c29fefb6da4958baebcde4e182 Author: Mikhail Zabaluev Date: 2007-05-09 14:20:33 +0000 Destroy the session_chans hash table after disposing of the channels, to avoid crashing 20070509142033-5b6ca-488c5983d3b82c3d9e31e697250b3f2a0345c27f.gz commit 27a2d88bc3eb76a30f4d72c385354591e48a7d33 Author: Mikhail Zabaluev Date: 2007-05-09 13:22:29 +0000 Emit MembersChanged with reason _NO_ANSWER if the media session times out 20070509132229-5b6ca-66d9c02e70faf5906cc33266f60932a37e8cb248.gz commit 3723739939a2bc3758954919d87758aec96a4306 Author: Mikhail Zabaluev Date: 2007-05-08 14:33:27 +0000 humbly added myself as an author 20070508143327-5b6ca-c64280700e67972f6721aee9117c0a1807aba046.gz commit 39b4632d713d2aba82233f17ea6f7a01ba6c8f73 Author: Mikhail Zabaluev Date: 2007-05-09 09:11:57 +0000 Renamings to get rid of Jingle and GMS namespaces 20070509091157-5b6ca-4ab42a48364f88fa197fce335284df028a4620f9.gz commit 58a1c6c3994aa3636e6ef94b01e05cf4008ab4d0 Author: Mikhail Zabaluev Date: 2007-05-09 08:58:16 +0000 Removed the custom ANSI-colored debugging crack, use the regular debug logger 20070509085816-5b6ca-18f33934f6c462c23aabd7fa025785c15a502f76.gz commit 43d5d198b51054dfb702c808a0554da5d3db2dd8 Author: Mikhail Zabaluev Date: 2007-05-08 12:40:24 +0000 More elaborate names for global debug identifiers 20070508124024-5b6ca-1038822f92a138277f0556721f7da7aff2cad97f.gz commit 9d2524f7a262f0496f7757eae15aad5daddd4bb6 Author: Mikhail Zabaluev Date: 2007-05-08 12:39:33 +0000 Size of the keys array is known at compile time, use it 20070508123933-5b6ca-4e4fb77163b1ae86431990e401a80aa61b291e59.gz commit 29e071137d9cdf3a0a3272a588c1270d57ec0e58 Author: Mikhail Zabaluev Date: 2007-05-08 12:25:50 +0000 Constified the debug keys array 20070508122550-5b6ca-8af36b8e65a6482f56bf7ecca945ef8a4c890535.gz commit 1acc64051f788c187f9e7438315b32aac3239399 Author: Mikhail Zabaluev Date: 2007-05-08 11:07:36 +0000 Removed the useless SIP_DEBUG_PERSIST flag, as "persist" is taken care of by telepathy-glib; rearranged the rest of the flags for nicety 20070508110736-5b6ca-f8b18a94366f5411745449edd1c351c075ff703b.gz commit 380ac71ee58afbf752d5290c0e52f11f4e0310ac Author: Mikhail Zabaluev Date: 2007-05-08 10:49:57 +0000 Removed an outdated DIE_TIME macro definition 20070508104957-5b6ca-feb55f5078ade49395d2ac265429496a1ce30756.gz commit a2cdbe90027eb6ca7c842f6548b6e6f158e741b7 Author: Mikhail Zabaluev Date: 2007-05-08 08:05:28 +0000 Bumped development version 0.3.16.1 20070508080528-5b6ca-2ed02a2e1442aec689cbbd6a482fd194a45889cb.gz commit 41dee50685459dad84c1d9eaa2034c61b5c0e3f4 Author: Mikhail Zabaluev Date: 2007-05-07 15:40:52 +0000 Bumped version to 0.3.16 20070507154052-5b6ca-41a6b40c1449d9825c22ae314fba2b76e214c536.gz commit 6315beb6bf19b09bb896915fa978688abc3abbad Author: Mikhail Zabaluev Date: 2007-05-04 12:56:29 +0000 enabled threading in Sofia-SIP 20070504125629-5b6ca-65a7a08fdeaa17616a70603bb1fc837d239ff926.gz commit 9294b194f73cbb11b6bc70ff6e8347369e0b4575 Author: Mikhail Zabaluev Date: 2007-05-04 12:56:29 +0000 enabled threading in Sofia-SIP 20070504125629-5b6ca-397aaf12dcded20ed22d0b0c66688215b9ba97be.gz commit e2df0db7f9b3651d5ca7691ae4689f50769620ac Author: Mikhail Zabaluev Date: 2007-05-07 12:30:22 +0000 More meaningful debugging of shutdown and destruction 20070507123022-5b6ca-43490b702bce28f35e65e9c81c1821c50bfde974.gz commit 3a0d3ae6886efee91f0b791f4002eeedefbc7b2e Author: Mikhail Zabaluev Date: 2007-05-07 12:23:05 +0000 Retire priv_disconnect() as the register op handle is taken care of in the disconnected method and there is nothing more to do except changing the status 20070507122305-5b6ca-c61363fd0c94d8900d462dddc4a912f09e5524f1.gz commit d0a7d5ee4dd4f3e21c45a54aab923500b8d8abe2 Author: Mikhail Zabaluev Date: 2007-05-07 09:25:04 +0000 Destroy the register op handle before shutdown if REGISTER has not succeeded, to avoid lingering REGISTER retransmissions 20070507092504-5b6ca-58c88f8162304e8f3b855cf73e2261468c4cb9be.gz commit 1d9463a4de07ae269487b604c59a3773cd73bdb9 Author: Mikhail Zabaluev Date: 2007-05-07 08:51:33 +0000 Better thing to dispose of the register op handle may be to unref it and let the stack to unwind the remaining state 20070507085133-5b6ca-3accf98c8a9e1e90a5f2e22f860405a0d65fb3c2.gz commit bdbd2e85a7dff42a17d786925d6d9bb24c5c1b3d Author: Mikhail Zabaluev Date: 2007-05-04 15:40:39 +0000 Moved the register op handle to NUA stack state, so we can always reap the handle after stack shutdown with no race conditions 20070504154039-5b6ca-4f08a8cf1e98f4567a8fc08b50495695ff49d90f.gz commit af1f239f28426274883ce49ad6e8ba6c70cd6a1e Author: Mikhail Zabaluev Date: 2007-05-04 15:40:39 +0000 Moved the register op handle to NUA stack state, so we can always reap the handle after stack shutdown with no race conditions 20070504154039-5b6ca-5361bed2aa8501f0cb10ad1aaf84ca06640d9402.gz commit 61fd17638827ba0d3a67573b8906c889a9721db8 Author: Mikhail Zabaluev Date: 2007-05-03 13:14:59 +0000 debug the exit of start_connecting 20070503131459-5b6ca-824eec29f76822ea21411cef37285d0de5b74508.gz commit 882d44241a0257bf7e5cdf4b3d6d741d3d29c4d7 Author: Mikhail Zabaluev Date: 2007-05-07 09:18:03 +0000 put a boolean structure member to the end 20070507091803-5b6ca-f58cc0c726febd8df1c6ab7cf8b72cfabe0ea7f7.gz commit 7685637220d2912e8b182ef5a6ce1f63cc9f3b8c Author: Mikhail Zabaluev Date: 2007-05-04 14:54:07 +0000 Remove a race condition by putting the register op handle deallocation to the nua_r_unregister handler, which is made possible to call post-shutdown 20070504145407-5b6ca-1eba9a878ba6b1c091872e7532ba6fad1d534bf3.gz commit 9377162c8308897c7c73be826a63a386ede53c29 Author: Mikhail Zabaluev Date: 2007-05-04 11:07:24 +0000 More elaborate warning when a NUA event arrives for a connection that has been shut down 20070504110724-5b6ca-ed48ff87ffabeb1f7e3b740a1a64cfad633ec3e4.gz commit 4b1427d641fe9ca32664a8628fb3309cdb3b3cc0 Author: Mikhail Zabaluev Date: 2007-05-07 13:17:14 +0000 Added recent TODO items 20070507131714-5b6ca-3de4830dc57664cab1723d8e77b6822dcccadcce.gz commit 7d3e26eebb335feea1b0321449e5cd6644faaffc Author: Mikhail Zabaluev Date: 2007-05-07 13:15:33 +0000 Purge done and outdated TODO items 20070507131533-5b6ca-17d26682459d4eba0570aeda43f553de2a919a3a.gz commit 1f1260ce93e053d051880722e795963d6163a25e Author: Mikhail Zabaluev Date: 2007-05-03 15:28:00 +0000 Moved the disposal of the register handle after the stack shutdown, brings back the final un-REGISTER with Sofia-SIP 1.12.6 20070503152800-5b6ca-20dccaee8665e04013322639bfadbd15327adcfc.gz commit 668bf96ffcc50dcf3daf06a7d4bce43b754384be Author: Mikhail Zabaluev Date: 2007-05-03 08:53:04 +0000 get the home only where it's needed 20070503085304-5b6ca-8c736655ab34466336f66eb724a2e859a8c26046.gz commit e4a497451bb6dc96aed399a76cea7dfbb90fcadd Author: Mikhail Zabaluev Date: 2007-04-24 09:29:22 +0000 Provide the sips: contact URI when the proxy URI is sips: 20070424092922-5b6ca-72a3bd5de488cf344b466b8583febe7ed6304a94.gz commit 5da9be3047544db841d944d7b4a22ff52ac79dea Author: Mikhail Zabaluev Date: 2007-04-27 14:17:15 +0000 Don't log the channel pointer which is normally NULL at the call termination event 20070427141715-5b6ca-17ef915ddb7c665cf8ed0ff2ffbefe5d1ec590d5.gz commit 31ff3142cb6ba44e0756cbe3b48ae40c0710955c Author: Mikhail Zabaluev Date: 2007-04-27 13:20:25 +0000 Remove an unnecessary runtime check that should have been an assertion 20070427132025-5b6ca-360feeb98003e6db913b2ed0fd18e196dd83f110.gz commit 62bc27d870ecd67ea12b62cd41c727b787d63b31 Author: Mikhail Zabaluev Date: 2007-04-27 13:19:01 +0000 Assertion to verify that the session is terminated when closing a media channel 20070427131901-5b6ca-46cc4968a77a1860b06b7a86d0d58e49daa1cef7.gz commit a83498322556221067c23e1bc374f770d5e12523 Author: Mikhail Zabaluev Date: 2007-04-27 13:13:59 +0000 eliminated the "terminated" signal on SIPMediaSession; the callback code for SIPMediaChannel moved to priv_destroy_session(), which is the new name for priv_release_session() 20070427131359-5b6ca-af0556fbe705de205764d4bde51b2764e8476ba8.gz commit c5048097bd289958ec63c5db4d0f665829ceaf37 Author: Mikhail Zabaluev Date: 2007-04-24 16:54:00 +0000 Do list the DTMF interface for a channel 20070424165400-5b6ca-6722f3d30c8b289824d9fbb325e95c3976908fb3.gz commit e21ebf2bc7d7de4b4b86c19e6f0e86460bac0741 Author: Mikhail Zabaluev Date: 2007-04-13 18:45:09 +0000 Don't leak the streams array buffer 20070413184509-5b6ca-1f1033915f42f6cd6e33c23596cd93e5bbc69b1c.gz commit 5d17b65379524d539871d6fdcaeb8f307382bf3f Author: Mikhail Zabaluev Date: 2007-04-13 18:44:39 +0000 Bumped the version to 0.3.15.1 for development 20070413184439-5b6ca-5bb43873ffac471142e30fb12c7763f3f2315350.gz commit e61600be95551e81b495c36dd4c25efddc8349d6 Author: Mikhail Zabaluev Date: 2007-04-13 18:30:33 +0000 Bumped version to 0.3.15 20070413183033-5b6ca-f765a3fbb08b075b8635a3927b4642ac84cca433.gz commit 0580e8265b1f7c4952b51763c2e4a117d805bd06 Author: Mikhail Zabaluev Date: 2007-04-13 18:07:40 +0000 Attempt at a more robust handling of rejected media streams and unexpected media type changes 20070413180740-5b6ca-9df4d1ef81bf8ecbd5471725f30d6d089956b0a9.gz commit 797db6e0844264f75e439d21fce2586acf3e19e0 Author: Mikhail Zabaluev Date: 2007-04-13 18:04:03 +0000 Implemented sip_media_stream_close() emitting the appropriate signal 20070413180403-5b6ca-8a92d3e3681ad2fbfa0be882d0b4f7ca1c8b87f4.gz commit 914cd66615f14396d9622b51489c6b2d02225033 Author: Mikhail Zabaluev Date: 2007-04-13 17:57:30 +0000 Implemented sip_media_stream_get_media_type() as a useful shortcut 20070413175730-5b6ca-e138352c2c6d1fa4b837b87f489f988e7a7bc876.gz commit a2932ca71ba71a308548663d73b564be37ae9fe2 Author: Mikhail Zabaluev Date: 2007-04-13 17:21:31 +0000 Validate the stream type on stop telephony event, too 20070413172131-5b6ca-7935a3171a04eb4baf483dea21e32d3ad8857410.gz commit 5ff1c3837087e9bd6b65ba1e6b4804bd8ea6808f Author: Mikhail Zabaluev Date: 2007-04-13 17:20:24 +0000 initialize the audio type variable to fail gracefully 20070413172024-5b6ca-ade346a9f2d118f4fd3085010e1e780b852c9e71.gz commit 8db7f410de3dc9f7146548e1e35afc335193a9d4 Author: Mikhail Zabaluev Date: 2007-04-13 17:13:52 +0000 Validate the stream type to be audio before playing telephony events on the stream 20070413171352-5b6ca-d5dcc77dbf98c9d65eb862503421581391b1fe01.gz commit 61ce50d822baf160a5ada49b13315d5a10a1e7f1 Author: Mikhail Zabaluev Date: 2007-04-13 16:47:41 +0000 Validate the DTMF event argument against NUM_TP_DTMF_EVENTS 20070413164741-5b6ca-0e8b6a2e03bddb75734a5057794daf51c8c67911.gz commit 4c96238bd0730b97ea85f161a1d04d0b303616f4 Author: Mikhail Zabaluev Date: 2007-04-13 15:32:00 +0000 Bumped dependency version on telepathy-glib to 0.5.9 20070413153200-5b6ca-6c51c5d03b5f4d6c31ee4d08a78f7a3cb732ddce.gz commit 05f104460f8e0a6dd7be3908e99819677e2a4b45 Author: Mikhail Zabaluev Date: 2007-04-13 15:12:49 +0000 The NUA pointer was unused in sip_media_session_terminate() 20070413151249-5b6ca-59577bdd431f1f849c3f6e84ed8a460470f44aee.gz commit dd78e689e1edffb1cbbbc69187243e9bbb8e99e7 Author: Mikhail Zabaluev Date: 2007-04-13 14:58:30 +0000 Implemented emission of telephony event signals 20070413145830-5b6ca-2ed0fb6ce0c409e398e49a87365b036f1b9f8ba5.gz commit a7c8a5c41e4ca8b06feba8b20b5c40d4973dd387 Author: Mikhail Zabaluev Date: 2007-04-13 14:57:05 +0000 Changed the DTMF parameter type to guchar as per spec version 0.15.2 20070413145705-5b6ca-c2a806c13da45560be3bc66ff599b1277db95914.gz commit f7f5f12b743b00c1b4266b7156606a2754e24101 Author: Mikhail Zabaluev Date: 2007-04-13 13:42:54 +0000 Stubbed out telephony event methods on media stream 20070413134254-5b6ca-95b5f39e40c8334e8c463dd6c83cf00b1310876f.gz commit df286d9fc462198ea46e3c6b0fa2a9be3bf61e5c Author: Mikhail Zabaluev Date: 2007-04-13 13:27:44 +0000 Changed signatures on session telephony event methods to raise errors 20070413132744-5b6ca-a0038528ad4b74387e877a96ae786144ff7cd03c.gz commit efcce9db41a13792ca39a0b51bdd4a60fc6073fa Author: Mikhail Zabaluev Date: 2007-04-13 12:06:33 +0000 Stubbed out telephony event methods on the session, implemented the channel's DTMF interface with these 20070413120633-5b6ca-855109084fc515f51f3e95eed4dc08dec8cd7fc9.gz commit 2a844249fb7a5e9b3f445915b1b1f76b5e24456b Author: Mikhail Zabaluev Date: 2007-04-13 11:56:45 +0000 Stubbed out the Channel.Interface.DTMF implementation 20070413115645-5b6ca-89f7bbcfeef7f55c8df49d69b18f19ec19ba7038.gz commit 03c96f1db6f3ab0f2b4095bc89e2f25aa65c5a2d Author: Mikhail Zabaluev Date: 2007-04-11 17:41:22 +0000 Mark version 0.3.14.1 for further development 20070411174122-5b6ca-d6aa2dee2e74c072aac05d7ea7dd947286d7c6ee.gz commit e7b17c39a6cc2a23a2be1fe378aaee4c96be6c9b Author: Simon McVittie Date: 2007-04-11 16:32:58 +0000 Resolve conflict with upstream 20070411163258-53eee-3d7450314db6909f9454fca54bf44db1603661a8.gz commit 9a81253525c080b5560f6b564f927105bcc5933f Author: Simon McVittie Date: 2007-04-11 16:22:42 +0000 Validate that string parameters aren't empty if they shouldn't be, because from 0.5.8 onwards, telepathy-glib won't do that for us 20070411162242-53eee-2a7e9b4f14a938950af9b853cae254863d91b943.gz commit 587bc64be174b6d88b0a0a8327266790bd6f37c9 Author: Simon McVittie Date: 2007-04-11 16:18:55 +0000 Switch group mixin API to be compatible with telepathy-glib >= 0.5.7 rather than <= 0.5.7 20070411161855-53eee-1a21495b201db41e7cd40baa589676b170907417.gz commit c806e086e5b9c06d138422b45887336b2f1d2c9e Author: Mikhail Zabaluev Date: 2007-04-11 16:57:26 +0000 Releasing as 0.3.14 20070411165726-5b6ca-faebbe7f5167bd09ff2e33f34658a64ec347dd2d.gz commit 71334b173e21fabd239ad8f785087eb7fda56e85 Author: Simon McVittie Date: 2007-04-11 16:23:30 +0000 Don't use LAST_TP_HANDLE_TYPE, use NUM_TP_HANDLE_TYPES instead (telepathy-glib 0.5.7 removes the former) 20070411162330-53eee-c751684e7df19c7c175e07d90c2a3eb35b7d0376.gz commit 3cf068a15bb366895c5efe59534208f8a4219bbf Author: Mikhail Zabaluev Date: 2007-04-11 14:47:15 +0000 Avoid calling a type registration function under TP_CHANNEL_STREAM_TYPE repeatedly in a loop 20070411144715-5b6ca-b6e1896ab3be03d44c62e62ac69ec808ecda83e1.gz commit 09ff405c6458b745401bc98bdc25c218a264fc77 Author: Mikhail Zabaluev Date: 2007-04-11 14:44:12 +0000 Fixed memory leaks in sip_media_channel_list_streams() 20070411144412-5b6ca-22b4e68deb30352070c4af4ddd44fb9545f94946.gz commit 46ae138f060be5c2a214382abdac0d6f4290c091 Author: Mikhail Zabaluev Date: 2007-04-11 13:05:40 +0000 Removed return code weirdness from sip_media_session_list_streams() 20070411130540-5b6ca-48c3a82d4b45279d97d3c004531a8f199a309696.gz commit c9cfc737e12eeaaa2578cdf1c0bd27f14fcd7b98 Author: Mikhail Zabaluev Date: 2007-04-11 12:44:51 +0000 ifdefed out priv_session_stream_state_changed_cb() 20070411124451-5b6ca-e0806c482fd9ae7de7682fd5efa0698e78b845c7.gz commit 93656fbd25573be37ba611f1b73e41eb4bc1c7a5 Author: Mikhail Zabaluev Date: 2007-04-11 12:20:03 +0000 rearranged init closer to use for sdp_conns 20070411122003-5b6ca-bd6316712fbb2ba07baed1cb5267ac64c2246248.gz commit 5bf68f15c9a0e5da5bf5d0ffff634808ed155182 Author: Mikhail Zabaluev Date: 2007-04-11 12:15:07 +0000 Constified the sdp_media_t parameter 20070411121507-5b6ca-99e81c4439a36ad9d12b5d3db6047ce0ece4cc32.gz commit 9d3a9456df1041f2e8ee1c43bfc74257400d542b Author: Mikhail Zabaluev Date: 2007-04-11 08:40:44 +0000 Changed return type and values of _set_remote_info methods to gboolean for consistency 20070411084044-5b6ca-519c5ba2e17ff0d7510e316e7d320cdb573367e6.gz commit 628e574869119a6385a4ede4a98b93b23b66c331 Author: Mikhail Zabaluev Date: 2007-04-11 08:38:49 +0000 indentation 20070411083849-5b6ca-30f5b56c150b2bd9ba2dc6b1ebc3d0855fa501a7.gz commit 0dacf285f5939c8f89e5df2354090defd2aa5cdd Author: Mikhail Zabaluev Date: 2007-04-10 16:22:50 +0000 Removed unused candates variable, put initialization for others close to usage in priv_generate_sdp() 20070410162250-5b6ca-4fe8b2379096105ef81768fe7e3d466cd81f209e.gz commit 246caa6ad3ba60168aadc59cc6b364fd01178674 Author: Mikhail Zabaluev Date: 2007-04-10 16:10:37 +0000 sip_media_stream_set_remote_info() does not need the sdp_session_t argument 20070410161037-5b6ca-f6c8b41a1adeb1b3d46d9085c76e9df290c44e7a.gz commit 03e18ffd469a25e5e9c21329150d86a92a834f62 Author: Mikhail Zabaluev Date: 2007-04-10 16:07:33 +0000 Removed the jingle leftovers in sip_media_stream_set_remote_info() 20070410160733-5b6ca-4e27adec59078f30be96413da978773156b9c877.gz commit d218265945d79c91fd05fb43f977522238427776 Author: Mikhail Zabaluev Date: 2007-04-10 15:56:20 +0000 No need to double-check a pointer 20070410155620-5b6ca-f0531c1e9f2ac903dc6433fca4ee3f9526a0f8e1.gz commit ed92178ee1a34c0c8b9206f538e6a8aa76ea9a2d Author: Mikhail Zabaluev Date: 2007-04-10 15:17:08 +0000 Provide a customized User-Agent string, to distinguish ourselves 20070410151708-5b6ca-4031f4a4e1eae24bb01e10d4d1568dbfa53d61ea.gz commit 9f1bef2372603ce0ed74a8d544501b0bc6b9eeb2 Author: Mikhail Zabaluev Date: 2007-04-05 16:15:16 +0000 Provide a SIPConnectionSofia state adapter with the minimum necessary data for the NUA callback, to untie the SIPConnection D-Bus object lifetime from the NUA stack shutdown 20070405161516-5b6ca-a84798e5c01bf11d762c10c14ffd6f20e5bc5bb6.gz commit 9f24eff4cab99cd1409012dcece17034815549f7 Author: Mikhail Zabaluev Date: 2007-04-05 16:11:48 +0000 Cleaned up header inclusions and magic type macro definitions; introducing SIPConnectionSofia as the NUA magic 20070405161148-5b6ca-1580eed309986368f5567daf8bde8ee571a10591.gz commit 267a57b6f344cdab5e34575827bf21caccb99f1b Author: Mikhail Zabaluev Date: 2007-04-05 11:37:00 +0000 removed an outdated media channel header inclusion in sip-connection-private.h 20070405113700-5b6ca-20ac81af2d0cd2b01d2a2e3cc28e5ffba5ccef3d.gz commit f7c5d08ba69720c936eeac3e223fe4a769e63096 Author: Mikhail Zabaluev Date: 2007-04-04 13:06:57 +0000 priv_free_nua() does not need the SIPConnection self pointer 20070404130657-5b6ca-832f6dfa0720331443f4b87ffb542f9d450e0b4c.gz commit c73b785ded97edafbb277ff92db473e91b21005b Author: Mikhail Zabaluev Date: 2007-04-04 12:46:31 +0000 Properly declared the shutdown states enum and its usage 20070404124631-5b6ca-59998f6e83ad11ee191a26216f7c67eb6fd13870.gz commit 306df9fbfb45c755978999dbbf2d8d75f2869233 Author: Mikhail Zabaluev Date: 2007-04-04 11:02:11 +0000 Removed vestigal GObject signals on SIPConnection 20070404110211-5b6ca-7c0c01e543b6d20309d5b9a6b9cfc07cb1da7996.gz commit 5766e8fb0ace5715fc64ed5b4ca7ddbe41d7a4af Author: Mikhail Zabaluev Date: 2007-04-04 07:49:32 +0000 bumped libtelepathy-glib required version to 0.5.6 20070404074932-5b6ca-53d06959b33b6889e4d0099e694294697d923297.gz commit b4335a60e7db1f29d80803dce964cd8489847c34 Author: Mikhail Zabaluev Date: 2007-04-03 11:29:04 +0000 Renamed disable-difficult connection parameter to avoid-difficult; not used anywhere so far 20070403112904-5b6ca-dab9615b8b84b0babc2a00eecd8c08447a1606e0.gz commit ebb565f9e579da3dff9bd5c06935b0e697bb1c6b Author: Simon McVittie Date: 2007-04-03 17:38:53 +0000 Increment version to 0.3.13.1 after release 20070403173853-53eee-c10bc7b72bf0009e3d094b7042a34be1b098c19a.gz commit 2d4f05acd3c4d2eb965f824ba07cca894aaec62e Author: Mikhail Zabaluev Date: 2007-04-03 08:02:55 +0000 Bumped version to 0.3.13 20070403080255-5b6ca-7bfe9daec31fd58c6fbfb8808c825c02d7c3e1b2.gz commit db468f9822ed701583acc7800fddbbd4ef0f6595 Author: Mikhail Zabaluev Date: 2007-04-02 16:35:22 +0000 Pass factory, not the connection, to the handler of text channel's Closed signal 20070402163522-5b6ca-2992c4fd7b66b6c95f8f52c0175a9d699c87f21c.gz commit 4e65d0014aa6312223a941682a68249c50530175 Author: Mikhail Zabaluev Date: 2007-04-02 16:29:33 +0000 Emit Closed in the implementation of SIPTextChannel.Close 20070402162933-5b6ca-61487cea3315f05ad0c32701ae1b483b00ef0c19.gz commit 2d10b53fae269734cfa5175e722c87bd2e6ecfef Author: Mikhail Zabaluev Date: 2007-04-02 11:28:08 +0000 Removed the empty nua_authenticate() workaround, does not work all that well 20070402112808-5b6ca-b31131639b88654c8797481fa716cdcc6a7ddaa5.gz commit c1366ea9e5cfb13e788efb833dc1e5a6c1d68044 Author: Mikhail Zabaluev Date: 2007-03-29 08:06:57 +0000 Added a debug printout 20070329080657-5b6ca-7f9d1a0cc903379fa9f562e4e6754675624b40aa.gz commit bcb83cfd2cd44cdc45d5ae965a5746bb3f15ff27 Author: Mikhail Zabaluev Date: 2007-03-28 14:21:36 +0000 Remove all mentions of the unsupported outbound stack option "use-stun" 20070328142136-5b6ca-cde9d006e716e2a7dad953cbe62d95a42cdf5409.gz commit 54bb735b7a969d8a335ee36764ddf838bfb5cfbc Author: Mikhail Zabaluev Date: 2007-03-28 13:40:02 +0000 Moved the STUN server updater function to other NUA helpers 20070328134002-5b6ca-70f5b2186d24d11237e2915280b357facc308100.gz commit 9773d09b20f95e05b91ea3f040d33566977c5096 Author: Mikhail Zabaluev Date: 2007-03-28 09:13:54 +0000 Remove ChangeLog.old entries that are present in the ChangeLog generated by Darcs 20070328091354-5b6ca-e9a1c92c484d49ed2b59b68b7085f1a462a65631.gz commit dd36083e039c2dbd0b030743249bd45fe6ffbe32 Author: Simon McVittie Date: 2007-03-30 13:20:58 +0000 Correct sense of assertions when setting SIPMediaChannel's nua-handle property 20070330132058-53eee-30d3e0cb912f4b73573bbb72ba59781073267b78.gz commit 95824e37667a912c4bf01c4fb9e6a53cb4c5083d Author: Simon McVittie Date: 2007-03-30 13:19:28 +0000 Don't try to unref the self_handle on disconnect, the base class is responsible for that 20070330131928-53eee-b7c560d10ddc72956974be57f334602467e4867a.gz commit ba6ff96f98b9eb1106685ec90d68b7a0e0367af0 Author: Simon McVittie Date: 2007-03-30 13:18:30 +0000 Don't bind Tp handles when creating NH handles 20070330131830-53eee-d0d0802b291eed06a6d8283810a2de3c72706287.gz commit 667149dc0244bc05a89782055cd51ecd123cc46a Author: Simon McVittie Date: 2007-03-30 13:18:19 +0000 Close parenthesis in debug messages 20070330131819-53eee-1efd2f41837740a0c83eb64917d245d85ea8573e.gz commit 23f509f8e5cc688f4f4710309683b2b3fbf61f20 Author: Simon McVittie Date: 2007-03-30 13:17:48 +0000 When closing channels, use the copy of the pointer we made, not the struct member we just NULLed 20070330131748-53eee-83fda2d6727978b882252896bac2d629dc94203f.gz commit 35427c75fe34e53de05c75258269c32428dd1349 Author: Simon McVittie Date: 2007-03-29 16:17:19 +0000 Support multiple media channels. The "hmagic" associated with the NUA handles of calls is now a SIPMediaChannel*. We avoid losing references by the Sofia stack not referencing the SIPMediaChannel at all - instead the SIPMediaChannel unbinds itself from the NUA handle, and marks it as expired, when it's closed or freed. 20070329161719-53eee-606286bc100aa0924c529b1a2b998be6ebf66324.gz commit 6eb60014934ab21488173c2643dd3ce06c65d7f0 Author: Simon McVittie Date: 2007-03-27 16:04:19 +0000 Bind SIPMediaChannel pointers to NUA handles. Make sure we dissociate the media channel from the NUA handle when the channel closes 20070327160419-53eee-b3f11509c1358f6825c001766dd3a61a8c756813.gz commit a2842048c0de883f6c771f9dc5b4ca3382bfd3e1 Author: Simon McVittie Date: 2007-03-27 14:41:49 +0000 Compile with debug by default 20070327144149-53eee-c18689718171eeef722eda8dc2a69bf94a89eb96.gz commit 4b466d3283008e861ecb8558dbfcc171ce46b50d Author: Simon McVittie Date: 2007-03-27 14:37:43 +0000 Bump version to 0.3.12.1 after release 20070327143743-53eee-420d1dc8087d64f5f497905dfac6d0593999a831.gz commit 1c7ff08b39875d875f243158cd7b20f0adffec2c Author: Mikhail Zabaluev Date: 2007-03-27 10:58:34 +0000 Bumping version to 0.3.12 20070327105834-5b6ca-5c3bf88d19b5d3835797250a94886d7f2befaf7d.gz commit 126cf072cf6cb496829f7247bc38ead5df843917 Author: Mikhail Zabaluev Date: 2007-03-26 09:08:14 +0000 Less promiscuous access mode for autogenerated ChangeLog 20070326090814-5b6ca-e719801d317f84332603e1c2bb790066eeaa8976.gz commit d862861b7003ccedf0e6cce64a353a757c540cb9 Author: Mikhail Zabaluev Date: 2007-03-22 16:08:11 +0000 untabify the recent changes 20070322160811-5b6ca-a2afc59c505a620167a40c26b0e3ade2dacc5cd0.gz commit d39baa49926757aceb0153c5dc3e4507c1757938 Author: Mikhail Zabaluev Date: 2007-03-22 11:39:53 +0000 Better implementation of authentication, always using the primary credentials for the registrar realm 20070322113953-5b6ca-4eb4c7c634b798d11bfe0f045c119ed7d60ac633.gz commit aacb9142089e598d2e8954d8677d024bd110a7a5 Author: Simon McVittie Date: 2007-03-23 18:41:54 +0000 Actually pass arguments to the g_warning 20070323184154-53eee-93c42893d40fdb9a45c226eb4500fbc00868dce4.gz commit 9e6edc3eb9a63cd61d54376c06f6e487ab372e51 Author: Simon McVittie Date: 2007-03-23 18:27:44 +0000 If the number of m-lines differs from our number of streams, just warn rather than aborting 20070323182744-53eee-192ed5695a9b184bb7cb367479af253ff31dc741.gz commit b48ece096c1c173406f920f848f8413feb4c77b2 Author: Simon McVittie Date: 2007-03-23 17:41:04 +0000 Port telepathy-sofiasip to telepathy-glib 0.5.6 handle API. This patch stops associating Telepathy handles with NUA handles using the "hmagic" mechanism, because I can't see how to tell when SofiaSIP has finished with a particular NUA handle (and hence how to not leak references to the Telepathy handles). Instead I find out the Telepathy handle for text messages or incoming events using the SIP headers, and find out whether a media channel is the one we want by using the NUA handle as a unique key. 20070323174104-53eee-8906a0fe3be387b7d5e9a9f59b9cacae9b2696b4.gz commit 6ed25a5f9e06895c70678b60cc0b3133ca7d2bd5 Author: Simon McVittie Date: 2007-03-23 17:19:55 +0000 When emitting a media channel error, verify that the channel is the one we think it is 20070323171955-53eee-0d94c1e7ceb4a4ce8efef9ee7bff177e4bc9abdb.gz commit 42162f84ac2d24cb6b425c180fe385aa3269cb9b Author: Simon McVittie Date: 2007-03-22 16:27:39 +0000 Move ChangeLog to ChangeLog.old. Generate ChangeLog from Darcs history at dist time 20070322162739-53eee-aec0cf2879807832c35ed3df8808333191e8a61d.gz commit 0e3ae6bedfc791a1e766c0f8aff9348fd5e2a6cc Author: Simon McVittie Date: 2007-03-21 15:59:36 +0000 Remove untrue "not used" comments - we now have extra auth 20070321155936-53eee-c5284e59cff7a3c270d8ee0aeba052050b42ca2c.gz commit c1fdcd362d90449b2f8d6619f27cb2f21f02d8a6 Author: Simon McVittie Date: 2007-03-21 15:56:27 +0000 Transfer STUN port number from RequestConnection to the new connection 20070321155627-53eee-e58fdc039ab06e60115f95cdb3d95d256c96d12d.gz commit 9859e6d07e5fd9259ef347f9413b2bbc337ebfc8 Author: Simon McVittie Date: 2007-03-21 14:45:22 +0000 Add forgotten property_get case for PROP_STUN_PORT 20070321144522-53eee-309cfb0659b70475ef7a5b32a857cf88dd83ddd6.gz commit 40d5dd8a0a9234447ef0f38cf370ffebb56b873a Author: Simon McVittie Date: 2007-03-21 14:26:29 +0000 Add STUN server and port Tp properties to media channels. Copy them from the media factory on construction. 20070321142629-53eee-aa60d52de840e41ee638d1ee8655594a65a85cd6.gz commit e47837c8877080a989b857842ffcf03772c066f2 Author: Simon McVittie Date: 2007-03-21 14:24:52 +0000 Copy STUN server/port from connection to media factory 20070321142452-53eee-0cfb25422c245c68240b3618c9fd9a86da376476.gz commit 367a7ccd088c00b8910e9dc4b4da85301920f6a6 Author: Simon McVittie Date: 2007-03-21 14:19:20 +0000 Redefine stun-server connection parameter to be IP or FQDN rather than IP:port or FQDN:port. Add stun-port connection parameter. Glue the two together when passing them to the Sofia stack. 20070321141920-53eee-58ccb12c60a8f3b4ebf4b37daee76b3676df9a86.gz commit 1431f88a75a044752e4a51b7ef7d448b30844ef5 Author: Simon McVittie Date: 2007-03-20 19:51:59 +0000 Add _boring file listing generated files 20070320195159-53eee-db5ffe57421c94cf9f4de2f5a4917e9717642dd9.gz commit f2023e2dc5d41d3d41cf6ab3329cd787a2ec756b Author: mzabaluev <> Date: 2007-03-16 09:53:51 +0000 [svn-to-darcs @ 6] Emit more elaborate message sending errors for text channels 20070316095351-22f61-93d08f38c21f801dde5186f32bbf86ee6323f889.gz commit 2d59cf3fe0131ca6bb193af7b9d2b1bbe2d835ba Author: mzabaluev <> Date: 2007-03-16 09:38:55 +0000 [svn-to-darcs @ 5] Better handling of missing auth credentials 20070316093855-22f61-41269cdee13c9f2dec9ec5925819449b95b1da6f.gz commit dd33d8268ab22add4e1adfc111136f924f760c35 Author: mzabaluev <> Date: 2007-03-16 09:11:50 +0000 [svn-to-darcs @ 4] Implemented extra auth properties. 20070316091150-22f61-bb2c83015613dd9a8effe943196818206cb0eb13.gz commit 868dd2a46dd28b49eb2f8bfa521e5c615f594bc3 Author: robot101 <> Date: 2007-03-08 17:28:17 +0000 [svn-to-darcs @ 3] Initial import. 20070308172817-9b33b-67cd56c0fd9ed7be56f874da659e87cbac239c81.gz commit 36e7ba52d4397763aca609c368bc6f2472b644a1 Author: git-darcs-import <> Date: 1970-01-01 00:00:00 +0000 New empty repository telepathy-rakia-0.8.0/config.h.in0000644000175000017500000000417112223050267013551 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Enable debug code */ #undef ENABLE_DEBUG /* Prevent post 2.30 APIs */ #undef GLIB_VERSION_MAX_ALLOWED /* Ignore post 2.30 deprecations */ #undef GLIB_VERSION_MIN_REQUIRED /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* IP heartbeat library is available */ #undef HAVE_LIBIPHB /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define the version */ #undef TELEPATHY_SIP_VERSION /* Define the release version */ #undef TELEPATHY_SIP_VERSION_RELEASE /* Version number of package */ #undef VERSION /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif telepathy-rakia-0.8.0/TODO0000644000175000017500000000450712223047264012224 00000000000000=============================================================== TODO / telepathy-sofiasip =============================================================== Feature Roadmap --------------- - re-registration on network change detection - re-offer media streams on network change detection (handover) Critical todo items ------------------- empty Account settings ---------------- - ability to disable known difficult-to-implement features - early media with PRACK - ability to disable use of outbound proxy Connection management --------------------- - implement Connection.AdvertiseCapabilities() Call flows ---------- - consider implementation of 3pcc call flows as described in RFC 3725. Media sessions -------------- - implement delayed application of stream direction changes requested by the client in case when an answer to a remote offer is being processed - if multiple network interfaces are present, the wrong IP address may be offered in a c= SDP media line. Presence and messaging ----------------------- - implement Connection.Interface.Presense.AddStatus() - implement Connection.Interface.Presense.SetStatus() - implement Connection.Interface.Presense.RemoveStatus() - implement Connection.Interface.Presense.ClearStatus() - implement Connection.Interface.Presense.GetStatuses() - implement Connection.Interface.Presense.RequestContactInfo() - implement Connection.Interface.Presense.SetLastActivityTime() - (obsolete?) ConnectionInterfacePresence; RequestPresence: - Response to SUBSCRIBE initiated by nua_glib_subscribe() emits a signal subscribe-answered from nua_glib but there is no signal for telepathy-sofiasip client, i.e. client cannot be informed if subscribe was successful. Test programs ------------- - In progress: unit tests for basic functionality (creation and removal of conn.mgr etc objects, registration, calling to itself, etc) Plugin interface ---------------- - mechanism to dynamically load handlers for new types of channels, and/or new types of connections General ------- - various XXX items in the source codes (a generic todo item) - status 2007-10-10: 12 XXXs, 8 FIXME - status 2007-05-07: 22 XXXs - status 2006-11-26: 37 XXXs - status 2006-12-04: 36 XXXs - status 2006-12-05: 24 XXXs - status 2006-12-15: 20 XXXs - status 2006-12-18: 19 XXXs telepathy-rakia-0.8.0/README0000644000175000017500000000210112223047264012400 00000000000000=============================================================== README / telepathy-sofiasip =============================================================== Building -------- telepathy-sofiasip requires GNU make. When building from the devel tree (you need automake-1.9 or up): sh> ./autogen.sh --no-configure And then continue with the normal: sh> ./configure sh> make Running ------- Set the "RAKIA_PERSIST" environment variable to prevent the connection manager from exiting after all connections have been disconnected. This option is only available if telepathy-sofiasip was configured with the "--enable-debug" option, which is on by default. Other useful environment variables: * RAKIA_DEBUG -- enables debug tracing via g_log. The value "all" enables all categories; for detailed categories look into the file 'src/debug.c' * TPORT_LOG -- setting to 1 enables logging of SIP protocol messages. See also Sofia-SIP documentation for environment variables to enable tracing in various modules of the Sofia-SIP library: http://sofia-sip.sourceforge.net/refdocs/pages.html telepathy-rakia-0.8.0/extensions/0000755000175000017500000000000012223050362013776 500000000000000telepathy-rakia-0.8.0/extensions/Makefile.in0000644000175000017500000006122412223050267015774 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = extensions DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = librakia_extensions_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_librakia_extensions_la_OBJECTS = extensions.lo nodist_librakia_extensions_la_OBJECTS = signals-marshal.lo \ svc-channel.lo librakia_extensions_la_OBJECTS = $(am_librakia_extensions_la_OBJECTS) \ $(nodist_librakia_extensions_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(librakia_extensions_la_SOURCES) \ $(nodist_librakia_extensions_la_SOURCES) DIST_SOURCES = $(librakia_extensions_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ tools_dir = $(top_srcdir)/tools AM_CFLAGS = \ $(ERROR_CFLAGS) \ $(DBUS_CFLAGS) \ $(GLIB_CFLAGS) \ $(TELEPATHY_GLIB_CFLAGS) AM_LDFLAGS = $(ERROR_LDFLAGS) EXTRA_DIST = \ all.xml \ channel.xml noinst_LTLIBRARIES = librakia-extensions.la librakia_extensions_la_LIBADD = \ $(TELEPATHY_GLIB_LIBS) # The client-specific parts are built into a separate .o file, so the linker # can discard them when linking services. The service-specific parts are # in svc-*.c, so we don't need an extensions-svc.c. librakia_extensions_la_SOURCES = \ extensions.c \ extensions.h nodist_librakia_extensions_la_SOURCES = \ _gen/signals-marshal.c \ _gen/signals-marshal.h \ _gen/signals-marshal.list \ _gen/register-dbus-glib-marshallers-body.h \ _gen/enums.h \ _gen/gtypes.h \ _gen/gtypes-body.h \ _gen/interfaces.h \ _gen/interfaces-body.h \ _gen/svc-channel.h \ _gen/svc-channel.c BUILT_SOURCES = \ _gen/all.xml \ _gen/channel.xml \ $(nodist_librakia_extensions_la_SOURCES) \ extensions.html CLEANFILES = $(BUILT_SOURCES) XSLTPROCFLAGS = --nonet --novalid all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu extensions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu extensions/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } librakia-extensions.la: $(librakia_extensions_la_OBJECTS) $(librakia_extensions_la_DEPENDENCIES) $(EXTRA_librakia_extensions_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(librakia_extensions_la_OBJECTS) $(librakia_extensions_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extensions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals-marshal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svc-channel.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< signals-marshal.lo: _gen/signals-marshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT signals-marshal.lo -MD -MP -MF $(DEPDIR)/signals-marshal.Tpo -c -o signals-marshal.lo `test -f '_gen/signals-marshal.c' || echo '$(srcdir)/'`_gen/signals-marshal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/signals-marshal.Tpo $(DEPDIR)/signals-marshal.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='_gen/signals-marshal.c' object='signals-marshal.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o signals-marshal.lo `test -f '_gen/signals-marshal.c' || echo '$(srcdir)/'`_gen/signals-marshal.c svc-channel.lo: _gen/svc-channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT svc-channel.lo -MD -MP -MF $(DEPDIR)/svc-channel.Tpo -c -o svc-channel.lo `test -f '_gen/svc-channel.c' || echo '$(srcdir)/'`_gen/svc-channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/svc-channel.Tpo $(DEPDIR)/svc-channel.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='_gen/svc-channel.c' object='svc-channel.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o svc-channel.lo `test -f '_gen/svc-channel.c' || echo '$(srcdir)/'`_gen/svc-channel.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Generated files which can be generated for all categories simultaneously _gen/all.xml: all.xml $(wildcard *.xml) $(MKDIR_P) _gen $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \ $< > $@ extensions.html: _gen/all.xml $(tools_dir)/doc-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ $(tools_dir)/doc-generator.xsl \ $< > $@ _gen/gtypes.h: _gen/gtypes-body.h @: # do nothing, output as a side-effect _gen/gtypes-body.h: _gen/all.xml $(top_srcdir)/tools/glib-gtypes-generator.py $(PYTHON) $(top_srcdir)/tools/glib-gtypes-generator.py \ $< _gen/gtypes RAKIA _gen/signals-marshal.list: _gen/all.xml \ $(tools_dir)/glib-signals-marshal-gen.py $(PYTHON) $(tools_dir)/glib-signals-marshal-gen.py $< > $@ _gen/signals-marshal.h: _gen/signals-marshal.list $(GLIB_GENMARSHAL) --header --prefix=_rakia_ext_marshal $< > $@ _gen/signals-marshal.c: _gen/signals-marshal.list $(GLIB_GENMARSHAL) --body --prefix=_rakia_ext_marshal $< > $@ _gen/register-dbus-glib-marshallers-body.h: _gen/all.xml \ $(tools_dir)/glib-client-marshaller-gen.py $(PYTHON) $(tools_dir)/glib-client-marshaller-gen.py $< \ _rakia_ext > $@ _gen/enums.h: _gen/all.xml $(tools_dir)/c-constants-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ --stringparam mixed-case-prefix Rakia \ $(tools_dir)/c-constants-generator.xsl \ $< > $@ _gen/interfaces.h: _gen/all.xml \ $(tools_dir)/glib-interfaces-generator.xsl \ $(tools_dir)/c-interfaces-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ --stringparam mixed-case-prefix Rakia \ $(tools_dir)/glib-interfaces-generator.xsl \ $< > $@ _gen/interfaces-body.h: _gen/all.xml \ $(tools_dir)/glib-interfaces-body-generator.xsl \ $(tools_dir)/c-interfaces-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ --stringparam mixed-case-prefix Rakia \ $(tools_dir)/glib-interfaces-body-generator.xsl \ $< > $@ # Generated files which must be generated per "category". Each TpProxy # subclass you want to use with --subclass will need to have its own category, # although you can subdivide further if you want. _gen/channel.xml: channel.xml $(wildcard *.xml) $(MKDIR_P) _gen $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \ $< > $@ _gen/svc-channel.h: _gen/svc-channel.c @: # do nothing, output as a side-effect _gen/svc-channel.c: _gen/channel.xml $(tools_dir)/glib-ginterface-gen.py $(PYTHON) $(tools_dir)/glib-ginterface-gen.py \ --filename=_gen/svc-channel \ --signal-marshal-prefix=_rakia_ext \ --include='' \ --include='"_gen/signals-marshal.h"' \ --not-implemented-func='tp_dbus_g_method_return_not_implemented' \ --allow-unstable \ $< Rakia_Svc_ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/extensions/extensions.h0000644000175000017500000000046612223047264016303 00000000000000#ifndef __SIP_EXTENSIONS_H__ #define __SIP_EXTENSIONS_H__ #include #include #include #include G_BEGIN_DECLS #include #include G_END_DECLS #endif telepathy-rakia-0.8.0/extensions/channel.xml0000644000175000017500000000031212223047264016053 00000000000000 Channel extensions for telepathy-rakia telepathy-rakia-0.8.0/extensions/Makefile.am0000644000175000017500000000733512223047264015771 00000000000000tools_dir = $(top_srcdir)/tools AM_CFLAGS = \ $(ERROR_CFLAGS) \ $(DBUS_CFLAGS) \ $(GLIB_CFLAGS) \ $(TELEPATHY_GLIB_CFLAGS) AM_LDFLAGS = $(ERROR_LDFLAGS) EXTRA_DIST = \ all.xml \ channel.xml noinst_LTLIBRARIES = librakia-extensions.la librakia_extensions_la_LIBADD = \ $(TELEPATHY_GLIB_LIBS) # The client-specific parts are built into a separate .o file, so the linker # can discard them when linking services. The service-specific parts are # in svc-*.c, so we don't need an extensions-svc.c. librakia_extensions_la_SOURCES = \ extensions.c \ extensions.h nodist_librakia_extensions_la_SOURCES = \ _gen/signals-marshal.c \ _gen/signals-marshal.h \ _gen/signals-marshal.list \ _gen/register-dbus-glib-marshallers-body.h \ _gen/enums.h \ _gen/gtypes.h \ _gen/gtypes-body.h \ _gen/interfaces.h \ _gen/interfaces-body.h \ _gen/svc-channel.h \ _gen/svc-channel.c BUILT_SOURCES = \ _gen/all.xml \ _gen/channel.xml \ $(nodist_librakia_extensions_la_SOURCES) \ extensions.html CLEANFILES = $(BUILT_SOURCES) XSLTPROCFLAGS = --nonet --novalid # Generated files which can be generated for all categories simultaneously _gen/all.xml: all.xml $(wildcard *.xml) $(MKDIR_P) _gen $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \ $< > $@ extensions.html: _gen/all.xml $(tools_dir)/doc-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ $(tools_dir)/doc-generator.xsl \ $< > $@ _gen/gtypes.h: _gen/gtypes-body.h @: # do nothing, output as a side-effect _gen/gtypes-body.h: _gen/all.xml $(top_srcdir)/tools/glib-gtypes-generator.py $(PYTHON) $(top_srcdir)/tools/glib-gtypes-generator.py \ $< _gen/gtypes RAKIA _gen/signals-marshal.list: _gen/all.xml \ $(tools_dir)/glib-signals-marshal-gen.py $(PYTHON) $(tools_dir)/glib-signals-marshal-gen.py $< > $@ _gen/signals-marshal.h: _gen/signals-marshal.list $(GLIB_GENMARSHAL) --header --prefix=_rakia_ext_marshal $< > $@ _gen/signals-marshal.c: _gen/signals-marshal.list $(GLIB_GENMARSHAL) --body --prefix=_rakia_ext_marshal $< > $@ _gen/register-dbus-glib-marshallers-body.h: _gen/all.xml \ $(tools_dir)/glib-client-marshaller-gen.py $(PYTHON) $(tools_dir)/glib-client-marshaller-gen.py $< \ _rakia_ext > $@ _gen/enums.h: _gen/all.xml $(tools_dir)/c-constants-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ --stringparam mixed-case-prefix Rakia \ $(tools_dir)/c-constants-generator.xsl \ $< > $@ _gen/interfaces.h: _gen/all.xml \ $(tools_dir)/glib-interfaces-generator.xsl \ $(tools_dir)/c-interfaces-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ --stringparam mixed-case-prefix Rakia \ $(tools_dir)/glib-interfaces-generator.xsl \ $< > $@ _gen/interfaces-body.h: _gen/all.xml \ $(tools_dir)/glib-interfaces-body-generator.xsl \ $(tools_dir)/c-interfaces-generator.xsl $(XSLTPROC) $(XSLTPROCFLAGS) \ --stringparam mixed-case-prefix Rakia \ $(tools_dir)/glib-interfaces-body-generator.xsl \ $< > $@ # Generated files which must be generated per "category". Each TpProxy # subclass you want to use with --subclass will need to have its own category, # although you can subdivide further if you want. _gen/channel.xml: channel.xml $(wildcard *.xml) $(MKDIR_P) _gen $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \ $< > $@ _gen/svc-channel.h: _gen/svc-channel.c @: # do nothing, output as a side-effect _gen/svc-channel.c: _gen/channel.xml $(tools_dir)/glib-ginterface-gen.py $(PYTHON) $(tools_dir)/glib-ginterface-gen.py \ --filename=_gen/svc-channel \ --signal-marshal-prefix=_rakia_ext \ --include='' \ --include='"_gen/signals-marshal.h"' \ --not-implemented-func='tp_dbus_g_method_return_not_implemented' \ --allow-unstable \ $< Rakia_Svc_ telepathy-rakia-0.8.0/extensions/all.xml0000644000175000017500000000054412223047264015222 00000000000000 Extensions for telepathy-rakia telepathy-rakia-0.8.0/extensions/extensions.c0000644000175000017500000000033312223047264016267 00000000000000#include "config.h" #include "extensions.h" /* include auto-generated stubs for things common to service and client */ #include "_gen/gtypes-body.h" #include "_gen/interfaces-body.h" #include "_gen/signals-marshal.h" telepathy-rakia-0.8.0/NEWS0000644000175000017500000003753712223050175012237 00000000000000======================== NEWS for telepathy-rakia ======================== List of changes in each public release of Telepathy-Rakia, formerly known as Telepathy-SofiaSIP (most recent at the top). See also ChangeLog. telepathy-rakia 0.8.0 (2013-10-02) ---------------------------------- The “Origin” release. This is a new stable branch, recommended for GNOME 3.10-based distributions. No code changes since 0.7.5. telepathy-rakia 0.7.5 (2013-09-10) ---------------------------------- The “Superstition” release. This is a release candidate for telepathy-rakia 0.8.0, the first stable-branch under this name. Enhancements: - Use the same compiler and linker warnings as telepathy-glib (fd.o #49725, Simon) - Stop using deprecated telepathy-glib functionality (fd.o #49732, Simon) - Stop using deprecated Automake functionality (fd.o #62839, Brian Pepple) Bugfixes: - Advertise support for the Messages interface so recent Empathy will be willing to handle our Text channels (Alban) - Link successfully with strict linkers (Ionut Biru) - Compile and run tests successfully under Automake 1.13 (fd.o #49725, Simon) - Output the error message if GLib, GObject, GIO, libdbus or dbus-glib is missing (fd.o #49725, Simon) - Fix highly-parallel builds (fd.o #64285, Simon) - Suppress deprecation warnings from GLib > 2.30 (fd.o #49725, Simon) - Isolate regression tests better (fd.o #63119, Simon) - Initialize libdbus to be thread-safe (fd.o #54972, Simon) telepathy-rakia 0.7.4 (2012-05-08) ---------------------------------- The "Call Me Maybe" release. New features: - The StreamedMedia Channel type has been replaced by Call1 telepathy-rakia 0.7.3 (2011-10-27) ---------------------------------- The "one sip too many" release. Bugfixes: - Correct the bus service name. - Clear pending send flag if its respective stream direction is disabled. telepathy-rakia 0.7.2 (2011-09-06) ---------------------------------- The "Correcting People" release. News and enhancements: - The project is renamed to Telepathy-Rakia. - Updated Channel.Interface.DTMF implementation to spec 0.21.3. * This means dialstrings! - Improved and slightly optimized logging. - Added Messages properties to immutable properties. This release also includes fixes and enhancements done to the stable telepathy-sofiasip releases up to version 0.6.8. telepathy-sofiasip 0.7.1 (2011-02-01) ------------------------------------- The "cross country" release. New features: - Added 'message-token' and 'message-sent' headers to incoming messages, derived from SIP message headers (fd.o #32607). NOTE: some existing clients logging messages, notably the one released in Maemo 5, make unrealistically strict assumptions about the uniqueness of 'message-token' values. These logging implementations may exhibit problems with handling collisions in token values if used with this or later versions of Telpathy-SofiaSIP. Such collisions are unlikely, but possible if a remote endpoint generating the SIP Call-ID headers does not use an algorithm compliant with the SIP specification to provide sufficient uniqueness. - Authentication channels implemented as a simple password challenge. Other enhancements: - Test suite pulled up to Gabble standards. - Tests for basic StreamedMedia call cases (fd.o #32085) - Changed the type of the size parameter to gssize in tpsip_unquote_string(). Dependencies: - telepathy-glib >= 0.13.9 telepathy-sofiasip 0.7.0 (2010-11-23) ------------------------------------- The "Fermentation Vat No. 78" release. - Opening the new development series. - Implemented o.fd.Tp.Ch.I.Messages (fd.o #29377). - Implemented o.fd.Tp.Protocol (fd.o #30538). - Uses TpDBusDaemon to export media streams (fd.o #31720). - Depends on telepathy-glib 0.12.0 now. - Improvements in session state and signalling. Changes in release 0.6.8 (2011-06-14) ------------------------------------- The "homage to World's Toughest Fixes" release. - Refactored handling of local codec information to avoid excessive re-INVITEs - Remove non-intersecting local codecs from any further SDP negotiations (fd.o #30434). Changes in release 0.6.7 (2011-05-23) ------------------------------------- The "boarding up" release. - Verify the validity of TLS certificates presented by SIP connection peers. This change is disruptive: it relies on root CA certificates being available to sofia-sip in the default verification path ``~/.sip/auth`` or file ``~/.sip/auth/cafile.pem``, or sofia-sip changed to use OpenSSL library defaults for verification path (sf.net #3306245). The connection parameter "ignore-tls-errors" is added to disable verification. - Choose keepalive timing to make the iphb heartbeat synchronize with the other applications. (fd.o #37354) - Omission of parameter 'keepalive-interval' does not mean disabled keepalives. A default defined by sofia-sip is used instead. - More client-friendly behavior for connection parameter 'discover-stun': if set to TRUE, overrides 'stun-server'; by default discovery is performed if 'stun-server' is not set. (fd.o #34227) - If the home domain is given as an IP address, don't try to perform SRV lookups on it. - Requires sofia-sip >= 1.12.11. - Requires iphb >= 0.61.31, if used. Changes in release 0.6.6 (2011-02-01) ------------------------------------- The "Multiple Personality Communications Disorder" release. - Reject incoming calls from the same URI as the local user, rather than crashing apologetically (fd.o #33716). Changes in release 0.6.5 (2011-01-29) ------------------------------------- The "make buildable" release. - Changed the type of the size parameter to gssize in tpsip_unquote_string(). - Bugs fixed: - fd.o #31720 - stop using tp_get_bus() Changes in release 0.6.4 (2010-08-27) ------------------------------------- The "stretched thin" release. - Fix a thinko preventing proper declining of incoming calls with informative statuses like 603 Decline. Changes in release 0.6.3 (2010-06-21) ------------------------------------- The "my attorney suggests I do this" release. - Disable Sofia logging on --disable-debug configure flag. - Made the effect of environment variable TPSIP_PERSIST independent of the debug build flag. - Prevent removal of local pending send by holding the call. - Fix the application of local pending send flag in an incoming call. - Fixed a walk-off-the-end crash in the debug support code. - Not building useless PIC object files any more. Changes in release 0.6.2 (2010-03-17) ------------------------------------- The "I can't hear you breathing nervously" release. - Only expose the legacy STUN properties when set to meaningful values. - Properly enable the debug category for Sofia-SIP log messages. - Fix a crash in Sofia logger (fd.o #26889). - Fixed a regression that leaked audio before the call was accepted. - On incoming call, emit the new channel with correct initial media properties. Changes in release 0.6.1 (2010-02-19) ------------------------------------- The "people who stare at the ceiling" release. - Avoid using IPv6 addresses in self-referential URIs (fd.o #26654) - Provide a NEWS file with highlights of previous releases Changes in release 0.6.0 (2010-02-15) ------------------------------------- - Supports the new StreamHandler interface method CodecsUpdated. - Revisited code controlling stream directionality and pending flags (fd.o #26070). - Made critical warnings fatal again, after telepathy-glib stopped doing so. (fd.o #26153). - Try to disable locally originated re-INVITES as much as possible when 'immutable-streams' parameter is true (fd.o #26387). - Implemented the Debug interface (fd.o #26388). - Implemented the DBus properties of Media.StreamHandler (fd.o #26384). - Build fixes and improvements. - Support configure option --enable-silent-rules if using Automake >= 1.11 - Implemented properties InitialAudio, InitialVideo, and ImmutableStreams. - Introduced the connection manager parameter 'immutable-streams' to disable stream list changes mid-call, as well as hold. - Pass the ptime and maxptime attributes from remote SDP session and media descriptions as codec parameters. Values from a=fmtp are also considered. Changes in release 0.5.19 (2009-12-02) -------------------------------------- - Implemented proper codec parameter formatting for telephone/event payloads, and the supporting infrastructure for more formats. (fd.o bug #24615) - Ignore the trivial alias for self handle that is produced from the SIP URI. - Implemented call state In_Progress. - Properly flag password parameters as secret, also in the .manager file (fd.o bug #24561). - Autotools cleanups. - Normalize the alias for self handle, and properly format it into a double-quoted string for the SIP From header. - Use heartbeat more carefully, with per-connection wakeups timed in accordance with actual keepalive intervals. - Eliminate race conditions in hold/unhold code. Changes in release 0.5.18 (2009-08-27) -------------------------------------- - Don't delay the final 200 response to incoming messages. - Use sips: scheme in URI normalization when TLS transport is selected. - Treat 183 Session Progress response with setting the Ringing call state. Changes in release 0.5.17 (2009-07-25) -------------------------------------- - Do not check an unwarranted handle assertion (fd.o bug #17751). - Optionally using iphb on Maemo as a trigger for keepalives. Changes in release 0.5.16 (2009-04-14) -------------------------------------- - Updated to Telepathy specification 0.17.22: always allow self handle to leave Group for call channels (fd.o bug #20733). Correspondingly, bumped the libtelepathy-glib minimal version to 0.7.27. - Emit MembersChanged with proper actor on call channels terminated locally. - Map the 404 response status to member removal reason NoAnswer if the call peer has been contacted. - Don't destroy the media session object before closing the channel on dispose. Changes in release 0.5.15 (2009-02-10) -------------------------------------- - Use the error code Invalid_Handle for failed handle normalization, as per recent revisions of telepathy-spec (fd.o bug #19612). - Ignore provisional responses to a MESSAGE. - Handle an incoming BYE with a proper media channel group change. - Restored the backwards compatible behavior of AddMembers on a media channel (fd.o bug #19652). - Updated the coverage instrumentation support, with lcov reports, taken from telepathy-gabble. - Fixed issues reported by Coverity static analysis checks. Changes in release 0.5.14 (2009-01-13) -------------------------------------- - Bumped up the Sofia-SIP requirement to 1.12.10, to avoid a crasher bug in earlier versions. - Zero-initialize the GValue for the alias pair. Changes in release 0.5.13 (2008-11-28) -------------------------------------- - Fixed a few brown paper bag bugs with the new interfaces and properties on the media channel. - Do advertise Requests interface as supported by the connection. Changes in release 0.5.12 (2008-11-26) -------------------------------------- - Implemented Telepathy spec 0.17.15, compatible with 0.17.14. - Implemented the Requests interface on connections. The factories have been switched to implement TpChannelManager. Changes in release 0.5.11 (2008-10-30) -------------------------------------- - Migrated the source repository to Git. - Updated to telepathy spec 0.17.13. - Improved handle normalization. - Implemented the Aliasing interface for connections, returning a simplified rendering of remote SIP URIs. The alias for the self handle is now settable and transfers to the display name in the From: header. - The signal MembersChanged in call channels now follows protocol events more accurately. - Removed the hardcoded timeout for outgoing INVITE requests. - The final 200 response for an incoming MESSAGE now follows Telepathy acknowledgement for the message. - A Text channel is reopened if closed by the client while still having unacknowledged messages. - Depends on glib 2.16 or later. - Depends on libtelepathy-glib 0.7.17 or later. Changes in release 0.5.10 (2008-07-15) -------------------------------------- - Implemented glare resolution in case of a 491 Request Pending response. - Implemented D-Bus properties for Channel and Group implementations. - Rewritten the parser for a:fmtp SDP attribute. Fixes fd.o bug #16405 Changes in release 0.5.9 (2008-05-21) ------------------------------------- - Avoid redundant pushes of remote codec lists to Telepathy. - Revamped test suite synced from Gabble. - Full support for RTCP stream components. - Use telepathy-glib 0.7.8 for Hold interface helpers - Make sure the call channel is always closed after a remote error response is received and signalled as peer member removal. - Fixed a regression in handling newly requested streams during an ongoing negotiation. - Fixed a race condition in updating pending send flags. Changes in release 0.5.8 (2008-05-02) ------------------------------------- - Revamped behavior regarding Telepathy stream direction and pending send flags, to conform better to the specification and Gabble implementation. - Bugfixes in hold implementation. - On a stream error, close only the stream rather than terminating the whole session (sf.net bug #1944820). - Provide log divertion to a file given through the environment variable TPSIP_LOGFILE (sf.net FR #1944067). Changes in release 0.5.7 (2008-04-09) ------------------------------------- - Added tpsip/signals-marshal.list to distributed files. Changes in release 0.5.6 (2008-04-09) ------------------------------------- - Reimplemented CallState and Hold interfaces as per Telepathy spec 0.17.3.1. - Use the new hold API in StreamHandler interface. - Test suite fixes to run in Maemo scratchbox. - Refactored NUA event handling to use detailed GObject signals. Changes in release 0.5.5 (2008-03-05) ------------------------------------- - Fixed a brown paper bag regression with the default behavior of 'keepalive-interval'. - Autotools files cleaned up and modernized. - Updated to telepathy-glib type macros. - Implemented org.freedesktop.telepathy.Channel.Interface.Hold as of telepathy-spec 0.17.1.1 - Implemented org.freedesktop.telepathy.Channel.Interface.CallState as of telepathy-spec 0.17.1.1 - Implement the new behavior of RequestStreams and MembersChanged, as per Telepathy spec 0.17.1.1 - A few improvements in robustness. - Set the actor and reason in call channel group change notifications regarding call invitations being sent or received. Changes in release 0.5.4 (2008-02-15) ------------------------------------- - Treat empty string parameters as unset. - Added connection parameter 'loose-routing' to allow disabling RFC 3261 compliant SIP routing headers for legacy behavior, as implemented in the 0.4 branch and earlier. - Serialize codec intersections. Changes in release 0.5.3 (2008-02-06) ------------------------------------- - More media session fixes and code cleanups. Changes in release 0.5.2 (2008-01-31) ------------------------------------- - Removed an assertion on unexpected session state, as session states in question can in fact occur. - Further offer-answer fortifications to prevent violations of RFC 3264 due to concurrent locally requested changes. Changes in release 0.5.1 (2008-01-10) ------------------------------------- - Changed behaviour of SOFIASIP_DEBUG and SOFIASIP_PERSIST to match recent Gabble. - Fixed a parameter list corruption bug introduced in 0.5.0. - Session offer-answer fixes for cases when new streams are added in the middle of an ongoing negotiation. Changes in release 0.5.0 (2008-01-03) ------------------------------------- - Opened the new development branch. - Moved the executable to libexecdir. - Added a manpage for telepathy-sofiasip. - Use the initial route set as means to specify the outbound proxy. - Fixes for call channel flags (sf.net bug #1840543). - Added optional support for coverage instrumentation. - Postpone session state handling until local streams are ready. telepathy-rakia-0.8.0/tests/0000755000175000017500000000000012223050362012741 500000000000000telepathy-rakia-0.8.0/tests/Makefile.in0000644000175000017500000005036212223050267014740 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/tools/check-coding-style.mk \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = twisted DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @WANT_TWISTED_TESTS_TRUE@CHECKTWISTED = twisted SUBDIRS = $(CHECKTWISTED) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/tools/check-coding-style.mk $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/tools/check-coding-style.mk: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am check-local clean clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # noinst_PROGRAMS = \ # tp_caller # AM_CFLAGS = $(ERROR_CFLAGS) @DBUS_CFLAGS@ @GLIB_CFLAGS@ \ # -I $(top_srcdir)/src -I $(top_builddir)/src # ALL_LIBS = @DBUS_LIBS@ @GLIB_LIBS@ check-valgrind: G_SLICE=always-malloc \ G_DEBUG=gc-friendly \ $(MAKE) \ TESTS_ENVIRONMENT="\ libtool --mode=execute valgrind \ --leak-check=full \ --show-reachable=no \ --error-exitcode=1" \ check check-local: check-coding-style check-coding-style: @fail=0; \ if test -n "$(check_misc_sources)"; then \ tools_dir=$(top_srcdir)/tools \ sh $(top_srcdir)/tools/check-misc.sh \ $(check_misc_sources) || fail=1; \ fi; \ if test -n "$(check_c_sources)"; then \ tools_dir=$(top_srcdir)/tools \ sh $(top_srcdir)/tools/check-c-style.sh \ $(check_c_sources) || fail=1; \ fi;\ if test yes = "$(ENABLE_CODING_STYLE_CHECKS)"; then \ exit "$$fail";\ else \ exit 0;\ fi # check_c_sources = \ # tp_caller.c # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/tests/twisted/0000755000175000017500000000000012223050363014425 500000000000000telepathy-rakia-0.8.0/tests/twisted/test-register-fail.py0000644000175000017500000000053512223047264020442 00000000000000""" Test SIP registration failure. """ from sofiatest import exec_test def test(q, bus, conn, sip): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[1, 1]) q.expect('dbus-signal', signal='StatusChanged', args=[2, 3]) return True if __name__ == '__main__': exec_test(test, register_cb=lambda *args: False) telepathy-rakia-0.8.0/tests/twisted/Makefile.in0000644000175000017500000005400412223050267016420 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/tools/check-coding-style.mk \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am subdir = tests/twisted ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ NULL = TWISTED_TESTS = \ cm/protocol.py \ test-register.py \ test-register-fail.py \ test-register-sasl.py \ test-debug.py \ test-handle-normalisation.py \ test-message.py \ test-self-alias.py \ text/initiate-requestotron.py \ voip/calltest.py \ voip/ringing-queued.py \ voip/requestable-classes.py \ voip/direction-change.py \ voip/add-remove-content.py \ $(NULL) CHECK_TWISTED_SLEEP = 0 @ENABLE_DEBUG_FALSE@DEBUGGING_PYBOOL = False @ENABLE_DEBUG_TRUE@DEBUGGING_PYBOOL = True BUILT_SOURCES = \ config.py \ rakia-twisted-tests.list \ run-test.sh \ $(NULL) EXTRA_DIST = \ $(TWISTED_TESTS) \ constants.py \ run-test.sh.in \ sofiatest.py \ servicetest.py \ voip/voip_test.py CLEANFILES = \ $(BUILT_SOURCES) \ rakia-[1-9]*.log \ *.pyc \ */*.pyc \ $(NULL) check_misc_sources = $(TESTS) SUBDIRS = tools all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/tools/check-coding-style.mk $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/twisted/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/twisted/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/tools/check-coding-style.mk: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am check-local clean clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am check-local: check-coding-style check-twisted check-twisted: $(BUILT_SOURCES) $(MAKE) -C tools if test "x$(CHECK_TWISTED_SLEEP)" = x0; then \ rakia_test_sleep= ; \ else \ rakia_test_sleep=--sleep=$(CHECK_TWISTED_SLEEP); \ fi; \ RAKIA_TEST_UNINSTALLED=1 \ RAKIA_ABS_TOP_SRCDIR=@abs_top_srcdir@ \ RAKIA_ABS_TOP_BUILDDIR=@abs_top_builddir@ \ RAKIA_TEST_SLEEP=$$rakia_test_sleep \ ./run-test.sh "$(TWISTED_TESTS)" config.py: Makefile $(AM_V_GEN) { \ echo "PACKAGE_STRING = \"$(PACKAGE_STRING)\""; \ echo "DEBUGGING = $(DEBUGGING_PYBOOL)"; \ } > $@ rakia-twisted-tests.list: Makefile $(AM_V_GEN)echo $(TWISTED_TESTS) > $@ # We don't really use rakiatestsdir yet - we only support uninstalled testing # so far - but I'm substituting it to keep the script more similar to Gabble's. # ${pkglibexecdir}/tests is what GNOME's InstalledTests goal recommends. # # Similarly, Gabble supports TEST_PYTHON differing from PYTHON for historical # reasons, but we don't do that here. run-test.sh: run-test.sh.in Makefile $(AM_V_GEN)sed \ -e 's![@]rakiatestsdir[@]!${pkglibexecdir}/tests!' \ -e 's![@]TEST_PYTHON[@]!$(PYTHON)!' \ < $< > $@.tmp && \ chmod +x $@.tmp && \ mv $@.tmp $@ check-local: check-coding-style check-coding-style: @fail=0; \ if test -n "$(check_misc_sources)"; then \ tools_dir=$(top_srcdir)/tools \ sh $(top_srcdir)/tools/check-misc.sh \ $(check_misc_sources) || fail=1; \ fi; \ if test -n "$(check_c_sources)"; then \ tools_dir=$(top_srcdir)/tools \ sh $(top_srcdir)/tools/check-c-style.sh \ $(check_c_sources) || fail=1; \ fi;\ if test yes = "$(ENABLE_CODING_STYLE_CHECKS)"; then \ exit "$$fail";\ else \ exit 0;\ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/tests/twisted/constants.py0000644000175000017500000003205712223047264016750 00000000000000""" Some handy constants for other tests to share and enjoy. """ from dbus import PROPERTIES_IFACE CM = "org.freedesktop.Telepathy.ConnectionManager" HT_NONE = 0 HT_CONTACT = 1 HT_ROOM = 2 HT_LIST = 3 HT_GROUP = 4 CHANNEL = "org.freedesktop.Telepathy.Channel" CHANNEL_IFACE_CALL_STATE = CHANNEL + ".Interface.CallState" CHANNEL_IFACE_CHAT_STATE = CHANNEL + '.Interface.ChatState' CHANNEL_IFACE_DESTROYABLE = CHANNEL + ".Interface.Destroyable" CHANNEL_IFACE_DTMF = CHANNEL + ".Interface.DTMF" CHANNEL_IFACE_GROUP = CHANNEL + ".Interface.Group" CHANNEL_IFACE_HOLD = CHANNEL + ".Interface.Hold" CHANNEL_IFACE_MEDIA_SIGNALLING = CHANNEL + ".Interface.MediaSignalling" CHANNEL_IFACE_MESSAGES = CHANNEL + ".Interface.Messages" CHANNEL_IFACE_PASSWORD = CHANNEL + ".Interface.Password" CHANNEL_IFACE_TUBE = CHANNEL + ".Interface.Tube" CHANNEL_IFACE_SASL_AUTH = CHANNEL + ".Interface.SaslAuthentication.DRAFT" CHANNEL_IFACE_CONFERENCE = CHANNEL + '.Interface.Conference' CHANNEL_TYPE_CALL = CHANNEL + ".Type.Call1" CHANNEL_TYPE_CONTACT_LIST = CHANNEL + ".Type.ContactList" CHANNEL_TYPE_CONTACT_SEARCH = CHANNEL + ".Type.ContactSearch" CHANNEL_TYPE_TEXT = CHANNEL + ".Type.Text" CHANNEL_TYPE_TUBES = CHANNEL + ".Type.Tubes" CHANNEL_TYPE_STREAM_TUBE = CHANNEL + ".Type.StreamTube" CHANNEL_TYPE_DBUS_TUBE = CHANNEL + ".Type.DBusTube" CHANNEL_TYPE_TEXT = CHANNEL + ".Type.Text" CHANNEL_TYPE_FILE_TRANSFER = CHANNEL + ".Type.FileTransfer" CHANNEL_TYPE_SERVER_AUTHENTICATION = \ CHANNEL + ".Type.ServerAuthentication.DRAFT" CHANNEL_TYPE_SERVER_TLS_CONNECTION = \ CHANNEL + ".Type.ServerTLSConnection" TP_AWKWARD_PROPERTIES = "org.freedesktop.Telepathy.Properties" PROPERTY_FLAG_READ = 1 PROPERTY_FLAG_WRITE = 2 PROPERTY_FLAGS_RW = PROPERTY_FLAG_READ | PROPERTY_FLAG_WRITE CHANNEL_TYPE = CHANNEL + '.ChannelType' TARGET_HANDLE_TYPE = CHANNEL + '.TargetHandleType' TARGET_HANDLE = CHANNEL + '.TargetHandle' TARGET_ID = CHANNEL + '.TargetID' REQUESTED = CHANNEL + '.Requested' INITIATOR_HANDLE = CHANNEL + '.InitiatorHandle' INITIATOR_ID = CHANNEL + '.InitiatorID' INTERFACES = CHANNEL + '.Interfaces' INITIAL_AUDIO = CHANNEL_TYPE_CALL + '.InitialAudio' INITIAL_VIDEO = CHANNEL_TYPE_CALL + '.InitialVideo' INITIAL_AUDIO_NAME = CHANNEL_TYPE_CALL + '.InitialAudioName' INITIAL_VIDEO_NAME = CHANNEL_TYPE_CALL + '.InitialVideoName' INITIAL_TRANSPORT = CHANNEL_TYPE_CALL + '.InitialTransport' MUTABLE_CONTENTS = CHANNEL_TYPE_CALL + '.MutableContents' DTMF_INITIAL_TONES = CHANNEL_IFACE_DTMF + '.InitialTones' CALL_CONTENT = 'org.freedesktop.Telepathy.Call1.Content' CALL_CONTENT_IFACE_MEDIA = \ 'org.freedesktop.Telepathy.Call1.Content.Interface.Media' CALL_CONTENT_MEDIA_DESCRIPTION = \ 'org.freedesktop.Telepathy.Call1.Content.MediaDescription' CALL_STREAM = 'org.freedesktop.Telepathy.Call1.Stream' CALL_STREAM_IFACE_MEDIA = \ 'org.freedesktop.Telepathy.Call1.Stream.Interface.Media' CALL_STREAM_ENDPOINT = 'org.freedesktop.Telepathy.Call1.Stream.Endpoint' CALL_STREAM_ENDPOINT_STATE_CONNECTING = 0 CALL_STREAM_ENDPOINT_STATE_PROVISIONALLY_CONNECTED = 1 CALL_STREAM_ENDPOINT_STATE_FULLY_CONNECTED = 2 CALL_STREAM_ENDPOINT_STATE_EXHAUSTED_CANDIDATES = 3 CALL_STREAM_ENDPOINT_STATE_FAILED = 4 CALL_MEDIA_TYPE_AUDIO = 0 CALL_MEDIA_TYPE_VIDEO = 1 MEDIA_STREAM_BASE_PROTO_UDP = 0 MEDIA_STREAM_BASE_PROTO_TCP = 1 CALL_STREAM_TRANSPORT_UNKNOWN = 0 CALL_STREAM_TRANSPORT_RAW_UDP = 1 CALL_STREAM_TRANSPORT_ICE = 2 CALL_STATE_UNKNOWN = 0 CALL_STATE_PENDING_INITIATOR = 1 CALL_STATE_PENDING_RECEIVER = 2 CALL_STATE_ACCEPTED = 3 CALL_STATE_ENDED = 4 CALL_MEMBER_FLAG_RINGING = 1 CALL_MEMBER_FLAG_HELD = 2 CALL_DISPOSITION_NONE = 0 CALL_DISPOSITION_INITIAL = 1 CALL_SENDING_STATE_NONE = 0 CALL_SENDING_STATE_PENDING_SEND = 1 CALL_SENDING_STATE_SENDING = 2 CALL_SENDING_STATE_PENDING_STOP_SENDING = 3 CALL_STREAM_FLOW_STATE_STOPPED = 0 CALL_STREAM_FLOW_STATE_PENDING_START = 1 CALL_STREAM_FLOW_STATE_PENDING_STOP = 2 CALL_STREAM_FLOW_STATE_STARTED = 3 SUBSCRIPTION_STATE_UNKNOWN = 0 SUBSCRIPTION_STATE_NO = 1 SUBSCRIPTION_STATE_REMOVED_REMOTELY = 2 SUBSCRIPTION_STATE_ASK = 3 SUBSCRIPTION_STATE_YES = 4 CONTACT_LIST_STATE_NONE = 0 CONTACT_LIST_STATE_WAITING = 1 CONTACT_LIST_STATE_FAILURE = 2 CONTACT_LIST_STATE_SUCCESS = 3 CONN = "org.freedesktop.Telepathy.Connection" CONN_IFACE_AVATARS = CONN + '.Interface.Avatars' CONN_IFACE_ALIASING = CONN + '.Interface.Aliasing' CONN_IFACE_CAPS = CONN + '.Interface.Capabilities' CONN_IFACE_CONTACTS = CONN + '.Interface.Contacts' CONN_IFACE_CONTACT_CAPS = CONN + '.Interface.ContactCapabilities.DRAFT' CONN_IFACE_CONTACT_INFO = CONN + ".Interface.ContactInfo" CONN_IFACE_PRESENCE = CONN + '.Interface.Presence' CONN_IFACE_SIMPLE_PRESENCE = CONN + '.Interface.SimplePresence' CONN_IFACE_REQUESTS = CONN + '.Interface.Requests' CONN_IFACE_LOCATION = CONN + '.Interface.Location' CONN_IFACE_GABBLE_DECLOAK = CONN + '.Interface.Gabble.Decloak' CONN_IFACE_MAIL_NOTIFICATION = CONN + '.Interface.MailNotification.DRAFT' CONN_IFACE_CONTACT_LIST = CONN + '.Interface.ContactList' CONN_IFACE_CONTACT_GROUPS = CONN + '.Interface.ContactGroups' ATTR_CONTACT_CAPABILITIES = CONN_IFACE_CONTACT_CAPS + '/capabilities' STREAM_HANDLER = 'org.freedesktop.Telepathy.Media.StreamHandler' ERROR = 'org.freedesktop.Telepathy.Error' INVALID_ARGUMENT = ERROR + '.InvalidArgument' NOT_IMPLEMENTED = ERROR + '.NotImplemented' NOT_AVAILABLE = ERROR + '.NotAvailable' PERMISSION_DENIED = ERROR + '.PermissionDenied' OFFLINE = ERROR + '.Offline' NOT_CAPABLE = ERROR + '.NotCapable' CONNECTION_REFUSED = ERROR + '.ConnectionRefused' CONNECTION_FAILED = ERROR + '.ConnectionFailed' CONNECTION_LOST = ERROR + '.ConnectionLost' CANCELLED = ERROR + '.Cancelled' DISCONNECTED = ERROR + '.Disconnected' REGISTRATION_EXISTS = ERROR + '.RegistrationExists' AUTHENTICATION_FAILED = ERROR + '.AuthenticationFailed' CONNECTION_REPLACED = ERROR + '.ConnectionReplaced' ALREADY_CONNECTED = ERROR + '.AlreadyConnected' NETWORK_ERROR = ERROR + '.NetworkError' NOT_YET = ERROR + '.NotYet' INVALID_HANDLE = ERROR + '.InvalidHandle' CERT_UNTRUSTED = ERROR + '.Cert.Untrusted' UNKNOWN_METHOD = 'org.freedesktop.DBus.Error.UnknownMethod' TUBE_PARAMETERS = CHANNEL_IFACE_TUBE + '.Parameters' TUBE_STATE = CHANNEL_IFACE_TUBE + '.State' STREAM_TUBE_SERVICE = CHANNEL_TYPE_STREAM_TUBE + '.Service' DBUS_TUBE_SERVICE_NAME = CHANNEL_TYPE_DBUS_TUBE + '.ServiceName' DBUS_TUBE_DBUS_NAMES = CHANNEL_TYPE_DBUS_TUBE + '.DBusNames' DBUS_TUBE_SUPPORTED_ACCESS_CONTROLS = CHANNEL_TYPE_DBUS_TUBE + '.SupportedAccessControls' STREAM_TUBE_SUPPORTED_SOCKET_TYPES = CHANNEL_TYPE_STREAM_TUBE + '.SupportedSocketTypes' CONFERENCE_INITIAL_CHANNELS = CHANNEL_IFACE_CONFERENCE + '.InitialChannels' CONFERENCE_INITIAL_INVITEE_HANDLES = CHANNEL_IFACE_CONFERENCE + '.InitialInviteeHandles' CONFERENCE_INITIAL_INVITEE_IDS = CHANNEL_IFACE_CONFERENCE + '.InitialInviteeIDs' CONTACT_SEARCH_ASK = CHANNEL_TYPE_CONTACT_SEARCH + '.AvailableSearchKeys' CONTACT_SEARCH_SERVER = CHANNEL_TYPE_CONTACT_SEARCH + '.Server' CONTACT_SEARCH_STATE = CHANNEL_TYPE_CONTACT_SEARCH + '.SearchState' SEARCH_NOT_STARTED = 0 SEARCH_IN_PROGRESS = 1 SEARCH_MORE_AVAILABLE = 2 SEARCH_COMPLETED = 3 SEARCH_FAILED = 4 TUBE_CHANNEL_STATE_LOCAL_PENDING = 0 TUBE_CHANNEL_STATE_REMOTE_PENDING = 1 TUBE_CHANNEL_STATE_OPEN = 2 TUBE_CHANNEL_STATE_NOT_OFFERED = 3 MEDIA_STREAM_TYPE_AUDIO = 0 MEDIA_STREAM_TYPE_VIDEO = 1 SOCKET_ADDRESS_TYPE_UNIX = 0 SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX = 1 SOCKET_ADDRESS_TYPE_IPV4 = 2 SOCKET_ADDRESS_TYPE_IPV6 = 3 SOCKET_ACCESS_CONTROL_LOCALHOST = 0 SOCKET_ACCESS_CONTROL_PORT = 1 SOCKET_ACCESS_CONTROL_NETMASK = 2 SOCKET_ACCESS_CONTROL_CREDENTIALS = 3 TUBE_STATE_LOCAL_PENDING = 0 TUBE_STATE_REMOTE_PENDING = 1 TUBE_STATE_OPEN = 2 TUBE_STATE_NOT_OFFERED = 3 TUBE_TYPE_DBUS = 0 TUBE_TYPE_STREAM = 1 MEDIA_STREAM_DIRECTION_NONE = 0 MEDIA_STREAM_DIRECTION_SEND = 1 MEDIA_STREAM_DIRECTION_RECEIVE = 2 MEDIA_STREAM_DIRECTION_BIDIRECTIONAL = 3 MEDIA_STREAM_PENDING_LOCAL_SEND = 1 MEDIA_STREAM_PENDING_REMOTE_SEND = 2 MEDIA_STREAM_TYPE_AUDIO = 0 MEDIA_STREAM_TYPE_VIDEO = 1 MEDIA_STREAM_STATE_DISCONNECTED = 0 MEDIA_STREAM_STATE_CONNECTING = 1 MEDIA_STREAM_STATE_CONNECTED = 2 MEDIA_STREAM_DIRECTION_NONE = 0 MEDIA_STREAM_DIRECTION_SEND = 1 MEDIA_STREAM_DIRECTION_RECEIVE = 2 MEDIA_STREAM_DIRECTION_BIDIRECTIONAL = 3 FT_STATE_NONE = 0 FT_STATE_PENDING = 1 FT_STATE_ACCEPTED = 2 FT_STATE_OPEN = 3 FT_STATE_COMPLETED = 4 FT_STATE_CANCELLED = 5 FT_STATE_CHANGE_REASON_NONE = 0 FT_STATE_CHANGE_REASON_REQUESTED = 1 FT_STATE_CHANGE_REASON_LOCAL_STOPPED = 2 FT_STATE_CHANGE_REASON_REMOTE_STOPPED = 3 FT_STATE_CHANGE_REASON_LOCAL_ERROR = 4 FT_STATE_CHANGE_REASON_REMOTE_ERROR = 5 FILE_HASH_TYPE_NONE = 0 FILE_HASH_TYPE_MD5 = 1 FILE_HASH_TYPE_SHA1 = 2 FILE_HASH_TYPE_SHA256 = 3 FT_STATE = CHANNEL_TYPE_FILE_TRANSFER + '.State' FT_CONTENT_TYPE = CHANNEL_TYPE_FILE_TRANSFER + '.ContentType' FT_FILENAME = CHANNEL_TYPE_FILE_TRANSFER + '.Filename' FT_SIZE = CHANNEL_TYPE_FILE_TRANSFER + '.Size' FT_CONTENT_HASH_TYPE = CHANNEL_TYPE_FILE_TRANSFER + '.ContentHashType' FT_CONTENT_HASH = CHANNEL_TYPE_FILE_TRANSFER + '.ContentHash' FT_DESCRIPTION = CHANNEL_TYPE_FILE_TRANSFER + '.Description' FT_DATE = CHANNEL_TYPE_FILE_TRANSFER + '.Date' FT_AVAILABLE_SOCKET_TYPES = CHANNEL_TYPE_FILE_TRANSFER + '.AvailableSocketTypes' FT_TRANSFERRED_BYTES = CHANNEL_TYPE_FILE_TRANSFER + '.TransferredBytes' FT_INITIAL_OFFSET = CHANNEL_TYPE_FILE_TRANSFER + '.InitialOffset' FT_FILE_COLLECTION = CHANNEL_TYPE_FILE_TRANSFER + '.FUTURE.FileCollection' GF_CAN_ADD = 1 GF_CAN_REMOVE = 2 GF_CAN_RESCIND = 4 GF_MESSAGE_ADD = 8 GF_MESSAGE_REMOVE = 16 GF_MESSAGE_ACCEPT = 32 GF_MESSAGE_REJECT = 64 GF_MESSAGE_RESCIND = 128 GF_CHANNEL_SPECIFIC_HANDLES = 256 GF_ONLY_ONE_GROUP = 512 GF_HANDLE_OWNERS_NOT_AVAILABLE = 1024 GF_PROPERTIES = 2048 GF_MEMBERS_CHANGED_DETAILED = 4096 GC_REASON_NONE = 0 GC_REASON_OFFLINE = 1 GC_REASON_KICKED = 2 GC_REASON_BUSY = 3 GC_REASON_INVITED = 4 GC_REASON_BANNED = 5 GC_REASON_ERROR = 6 GC_REASON_INVALID_CONTACT = 7 GC_REASON_NO_ANSWER = 8 GC_REASON_RENAMED = 9 GC_REASON_PERMISSION_DENIED = 10 GC_REASON_SEPARATED = 11 HS_UNHELD = 0 HS_HELD = 1 HS_PENDING_HOLD = 2 HS_PENDING_UNHOLD = 3 HSR_NONE = 0 HSR_REQUESTED = 1 HSR_RESOURCE_NOT_AVAILABLE = 2 CALL_STATE_UNKNOWN = 0, CALL_STATE_PENDING_INITIATOR = 1 CALL_STATE_INITIALISING = 2 CALL_STATE_INITIALISED = 3 CALL_STATE_ACCEPTED = 4 CALL_STATE_ACTIVE = 5 CALL_STATE_ENDED = 6 CALL_MEMBER_FLAG_RINGING = 1 CALL_MEMBER_FLAG_HELD = 2 CALL_FLAG_LOCALLY_HELD = 1 CALL_FLAG_LOCALLY_RINGING = 2 CALL_FLAG_LOCALLY_QUEUED = 4 CALL_FLAG_FORWARDED = 8 CALL_FLAG_CLEARING = 16 CONN_STATUS_CONNECTED = 0 CONN_STATUS_CONNECTING = 1 CONN_STATUS_DISCONNECTED = 2 CSR_NONE_SPECIFIED = 0 CSR_REQUESTED = 1 CSR_NETWORK_ERROR = 2 CSR_AUTHENTICATION_FAILED = 3 CSR_ENCRYPTION_ERROR = 4 CSR_NAME_IN_USE = 5 CSR_CERT_NOT_PROVIDED = 6 CSR_CERT_UNTRUSTED = 7 CSR_CERT_EXPIRED = 8 CSR_CERT_NOT_ACTIVATED = 9 CSR_CERT_HOSTNAME_MISMATCH = 10 CSR_CERT_FINGERPRINT_MISMATCH = 11 CSR_CERT_SELF_SIGNED = 12 CSR_CERT_OTHER_ERROR = 13 BUDDY_INFO = 'org.laptop.Telepathy.BuddyInfo' ACTIVITY_PROPERTIES = 'org.laptop.Telepathy.ActivityProperties' CHAT_STATE_GONE = 0 CHAT_STATE_INACTIVE = 1 CHAT_STATE_ACTIVE = 2 CHAT_STATE_PAUSED = 3 CHAT_STATE_COMPOSING = 4 # Channel_Media_Capabilities MEDIA_CAP_AUDIO = 1 MEDIA_CAP_VIDEO = 2 MEDIA_CAP_STUN = 4 MEDIA_CAP_GTALKP2P = 8 MEDIA_CAP_ICEUDP = 16 MEDIA_CAP_IMMUTABLE_STREAMS = 32 CLIENT = 'org.freedesktop.Telepathy.Client' PRESENCE_OFFLINE = 1 PRESENCE_AVAILABLE = 2 PRESENCE_AWAY = 3 PRESENCE_EXTENDED_AWAY = 4 PRESENCE_HIDDEN = 5 PRESENCE_BUSY = 6 PRESENCE_UNKNOWN = 7 PRESENCE_ERROR = 8 CONTACT_INFO_FLAG_CAN_SET = 1 CONTACT_INFO_FLAG_PUSH = 2 CONTACT_INFO_FIELD_FLAG_PARAMETERS_MANDATORY = 1 # Channel_Type_ServerAuthentication AUTH_TYPE_SASL = 0 AUTH_TYPE_CAPTCHA = 1 # Channel_Interface_SaslAuthentication SASL_STATUS_NOT_STARTED = 0 SASL_STATUS_IN_PROGRESS = 1 SASL_STATUS_SERVER_SUCCEEDED = 2 SASL_STATUS_CLIENT_ACCEPTED = 3 SASL_STATUS_SUCCEEDED = 4 SASL_STATUS_SERVER_FAILED = 5 SASL_STATUS_CLIENT_FAILED = 6 SASL_ABORT_REASON_INVALID_CHALLENGE = 0 SASL_ABORT_REASON_USER_ABORT = 1 AUTH_METHOD = CHANNEL_TYPE_SERVER_AUTHENTICATION + ".AuthenticationMethod" AUTH_INFO = CHANNEL_TYPE_SERVER_AUTHENTICATION + ".AuthenticationInformation" SASL_AVAILABLE_MECHANISMS = CHANNEL_IFACE_SASL_AUTH + ".AvailableMechanisms" # Channel_Type_ServerTLSConnection TLS_CERT_PATH = CHANNEL_TYPE_SERVER_TLS_CONNECTION + ".ServerCertificate" TLS_HOSTNAME = CHANNEL_TYPE_SERVER_TLS_CONNECTION + ".Hostname" # Connection.Interface.Location LOCATION_FEATURE_CAN_SET = 1 # Channel.Type.Text MT_NORMAL = 0 MT_ACTION = 1 MT_NOTICE = 2 MT_AUTO_REPLY = 3 MT_DELIVERY_REPORT = 4 PROTOCOL = 'org.freedesktop.Telepathy.Protocol' PARAM_REQUIRED = 1 PARAM_REGISTER = 2 PARAM_HAS_DEFAULT = 4 PARAM_SECRET = 8 PARAM_DBUS_PROPERTY = 16 AUTHENTICATION = 'org.freedesktop.Telepathy.Authentication' AUTH_TLS_CERT = AUTHENTICATION + ".TLSCertificate" TLS_CERT_STATE_PENDING = 0 TLS_CERT_STATE_ACCEPTED = 1 TLS_CERT_STATE_REJECTED = 2 TLS_REJECT_REASON_UNKNOWN = 0 TLS_REJECT_REASON_UNTRUSTED = 1 CALL_CONTENT_PACKETIZATION_RTP = 0 CALL_CONTENT_PACKETIZATION_RAW = 1 CALL_CONTENT_PACKETIZATION_MSN_WEBCAM = 2 CALL_SCR_UNKNOWN = 0 CALL_SCR_PROGRESS_MADE = 1 CALL_SCR_USER_REQUESTED = 2 CALL_SCR_MEDIA_ERROR = 12 telepathy-rakia-0.8.0/tests/twisted/test-debug.py0000644000175000017500000000340312223047264016770 00000000000000 """ Test the debug message interface. """ import dbus from servicetest import assertEquals, sync_dbus from sofiatest import exec_test import constants as cs from config import DEBUGGING path = '/org/freedesktop/Telepathy/debug' iface = 'org.freedesktop.Telepathy.Debug' def test(q, bus, conn, stream): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[0, 1]) messages = [] def new_message(timestamp, domain, level, string): messages.append((timestamp, domain, level, string)) debug = bus.get_object(conn.bus_name, path) debug_iface = dbus.Interface(debug, iface) debug_iface.connect_to_signal('NewDebugMessage', new_message) props_iface = dbus.Interface(debug, cs.PROPERTIES_IFACE) assert len(debug_iface.GetMessages()) > 0 # Turn signalling on and generate some messages. assert len(messages) == 0 assert props_iface.Get(iface, 'Enabled') == False props_iface.Set(iface, 'Enabled', True) channel_path = conn.RequestChannel( cs.CHANNEL_TYPE_TEXT, cs.HT_CONTACT, conn.GetSelfHandle(), True) q.expect('dbus-signal', signal='NewChannel') if DEBUGGING: assert len(messages) > 0 else: assertEquals([], messages) # Turn signalling off and check we don't get any more messages. props_iface.Set(iface, 'Enabled', False) sync_dbus(bus, q, conn) snapshot = list(messages) channel = bus.get_object(conn.bus_name, channel_path) channel.Close(dbus_interface=cs.CHANNEL) q.expect('dbus-signal', signal='Closed') conn.RequestChannel( cs.CHANNEL_TYPE_TEXT, cs.HT_CONTACT, conn.GetSelfHandle(), True) q.expect('dbus-signal', signal='NewChannel') assertEquals (snapshot, messages) if __name__ == '__main__': exec_test(test) telepathy-rakia-0.8.0/tests/twisted/test-register-sasl.py0000644000175000017500000000214712223047264020472 00000000000000""" Test SIP registration failure. """ import dbus from sofiatest import exec_test def test(q, bus, conn, sip): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[1, 1]) q.expect('sip-register') nc = q.expect('dbus-signal', signal='NewChannels') (((path, props),),) = nc.args assert props['org.freedesktop.Telepathy.Channel.ChannelType'] == \ 'org.freedesktop.Telepathy.Channel.Type.ServerAuthentication' assert props['org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication.AvailableMechanisms'] == \ ['X-TELEPATHY-PASSWORD'] chan = dbus.Interface(bus.get_object(conn._named_service, path), "org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication") chan.StartMechanismWithData('X-TELEPATHY-PASSWORD', 'wrong password') chan.AcceptSASL() q.expect('sip-register') q.expect('dbus-signal', signal='StatusChanged', args=[2, 3]) return True if __name__ == '__main__': exec_test(test, register_cb=lambda *args: False, params={"password": None}) telepathy-rakia-0.8.0/tests/twisted/voip/0000755000175000017500000000000012223050363015402 500000000000000telepathy-rakia-0.8.0/tests/twisted/voip/add-remove-content.py0000644000175000017500000001650012223047264021377 00000000000000import calltest import constants as cs import re from servicetest import ( EventPattern, call_async, assertEquals, assertNotEquals, assertContains, assertLength, assertDoesNotContain ) class AddRemoveContent(calltest.CallTest): def __init__(self, *params): calltest.CallTest.__init__(self, *params) def add_content_succesful(self): o = self.chan.Call1.AddContent("new audio", cs.MEDIA_STREAM_TYPE_AUDIO, cs.MEDIA_STREAM_DIRECTION_BIDIRECTIONAL) self.q.expect('dbus-signal', signal='ContentAdded', args=[o], path=self.chan.__dbus_object_path__) content = self.add_content(o, initial=False, incoming=False) self.add_candidates(content.stream) md_path, _ = content.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') md = self.bus.get_object (self.conn.bus_name, md_path) md.Accept(self.context.get_audio_md_dbus(self.remote_handle)) self.q.expect_many( EventPattern('dbus-signal', signal='MediaDescriptionOfferDone'), EventPattern('dbus-signal', signal='LocalMediaDescriptionChanged'), EventPattern('dbus-signal', signal='RemoteMediaDescriptionsChanged')) content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) reinvite_event, _ = self.q.expect_many( EventPattern('sip-invite'), EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__)) self.add_to_medias('audio') self.context.check_call_sdp(reinvite_event.sip_message.body, self.medias) self.context.accept(reinvite_event.sip_message) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), EventPattern('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START], path=content.stream.__dbus_object_path__)) content.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) self.q.expect('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__) return content def add_content_rejected(self): o = self.chan.Call1.AddContent("new audio", cs.MEDIA_STREAM_TYPE_AUDIO, cs.MEDIA_STREAM_DIRECTION_BIDIRECTIONAL) self.q.expect('dbus-signal', signal='ContentAdded', args=[o], path=self.chan.__dbus_object_path__) content = self.add_content(o, initial=False, incoming=False) self.add_candidates(content.stream) md_path, _ = content.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') md = self.bus.get_object (self.conn.bus_name, md_path) md.Accept(self.context.get_audio_md_dbus(self.remote_handle)) self.q.expect_many( EventPattern('dbus-signal', signal='MediaDescriptionOfferDone'), EventPattern('dbus-signal', signal='LocalMediaDescriptionChanged'), EventPattern('dbus-signal', signal='RemoteMediaDescriptionsChanged')) content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) reinvite_event, _ = self.q.expect_many( EventPattern('sip-invite'), EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__)) self.context.check_call_sdp(reinvite_event.sip_message.body, self.medias + [('audio', None, None)]) res = re.match('(.*)(m=.*)', reinvite_event.sip_message.body, re.MULTILINE | re.DOTALL) body = res.group(1) + 'm=audio 0 RTP/AVP 0' self.add_to_medias(None) self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] o = self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), EventPattern('dbus-signal', signal='ContentRemoved', path=self.chan_path)) assertEquals(content.__dbus_object_path__, o[1].args[0]) assertEquals(self.remote_handle, o[1].args[1][0]) self.contents.remove(content) def remove_content_successful(self, x): content = self.contents[x] self.contents.remove(content) content.Remove() reinvite_event, content_removed = self.q.expect_many( EventPattern('sip-invite'), EventPattern('dbus-signal', signal='ContentRemoved', path=self.chan.__dbus_object_path__)) assertEquals(content.__dbus_object_path__, content_removed.args[0]) assertEquals(self.self_handle, content_removed.args[1][0]) assertEquals(cs.CALL_SCR_USER_REQUESTED, content_removed.args[1][1]) self.medias[x] = (None, None) self.context.check_call_sdp(reinvite_event.sip_message.body, self.medias) self.context.accept(reinvite_event.sip_message) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) def remote_add(self): self.add_to_medias('audio') self.context.reinvite(self.medias) ca = self.q.expect('dbus-signal', signal='ContentAdded') content = self.add_content(ca.args[0], incoming=True) self.add_candidates(content.stream) content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) o = self.q.expect_many( EventPattern('sip-response', code=200), EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__)) acc = o[0] self.context.check_call_sdp(acc.sip_message.body, self.medias) self.context.ack(acc.sip_message) return content def remote_remove(self, index): self.medias[index] = (None, None) self.context.reinvite(self.medias) ca = self.q.expect('dbus-signal', signal='ContentRemoved') o = self.q.expect_many( EventPattern('sip-response', code=200)) acc = o[0] self.context.check_call_sdp(acc.sip_message.body, self.medias) self.context.ack(acc.sip_message) def during_call(self): self.add_content_succesful() self.add_content_succesful() self.add_content_rejected() self.add_content_succesful() self.remove_content_successful(1) self.add_content_succesful() self.remote_add() self.remote_remove(-1) self.add_content_succesful() self.remote_remove(-3) return calltest.CallTest.during_call(self) if __name__ == '__main__': calltest.run(klass=AddRemoveContent) telepathy-rakia-0.8.0/tests/twisted/voip/voip_test.py0000644000175000017500000001663512223047264017731 00000000000000 import dbus import uuid import re import twisted.protocols.sip from servicetest import ( make_channel_proxy, assertContains, ) import constants as cs class VoipTestContext(object): # Default audio codecs for the remote end audio_codecs = [ ('GSM', 3, 8000, {}), ('PCMA', 8, 8000, {}), ('PCMU', 0, 8000, {}) ] # Default video codecs for the remote end. I have no idea what's # a suitable value here... video_codecs = [ ('H264', 96, 90000, {}) ] # Default candidates for the remote end remote_candidates = [ (1, # Component "192.168.0.1", # ip 2222, # port {'protocol': cs.MEDIA_STREAM_BASE_PROTO_UDP, 'priority': 0}), (2, # Component "192.168.0.1", # ip 2223, # port {'protocol': cs.MEDIA_STREAM_BASE_PROTO_UDP, 'priority': 0}) ] _mline_template = 'm=%(mediatype)s %(port)s RTP/AVP %(codec_ids)s' _aline_template = 'a=rtpmap:%(codec_id)s %(name)s/%(rate)s' def __init__(self, q, conn, bus, sip_proxy, our_uri, peer): self.bus = bus self.conn = conn self.q = q self.our_uri = our_uri self.peer = peer self.peer_id = "sip:" + peer self.sip_proxy = sip_proxy self._cseq_id = 1 self.to = None def dbusify_codecs(self, codecs): dbussed_codecs = [ (id, name, rate, 1, False, params ) for (name, id, rate, params) in codecs ] return dbus.Array(dbussed_codecs, signature='(usuuba{ss})') def dbusify_codecs_with_params (self, codecs): return self.dbusify_codecs(codecs) def get_md_dbus(self, codecs, remote_contact): return dbus.Dictionary( {cs.CALL_CONTENT_MEDIA_DESCRIPTION + ".Codecs": self.dbusify_codecs(codecs), cs.CALL_CONTENT_MEDIA_DESCRIPTION + ".RemoteContact": dbus.UInt32(remote_contact)}, signature='sv') def get_audio_md_dbus(self, remote_contact): return self.get_md_dbus(self.audio_codecs, remote_contact) def get_video_md_dbus(self, remote_contact): return self.get_md_dbus(self.video_codecs, remote_contact) def get_remote_candidates_dbus(self): return dbus.Array(self.remote_candidates, signature='(usua{sv})') def get_call_sdp(self, medias): (component, ip, port, info) = self.remote_candidates[0] codec_id_list = [] codec_list = [] for name, codec_id, rate, _misc in self.audio_codecs: codec_list.append('a=rtpmap:%(codec_id)s %(name)s/%(rate)s' % locals()) codec_id_list.append(str(codec_id)) codec_ids = ' '.join(codec_id_list) codecs = '\r\n'.join(codec_list) sdp_string = 'v=0\r\n' + \ 'o=- 7047265765596858314 2813734028456100815 IN IP4 %(ip)s\r\n' + \ 's=-\r\n' + \ 't=0 0\r\n' for m in medias: if m[0]: sdp_string += 'm=' + m[0] + ' %(port)s RTP/AVP 3 8 0\r\n' \ 'c=IN IP4 %(ip)s\r\n' \ '%(codecs)s\r\n' if m[1]: sdp_string += 'a=' + m[1] + '\r\n' else: sdp_string += 'm=audio 0 RTP/AVP\r\n' return sdp_string % locals() def check_call_sdp(self, sdp_string, medias=[('audio', None)]): codec_id_list = [] for name, codec_id, rate, _misc in self.audio_codecs: assertContains (self._aline_template % locals(), sdp_string) codec_id_list.append(str(codec_id)) codec_ids = ' '.join(codec_id_list) (component, ip, port, info) = self.remote_candidates[0] pattern = '.*' for m in medias: if m[0]: mediatype = m[0] pattern += self._mline_template % locals() pattern += '.*' if m[1]: pattern += 'a=' + m[1] + '.*' else: pattern += 'm=audio 0 RTP/AVP .*' assert re.search(pattern, sdp_string, re.MULTILINE | re.DOTALL) def send_message(self, message_type, body='', to_=None, from_=None, **additional_headers): url = twisted.protocols.sip.parseURL('sip:testacc@127.0.0.1') msg = twisted.protocols.sip.Request(message_type, url) if body: msg.body = body msg.addHeader('content-length', '%d' % len(msg.body)) msg.addHeader('from', from_ or '<%s>;tag=XYZ' % self.peer_id) msg.addHeader('to', to_ or self.to or '') self._cseq_id += 1 additional_headers.setdefault('cseq', '%d %s' % (self._cseq_id, message_type)) for key, vals in additional_headers.items(): if not isinstance(vals, list): vals = [vals] k = key.replace('_', '-') for v in vals: msg.addHeader(k, v) via = self.sip_proxy.getVia() via.branch = 'z9hG4bKXYZ' msg.addHeader('via', via.toString()) _expire, destination = self.sip_proxy.registry.users['testacc'] self.sip_proxy.sendMessage(destination, msg) return msg def accept(self, invite_message, body=None): self.call_id = invite_message.headers['call-id'][0] if invite_message.headers['from'][0].find('tag='): self.to = invite_message.headers['from'][0] response = self.sip_proxy.responseFromRequest(200, invite_message) # Echo rakia's SDP back to it. It doesn't care. response.addHeader('content-type', 'application/sdp') response.body = body or invite_message.body response.addHeader('content-length', '%d' % len(response.body)) self.sip_proxy.deliverResponse(response) return response def pr_respond(self, invite_message, number): self.call_id = invite_message.headers['call-id'][0] response = self.sip_proxy.responseFromRequest(number, invite_message) self.sip_proxy.deliverResponse(response) return response def ack(self, ok_message): cseq = '%s ACK' % ok_message.headers['cseq'][0].split()[0] self.send_message('ACK', call_id=self.call_id, cseq=cseq) def reinvite(self, medias=[('audio', None)]): body = self.get_call_sdp(medias) return self.send_message('INVITE', body, content_type='application/sdp', supported='timer, 100rel', call_id=self.call_id) def incoming_call(self, medias=[('audio', None)]): self.call_id = uuid.uuid4().hex body = self.get_call_sdp(medias) return self.send_message('INVITE', body, content_type='application/sdp', supported='timer, 100rel', call_id=self.call_id) def incoming_call_from_self(self): self.call_id = uuid.uuid4().hex body = self.get_call_sdp([('audio', None)]) return self.send_message('INVITE', body, content_type='application/sdp', supported='timer, 100rel', call_id=self.call_id, from_='') def terminate(self): return self.send_message('BYE', call_id=self.call_id) def options_ping(self, q): self.send_message('OPTIONS', supported='timer, 100rel', call_id=self.call_id) acc = q.expect('sip-response', call_id=self.call_id, code=200, cseq='%s OPTIONS' % (self._cseq_id)) self.ack(acc.sip_message) telepathy-rakia-0.8.0/tests/twisted/voip/direction-change.py0000644000175000017500000007417412223047264021122 00000000000000import calltest import constants as cs from servicetest import ( EventPattern, call_async, ProxyWrapper, assertEquals, assertNotEquals, assertContains, assertLength, assertDoesNotContain ) class DirectionChange(calltest.CallTest): def __init__(self, *params): self.sending = True self.receiving = True calltest.CallTest.__init__(self, *params) def stop_sending(self, content): self.sending = False content.stream.SetSending(False) self.q.expect('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP], path=content.stream.__dbus_object_path__) content.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STOPPED) o = self.q.expect_many( EventPattern('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STOPPED], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='LocalSendingStateChanged', path=content.stream.__dbus_object_path__), EventPattern('sip-invite')) assertEquals(cs.CALL_SENDING_STATE_NONE, o[1].args[0]) assertEquals(self.self_handle, o[1].args[1][0]) reinvite_event = o[2] assertContains('a=recvonly', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body) body = reinvite_event.sip_message.body.replace( 'recvonly', self.receiving and 'sendonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) def start_sending(self, content): content.stream.SetSending(True) self.sending = True reinvite_event, lss = self.q.expect_many( EventPattern('sip-invite'), EventPattern('dbus-signal', signal='LocalSendingStateChanged', path=content.stream.__dbus_object_path__)) assertEquals(cs.CALL_SENDING_STATE_SENDING, lss.args[0]) assertEquals(self.self_handle, lss.args[1][0]) assertDoesNotContain('a=sendonly', reinvite_event.sip_message.body) if self.receiving: assertDoesNotContain('a=inactive', reinvite_event.sip_message.body) assertDoesNotContain('a=recvonly', reinvite_event.sip_message.body) else: self.context.check_call_sdp(reinvite_event.sip_message.body, [('audio','recvonly')]) self.context.check_call_sdp(reinvite_event.sip_message.body) self.context.accept(reinvite_event.sip_message) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), EventPattern('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START])) content.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) self.q.expect('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__) def stop_start_sending_user_requested(self, content): self.stop_sending(content) self.start_sending(content) def stop_start_sending_remote_requested(self, content): lss_event = [ EventPattern('dbus-signal', signal='LocalSendingStateChanged')] direction_events = [ EventPattern('dbus-signal', signal='SendingStateChanged'), EventPattern('dbus-signal', signal='ReceivingStateChanged'), ] self.stop_sending(content) self.q.forbid_events(lss_event) self.q.forbid_events(direction_events) self.context.reinvite([('audio', None, 'sendonly')]) acc = self.q.expect('sip-response', call_id=self.context.call_id, code=200) self.context.check_call_sdp(acc.sip_message.body, [('audio', None, 'recvonly')]) self.context.ack(acc.sip_message) self.q.unforbid_events(lss_event) self.context.reinvite([('audio',None, None)]) acc, lss = self.q.expect_many( EventPattern('sip-response', call_id=self.context.call_id, code=200), EventPattern('dbus-signal', signal='LocalSendingStateChanged')) assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, lss.args[0]) assertEquals(self.remote_handle, lss.args[1][0]) self.context.check_call_sdp(acc.sip_message.body, [('audio', None, 'recvonly')]) assertEquals(cs.CALL_STREAM_FLOW_STATE_STOPPED, content.stream.Properties.Get(cs.CALL_STREAM_IFACE_MEDIA, 'SendingState')) self.context.check_call_sdp(acc.sip_message.body) self.context.ack(acc.sip_message) self.q.unforbid_events(direction_events) self.start_sending(content) def reject_stop_receiving(self, content): content.stream.RequestReceiving(self.remote_handle, False) o = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__), EventPattern('sip-invite')) assertLength(0, o[1].args[2]) assertLength(1, o[1].args[0]) assertEquals(cs.CALL_SENDING_STATE_PENDING_STOP_SENDING, o[1].args[0][self.remote_handle]) assertEquals(self.self_handle, o[1].args[3][0]) assertEquals(cs.CALL_SCR_USER_REQUESTED, o[1].args[3][1]) reinvite_event = o[2] self.context.check_call_sdp(reinvite_event.sip_message.body, [('audio', None, 'sendonly')]) if self.sending: body = reinvite_event.sip_message.body.replace('sendonly', 'sendrecv') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) # Return to regular state invite_event = [EventPattern('sip-invite')] self.q.forbid_events(invite_event) content.stream.RequestReceiving(self.remote_handle, True) _ , o = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__, predicate=lambda e: self.remote_handle in e.args[0] and e.args[0][self.remote_handle] == cs.CALL_SENDING_STATE_PENDING_SEND)) assertLength(1, o.args[0]) assertLength(0, o.args[2]) assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, o.args[0][self.remote_handle]) assertEquals(self.self_handle, o.args[3][0]) assertEquals(cs.CALL_SCR_USER_REQUESTED, o.args[3][1]) self.context.options_ping(self.q) self.q.unforbid_events(invite_event) content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) _, reinvite_event = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__), EventPattern('sip-invite')) assertDoesNotContain('a=sendonly', reinvite_event.sip_message.body) assertDoesNotContain('a=recvonly', reinvite_event.sip_message.body) assertDoesNotContain('a=inactive', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body) self.context.accept(reinvite_event.sip_message) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] o = self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__)) assertLength(0, o[1].args[2]) assertLength(1, o[1].args[0]) assertEquals(cs.CALL_SENDING_STATE_SENDING, o[1].args[0][self.remote_handle]) def stop_receiving(self, content): self.receiving = False content.stream.RequestReceiving(self.remote_handle, False) o = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__), EventPattern('sip-invite')) assertLength(0, o[1].args[2]) assertLength(1, o[1].args[0]) assertEquals(cs.CALL_SENDING_STATE_PENDING_STOP_SENDING, o[1].args[0][self.remote_handle]) assertEquals(self.self_handle, o[1].args[3][0]) assertEquals(cs.CALL_SCR_USER_REQUESTED, o[1].args[3][1]) reinvite_event = o[2] self.context.check_call_sdp(reinvite_event.sip_message.body, [('audio', None, 'sendonly')]) body = reinvite_event.sip_message.body.replace( 'sendonly', self.sending and 'recvonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] o = self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__)) assertLength(1, o[1].args[0]) assertLength(0, o[1].args[2]) assertEquals(cs.CALL_SENDING_STATE_NONE, o[1].args[0][self.remote_handle]) #assertEquals(self.remote_handle, o[1].args[3][0]) #assertEquals(cs.CALL_SCR_USER_REQUESTED, o[1].args[3][1]) content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STOPPED) self.q.expect('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STOPPED], path=content.stream.__dbus_object_path__), def start_receiving(self, content, already_receiving=False): self.receiving = True content.stream.RequestReceiving(self.remote_handle, True) self.q.expect('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START], path=content.stream.__dbus_object_path__), content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) o = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__), EventPattern('sip-invite')) assertLength(0, o[1].args[2]) assertLength(1, o[1].args[0]) assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, o[1].args[0][self.remote_handle]) assertEquals(self.self_handle, o[1].args[3][0]) assertEquals(cs.CALL_SCR_USER_REQUESTED, o[1].args[3][1]) reinvite_event = o[2] assertDoesNotContain('a=sendonly', reinvite_event.sip_message.body) assertDoesNotContain('a=inactive', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body) self.context.accept(reinvite_event.sip_message) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] o = self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__)) assertLength(1, o[1].args[0]) assertLength(0, o[1].args[2]) assertEquals(cs.CALL_SENDING_STATE_SENDING, o[1].args[0][self.remote_handle]) #assertEquals(self.remote_handle, o[1].args[3][0]) #assertEquals(cs.CALL_SCR_USER_REQUESTED, o[1].args[3][1]) def stop_start_receiving_user_requested(self, content): self.stop_receiving(content) self.start_receiving(content) def reject_start_receiving(self, content): self.stop_receiving(content) content.stream.RequestReceiving(self.remote_handle, True) self.q.expect('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START], path=content.stream.__dbus_object_path__), content.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) o = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__), EventPattern('sip-invite')) assertLength(0, o[1].args[2]) assertLength(1, o[1].args[0]) assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, o[1].args[0][self.remote_handle]) assertEquals(self.self_handle, o[1].args[3][0]) assertEquals(cs.CALL_SCR_USER_REQUESTED, o[1].args[3][1]) reinvite_event = o[2] assertDoesNotContain('a=sendonly', reinvite_event.sip_message.body) assertDoesNotContain('a=inactive', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body) body = reinvite_event.sip_message.body + 'a=recvonly\r\r' self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq)) # Now let's restart receiving for real self.receiving = True self.context.reinvite() acc , rmb = self.q.expect_many( EventPattern('sip-response', code=200), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__, predicate=lambda e: e.args[0] == {self.remote_handle: cs.CALL_SENDING_STATE_SENDING})) self.context.check_call_sdp(acc.sip_message.body, self.medias) self.context.ack(acc.sip_message) def hold(self): self.chan.Hold.RequestHold(True) events = self.stream_dbus_signal_event ( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP]) events += self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP]) o = self.q.expect_many( EventPattern('sip-invite'), EventPattern('dbus-signal', signal='HoldStateChanged', args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]), *events) reinvite_event = o[0] for c in self.contents: c.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STOPPED) c.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STOPPED) events = self.stream_dbus_signal_event ( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STOPPED]) events += self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STOPPED]) self.q.expect_many( EventPattern('dbus-signal', signal='HoldStateChanged', args=[cs.HS_HELD, cs.HSR_REQUESTED]), *events) medias = map(lambda x: (x[0], x[1] == 'recvonly' and 'inactive' or 'sendonly'), self.medias) self.context.check_call_sdp(reinvite_event.sip_message.body, medias) body = reinvite_event.sip_message.body.replace('sendonly', 'recvonly') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) def unhold_fail(self, receiving=True): self.chan.Hold.RequestHold(False) events = self.stream_dbus_signal_event ( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START]) events += self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START]) o = self.q.expect_many( EventPattern('dbus-signal', signal='HoldStateChanged', args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]), *events) if receiving: self.contents[0].stream.Media.ReportReceivingFailure( cs.CALL_SCR_MEDIA_ERROR, "", "") events = self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP]) else: self.contents[0].stream.Media.ReportSendingFailure( cs.CALL_SCR_MEDIA_ERROR, "", "") events = self.stream_dbus_signal_event( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_STOP]) o = self.q.expect_many( EventPattern('dbus-signal', signal='HoldStateChanged', args=[cs.HS_PENDING_HOLD, cs.HSR_RESOURCE_NOT_AVAILABLE]), *events) def unhold_succeed(self): self.chan.Hold.RequestHold(False) events = self.stream_dbus_signal_event ( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START]) events += self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START]) o = self.q.expect_many( EventPattern('dbus-signal', signal='HoldStateChanged', args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]), *events) for c in self.contents: c.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) c.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) events = self.stream_dbus_signal_event ( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED]) events += self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED]) o = self.q.expect_many( EventPattern('sip-invite'), EventPattern('dbus-signal', signal='HoldStateChanged', args=[cs.HS_UNHELD, cs.HSR_REQUESTED]), *events) reinvite_event = o[0] medias = map(lambda x: (x[0], None), self.medias) assertDoesNotContain('a=sendonly', reinvite_event.sip_message.body) assertDoesNotContain('a=inactive', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body, medias) self.context.accept(reinvite_event.sip_message) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) def sending_failed(self, content): self.sending = False content.stream.Media.ReportSendingFailure( cs.CALL_SCR_MEDIA_ERROR, "", "sending error") o = self.q.expect_many( EventPattern('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STOPPED], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='LocalSendingStateChanged', path=content.stream.__dbus_object_path__, predicate=lambda e: e.args[0] == 0), EventPattern('sip-invite')) assertEquals(cs.CALL_SENDING_STATE_NONE, o[1].args[0]) assertEquals(self.self_handle, o[1].args[1][0]) reinvite_event = o[2] assertContains('a=recvonly', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body) body = reinvite_event.sip_message.body.replace( 'recvonly', self.receiving and 'sendonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) self.start_sending(content) def receiving_failed(self, content): self.receiving = False assert self.contents[0].stream.Properties.Get(cs.CALL_STREAM_IFACE_MEDIA, 'SendingState') == cs.CALL_STREAM_FLOW_STATE_STARTED content.stream.Media.ReportReceivingFailure( cs.CALL_SCR_MEDIA_ERROR, "", "receiving error") o = self.q.expect_many( EventPattern('dbus-signal', signal='ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STOPPED], path=content.stream.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMembersChanged', path=content.stream.__dbus_object_path__, predicate=lambda e: e.args[0] == {self.remote_handle: cs.CALL_SENDING_STATE_PENDING_STOP_SENDING}), EventPattern('sip-invite')) reinvite_event = o[2] assertContains('a=sendonly', reinvite_event.sip_message.body) self.context.check_call_sdp(reinvite_event.sip_message.body) body = reinvite_event.sip_message.body.replace( 'sendonly', self.sending and 'recvonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) self.start_receiving(content) def add_local_content_during_hold(self): media_unhold_events = [ EventPattern('dbus-signal', signal='SendingStateChanged'), EventPattern('dbus-signal', signal='ReceivingStateChanged')] self.q.forbid_events(media_unhold_events) content_path = self.chan.Call1.AddContent( "NewContent", cs.MEDIA_STREAM_TYPE_AUDIO, cs.MEDIA_STREAM_DIRECTION_BIDIRECTIONAL) self.q.expect('dbus-signal', signal='ContentAdded', args=[content_path]) content = self.bus.get_object (self.conn.bus_name, content_path) content_props = content.GetAll(cs.CALL_CONTENT) assertEquals(cs.CALL_DISPOSITION_NONE, content_props['Disposition']) assertEquals('NewContent', content_props['Name']) assertEquals(cs.MEDIA_STREAM_TYPE_AUDIO, content_props['Type']) assertLength(1, content_props['Streams']) tmpstream = self.bus.get_object (self.conn.bus_name, content_props['Streams'][0]) stream = ProxyWrapper (tmpstream, cs.CALL_STREAM, {'Media': cs.CALL_STREAM_IFACE_MEDIA}) stream_props = stream.Properties.GetAll(cs.CALL_STREAM) assertEquals(True, stream_props['CanRequestReceiving']) assertEquals( {self.remote_handle: cs.CALL_SENDING_STATE_PENDING_SEND}, stream_props['RemoteMembers']) assertEquals(cs.CALL_SENDING_STATE_SENDING, stream_props['LocalSendingState']) smedia_props = stream.Properties.GetAll( cs.CALL_STREAM_IFACE_MEDIA) assertEquals(cs.CALL_SENDING_STATE_NONE, smedia_props['SendingState']) assertEquals(cs.CALL_SENDING_STATE_NONE, smedia_props['ReceivingState']) mdo = content.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') md = self.bus.get_object (self.conn.bus_name, mdo[0]) md.Accept(self.context.get_audio_md_dbus( self.remote_handle)) self.add_candidates(stream) reinvite_event = self.q.expect('sip-invite') self.context.check_call_sdp(reinvite_event.sip_message.body, self.medias + [('audio', 'sendonly')]) body = reinvite_event.sip_message.body.replace( 'sendonly', self.receiving and 'recvonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) content.Remove() reinvite_event = self.q.expect('sip-invite') self.context.check_call_sdp(reinvite_event.sip_message.body, self.medias) body = reinvite_event.sip_message.body.replace( 'sendonly', self.receiving and 'recvonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) self.q.unforbid_events(media_unhold_events) def add_remote_content_during_hold(self): media_unhold_events = [ EventPattern('dbus-signal', signal='SendingStateChanged'), EventPattern('dbus-signal', signal='ReceivingStateChanged')] self.q.forbid_events(media_unhold_events) self.context.reinvite([('audio', 'recvonly'), ('audio', None)]) ca = self.q.expect('dbus-signal', signal='ContentAdded') content = self.bus.get_object (self.conn.bus_name, ca.args[0]) content_props = content.GetAll(cs.CALL_CONTENT) assertEquals(cs.CALL_DISPOSITION_NONE, content_props['Disposition']) assertEquals(cs.MEDIA_STREAM_TYPE_AUDIO, content_props['Type']) assertLength(1, content_props['Streams']) tmpstream = self.bus.get_object (self.conn.bus_name, content_props['Streams'][0]) stream = ProxyWrapper (tmpstream, cs.CALL_STREAM, {'Media': cs.CALL_STREAM_IFACE_MEDIA}) stream_props = stream.Properties.GetAll(cs.CALL_STREAM) assertEquals(True, stream_props['CanRequestReceiving']) assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, stream_props['LocalSendingState']) assertEquals( {self.remote_handle: cs.CALL_SENDING_STATE_SENDING}, stream_props['RemoteMembers']) smedia_props = stream.Properties.GetAll( cs.CALL_STREAM_IFACE_MEDIA) assertEquals(cs.CALL_SENDING_STATE_NONE, smedia_props['SendingState']) assertEquals(cs.CALL_SENDING_STATE_NONE, smedia_props['ReceivingState']) mdo = content.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') md = self.bus.get_object (self.conn.bus_name, mdo[0]) md.Accept(self.context.get_audio_md_dbus( self.remote_handle)) self.add_candidates(stream) acc = self.q.expect('sip-response', code=200) self.context.check_call_sdp( acc.sip_message.body, [('audio', 'sendonly'), ('audio', 'inactive')]) self.context.ack(acc.sip_message) content.Remove() reinvite_event = self.q.expect('sip-invite') self.context.check_call_sdp(reinvite_event.sip_message.body, self.medias) body = reinvite_event.sip_message.body.replace( 'sendonly', self.receiving and 'recvonly' or 'inactive') self.context.accept(reinvite_event.sip_message, body) ack_cseq = "%s ACK" % reinvite_event.cseq.split()[0] self.q.expect('sip-ack', cseq=ack_cseq) self.q.unforbid_events(media_unhold_events) def during_call(self): content = self.contents[0] remote_hold_event = [ EventPattern('dbus-signal', signal='CallStateChanged')] self.q.forbid_events(remote_hold_event) self.stop_start_sending_user_requested(content) self.stop_start_sending_remote_requested(content) self.stop_start_receiving_user_requested(content) self.running_check() self.reject_stop_receiving(content) self.stop_start_receiving_user_requested(content) self.reject_start_receiving(content) self.running_check() self.sending_failed(content) self.receiving_failed(content) self.running_check() direction_change_events = \ self.stream_dbus_signal_event('LocalSendingStateChanged') + \ self.stream_dbus_signal_event('RemoteMembersChanged') self.q.forbid_events(direction_change_events) self.hold() self.add_local_content_during_hold() self.add_remote_content_during_hold() self.unhold_fail(receiving=True) self.unhold_fail(receiving=False) self.unhold_succeed() self.q.unforbid_events(direction_change_events) self.q.unforbid_events(remote_hold_event) return calltest.CallTest.during_call(self) if __name__ == '__main__': calltest.run(klass=DirectionChange) telepathy-rakia-0.8.0/tests/twisted/voip/requestable-classes.py0000644000175000017500000000316312223047264021654 00000000000000""" Test Requestable channels classes """ import dbus from sofiatest import exec_test from servicetest import ( wrap_channel, EventPattern, call_async, ProxyWrapper, assertEquals, assertContains, assertLength, assertSameSets, assertNotEquals ) import constants as cs from voip_test import VoipTestContext def rccs(q, bus, conn, stream): """ Tests that the connection's RequestableChannelClasses for StreamedMedia are sane. """ conn.Connect() a = q.expect('dbus-signal', signal='StatusChanged', args=[cs.CONN_STATUS_CONNECTING, cs.CSR_REQUESTED]) a = q.expect('dbus-signal', signal='StatusChanged', args=[cs.CONN_STATUS_CONNECTED, cs.CSR_REQUESTED]) rccs = conn.Properties.Get(cs.CONN_IFACE_REQUESTS, 'RequestableChannelClasses') # Test Channel.Type.StreamedMedia media_classes = [ rcc for rcc in rccs if rcc[0][cs.CHANNEL_TYPE] == cs.CHANNEL_TYPE_CALL ] assertLength(2, media_classes) for media_class in media_classes: fixed, allowed = media_class assertEquals(cs.HT_CONTACT, fixed[cs.TARGET_HANDLE_TYPE]) assert fixed.has_key(cs.INITIAL_AUDIO) or fixed.has_key(cs.INITIAL_VIDEO) expected_allowed = [ cs.TARGET_ID, cs.TARGET_HANDLE, cs.INITIAL_VIDEO, cs.INITIAL_AUDIO, cs.INITIAL_VIDEO_NAME, cs.INITIAL_AUDIO_NAME, cs.INITIAL_TRANSPORT, cs.DTMF_INITIAL_TONES, ] allowed.sort() expected_allowed.sort() assertSameSets(expected_allowed, allowed) if __name__ == '__main__': exec_test(rccs) telepathy-rakia-0.8.0/tests/twisted/voip/ringing-queued.py0000644000175000017500000000267612223047264020640 00000000000000import calltest import constants as cs from servicetest import ( EventPattern, call_async, assertEquals, assertNotEquals, assertContains, assertLength, ) class RingingQueued(calltest.CallTest): def accept(self): if self.incoming: self.chan.Call1.SetQueued() o = self.q.expect_many( EventPattern('sip-response', call_id=self.context.call_id, code=182), EventPattern('dbus-signal', signal='CallStateChanged')) assertEquals(cs.CALL_STATE_INITIALISED, o[1].args[0]) assertEquals(cs.CALL_FLAG_LOCALLY_QUEUED, o[1].args[1]) self.chan.Call1.SetRinging() o = self.q.expect_many( EventPattern('sip-response', call_id=self.context.call_id, code=180), EventPattern('dbus-signal', signal='CallStateChanged')) assertEquals(cs.CALL_STATE_INITIALISED, o[1].args[0]) assertEquals(cs.CALL_FLAG_LOCALLY_RINGING, o[1].args[1]) else: # Send Ringing self.context.pr_respond(self.invite_event, 180) o = self.q.expect('dbus-signal', signal='CallMembersChanged') assertEquals(cs.CALL_MEMBER_FLAG_RINGING, o.args[0][self.remote_handle]) return calltest.CallTest.accept(self) if __name__ == '__main__': calltest.run(klass=RingingQueued) telepathy-rakia-0.8.0/tests/twisted/voip/calltest.py0000644000175000017500000005025312223047264017522 00000000000000import dbus from sofiatest import exec_test from servicetest import ( make_channel_proxy, wrap_channel, sync_dbus, EventPattern, call_async, ProxyWrapper, assertEquals, assertNotEquals, assertContains, assertLength, ) import constants as cs from voip_test import VoipTestContext class CallTest: def __init__(self, q, bus, conn, sip_proxy, incoming, audio=True, video=False, peer='foo@bar.com'): self.q = q self.bus = bus self.conn = conn self.sip_proxy = sip_proxy self.incoming = incoming self.peer = peer self.content_count = 0; if audio: self.content_count += 1 if incoming: self.initial_audio_content_name = 'initial_audio_' + str(self.content_count) else: self.initial_audio_content_name = 'initialaudio' else: self.initial_audio_content_name = None if video: self.content_count += 1 if incoming: self.initial_video_content_name = 'initial_video_' + str(self.content_count) else: self.initial_video_content_name = 'initialvideo' else: self.initial_video_content_name = None self.contents = [] self.medias = [] if self.initial_audio_content_name: self.add_to_medias('audio') if self.initial_video_content_name: self.add_to_medias('video') def add_to_medias(self, mediatype, direction=None): for i in range(0, len(self.medias)): if self.medias[i][1] == 0: self.medias[i] = (mediatype, direction) return self.medias += [(mediatype, direction)] def connect(self): self.conn.Connect() self.q.expect('dbus-signal', signal='StatusChanged', args=[0, 1]) self.context = VoipTestContext(self.q, self.conn, self.bus, self.sip_proxy, 'sip:testacc@127.0.0.1', self.peer) self.self_handle = self.conn.GetSelfHandle() self.remote_handle = self.conn.RequestHandles(1, [self.context.peer])[0] def check_channel_props(self, props, initial): assertEquals(cs.CHANNEL_TYPE_CALL, props[cs.CHANNEL_TYPE]) assertEquals(cs.HT_CONTACT, props[cs.CHANNEL + '.TargetHandleType']) assertEquals(self.remote_handle, props[cs.CHANNEL + '.TargetHandle']) if self.incoming: assertEquals(self.remote_handle, props[cs.CHANNEL + '.InitiatorHandle']) else: assertEquals(self.self_handle, props[cs.CHANNEL + '.InitiatorHandle']) if initial and self.initial_audio_content_name is not None: assertEquals(True, props[cs.CHANNEL_TYPE_CALL + '.InitialAudio']) assertEquals(self.initial_audio_content_name, props[cs.CHANNEL_TYPE_CALL + '.InitialAudioName']) else: assertEquals(False, props[cs.CHANNEL_TYPE_CALL + '.InitialAudio']) if initial and self.initial_video_content_name is not None: assertEquals(True, props[cs.CHANNEL_TYPE_CALL + '.InitialVideo']) assertEquals(self.initial_video_content_name, props[cs.CHANNEL_TYPE_CALL + '.InitialVideoName']) else: assertEquals(False, props[cs.CHANNEL_TYPE_CALL + '.InitialVideo']) assertEquals(True, props[cs.CHANNEL_TYPE_CALL + '.MutableContents']) assertEquals(False, props[cs.CHANNEL_TYPE_CALL + '.HardwareStreaming']) def check_endpoint(self, content, endpoint_path): endpoint = self.bus.get_object(self.conn.bus_name, endpoint_path) endpoint_props = endpoint.GetAll(cs.CALL_STREAM_ENDPOINT) assertEquals(('',''), endpoint_props['RemoteCredentials']) assertEquals(self.context.get_remote_candidates_dbus(), endpoint_props['RemoteCandidates']) assertLength(0, endpoint_props['EndpointState']) assertEquals(cs.CALL_STREAM_TRANSPORT_RAW_UDP, endpoint_props['Transport']) assertEquals(False, endpoint_props['IsICELite']) def __add_stream (self, content, stream_path, initial, incoming): tmpstream = self.bus.get_object (self.conn.bus_name, stream_path) content.stream = ProxyWrapper (tmpstream, cs.CALL_STREAM, {'Media': cs.CALL_STREAM_IFACE_MEDIA}) stream_props = content.stream.Properties.GetAll(cs.CALL_STREAM) assertEquals(True, stream_props['CanRequestReceiving']) if incoming: assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, stream_props['LocalSendingState']) else: assertEquals(cs.CALL_SENDING_STATE_SENDING, stream_props['LocalSendingState']) if incoming: assertEquals( {self.remote_handle: cs.CALL_SENDING_STATE_SENDING}, stream_props['RemoteMembers']) else: assertEquals( {self.remote_handle: cs.CALL_SENDING_STATE_PENDING_SEND}, stream_props['RemoteMembers']) smedia_props = content.stream.Properties.GetAll( cs.CALL_STREAM_IFACE_MEDIA) assertEquals(cs.CALL_SENDING_STATE_NONE, smedia_props['SendingState']) if initial: assertEquals(cs.CALL_SENDING_STATE_NONE, smedia_props['ReceivingState']) else: assertEquals(cs.CALL_SENDING_STATE_PENDING_SEND, smedia_props['ReceivingState']) assertEquals(cs.CALL_STREAM_TRANSPORT_RAW_UDP, smedia_props['Transport']) assertEquals([], smedia_props['LocalCandidates']) assertEquals(("",""), smedia_props['LocalCredentials']) assertEquals([], smedia_props['STUNServers']) assertEquals([], smedia_props['RelayInfo']) assertEquals(True, smedia_props['HasServerInfo']) if incoming: assertLength(1, smedia_props['Endpoints']) self.check_endpoint(content, smedia_props['Endpoints'][0]) else: assertEquals([], smedia_props['Endpoints']) assertEquals(False, smedia_props['ICERestartPending']) def get_md(self, content): if content.media_type == cs.MEDIA_STREAM_TYPE_AUDIO: return context.get_audio_md_dbus(self.remote_handle) elif content.media_type == cs.MEDIA_STREAM_TYPE_VIDEO: return context.get_video_md_dbus(self.remote_handle) else: assert False def add_content(self, content_path, initial = False, incoming = None): if initial: incoming = self.incoming else: assert incoming is not None content = self.bus.get_object (self.conn.bus_name, content_path) content_props = content.GetAll(cs.CALL_CONTENT) if initial: assertEquals(cs.CALL_DISPOSITION_INITIAL, content_props['Disposition']) if content_props['Type'] == cs.MEDIA_STREAM_TYPE_AUDIO: assertEquals(self.initial_audio_content_name, content_props['Name']) elif content_props['Type'] == cs.MEDIA_STREAM_TYPE_VIDEO: assertEquals(self.initial_video_content_name, content_props['Name']) else: assert Fale else: assertEquals(cs.CALL_DISPOSITION_NONE, content_props['Disposition']) content.media_type = content_props['Type'] cmedia_props = content.GetAll(cs.CALL_CONTENT_IFACE_MEDIA) assertLength(0, cmedia_props['RemoteMediaDescriptions']) assertLength(0, cmedia_props['LocalMediaDescriptions']) if incoming: assertNotEquals('/', cmedia_props['MediaDescriptionOffer'][0]) else: assertNotEquals('/', cmedia_props['MediaDescriptionOffer'][0]) assertEquals(cs.CALL_CONTENT_PACKETIZATION_RTP, cmedia_props['Packetization']) assertEquals(cs.CALL_SENDING_STATE_NONE, cmedia_props['CurrentDTMFState']) self.contents.append(content) self.__add_stream(content, content_props['Streams'][0], initial, incoming) if incoming: md = self.bus.get_object (self.conn.bus_name, cmedia_props['MediaDescriptionOffer'][0]) md.Accept(self.context.get_audio_md_dbus(self.remote_handle)) o = self.q.expect_many( EventPattern('dbus-signal', signal='MediaDescriptionOfferDone'), EventPattern('dbus-signal', signal='LocalMediaDescriptionChanged'), EventPattern('dbus-signal', signal='RemoteMediaDescriptionsChanged')) return content def check_call_properties(self, call_props): if self.incoming: assertEquals(cs.CALL_STATE_INITIALISED, call_props['CallState']) else: assertEquals(cs.CALL_STATE_PENDING_INITIATOR, call_props['CallState']) assertEquals(0, call_props['CallFlags']) assertEquals(False, call_props['HardwareStreaming']) assertEquals(True, call_props['MutableContents']) assertEquals(self.initial_audio_content_name is not None, call_props['InitialAudio']) assertEquals(self.initial_audio_content_name or "", call_props['InitialAudioName']) assertEquals(self.initial_video_content_name is not None, call_props['InitialVideo']) assertEquals(self.initial_video_content_name or "", call_props['InitialVideoName']) assertEquals(cs.CALL_STREAM_TRANSPORT_RAW_UDP, call_props['InitialTransport']) assertEquals({self.remote_handle: 0}, call_props['CallMembers']) assertLength(self.content_count, call_props['Contents']) def initiate(self): if self.incoming: self.context.incoming_call(self.medias) else: self.chan_path = self.conn.Requests.CreateChannel({ cs.CHANNEL_TYPE: cs.CHANNEL_TYPE_CALL, cs.TARGET_HANDLE_TYPE: cs.HT_CONTACT, cs.TARGET_HANDLE: self.remote_handle, cs.INITIAL_AUDIO: self.initial_audio_content_name is not None, cs.INITIAL_AUDIO_NAME: self.initial_audio_content_name or "", cs.INITIAL_VIDEO: self.initial_video_content_name is not None, cs.INITIAL_VIDEO_NAME: self.initial_video_content_name or "", })[0] nc = self.q.expect('dbus-signal', signal='NewChannels') assertLength(1, nc.args) assertLength(1, nc.args[0]) # one channel assertLength(2, nc.args[0][0]) # two struct members self.chan_path, props = nc.args[0][0] self.check_channel_props(props, True) self.chan = wrap_channel( self.bus.get_object(self.conn.bus_name, self.chan_path), 'Call1', ['Hold']) call_props = self.chan.Properties.GetAll(cs.CHANNEL_TYPE_CALL) self.check_call_properties(call_props) for c in call_props['Contents']: self.add_content(c, True) if not self.incoming: self.chan.Call1.Accept() self.q.expect_many( *self.stream_dbus_signal_event('ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START])) for c in self.contents: c.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) mdo = c.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') md = self.bus.get_object (self.conn.bus_name, mdo[0]) md.Accept(self.context.get_audio_md_dbus( self.remote_handle)) self.q.expect_many( EventPattern('dbus-signal', signal='MediaDescriptionOfferDone', path=c.__dbus_object_path__), EventPattern('dbus-signal', signal='LocalMediaDescriptionChanged', path=c.__dbus_object_path__), EventPattern('dbus-signal', signal='RemoteMediaDescriptionsChanged', path=c.__dbus_object_path__)) mdo = c.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') assertEquals(('/', {}), mdo) self.add_candidates(c.stream) self.invite_event = self.q.expect('sip-invite') def content_dbus_signal_event(self, s, **kwparams): return map( lambda c: EventPattern('dbus-signal', signal=s, path=c.__dbus_object_path__, **kwparams), self.contents) def stream_dbus_signal_event(self, s, **kwparams): return map( lambda c: EventPattern('dbus-signal', signal=s, path=c.stream.__dbus_object_path__, **kwparams), self.contents) def add_candidates(self, stream): stream.Media.AddCandidates(self.context.get_remote_candidates_dbus()) stream.Media.FinishInitialCandidates() self.q.expect('dbus-signal', signal='LocalCandidatesAdded', path=stream.__dbus_object_path__) def accept_incoming(self): if not self.incoming: return self.chan.Call1.Accept() events = self.stream_dbus_signal_event( 'ReceivingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START]) + \ self.stream_dbus_signal_event( 'SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_PENDING_START]) o = self.q.expect_many( EventPattern('dbus-signal', signal='CallStateChanged'), EventPattern('dbus-signal', signal='CallStateChanged'), *events) assertEquals(cs.CALL_STATE_ACCEPTED, o[0].args[0]) assertEquals(cs.CALL_STATE_ACTIVE, o[1].args[0]) for c in self.contents: c.stream.Media.CompleteReceivingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) #self.q.expect('dbus-signal', signal='ReceivingStateChanged', # args=[cs.CALL_STREAM_FLOW_STATE_STARTED], # path=c.stream.__dbus_object_path__) self.q.expect_many( *self.stream_dbus_signal_event( 'LocalSendingStateChanged', predicate=lambda e: cs.CALL_SENDING_STATE_SENDING == e.args[0])) for c in self.contents: c.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) self.q.expect('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=c.stream.__dbus_object_path__) self.add_candidates(c.stream) acc = self.q.expect('sip-response', call_id=self.context.call_id, code=200) self.context.check_call_sdp(acc.sip_message.body, self.medias) self.context.ack(acc.sip_message) def accept_outgoing(self): if self.incoming: return self.context.check_call_sdp(self.invite_event.sip_message.body, self.medias) self.context.accept(self.invite_event.sip_message) ack_cseq = "%s ACK" % self.invite_event.cseq.split()[0] del self.invite_event events = self.content_dbus_signal_event('NewMediaDescriptionOffer') + \ self.stream_dbus_signal_event('EndpointsChanged') o = self.q.expect_many( EventPattern('sip-ack', cseq=ack_cseq), # Call accepted *events) for i in o: if i.type != 'dbus-signal' or \ i.signal != 'NewMediaDescriptionOffer': continue md = self.bus.get_object (self.conn.bus_name, i.args[0]) md.Accept(self.context.get_audio_md_dbus(self.remote_handle)) o = self.q.expect_many( # Call accepted EventPattern('dbus-signal', signal='CallStateChanged')) assertEquals(cs.CALL_STATE_ACCEPTED, o[0].args[0]) for c in self.contents: mdo = c.Get(cs.CALL_CONTENT_IFACE_MEDIA, 'MediaDescriptionOffer') assertEquals(('/', {}), mdo) for c in self.contents: c.stream.Media.CompleteSendingStateChange( cs.CALL_STREAM_FLOW_STATE_STARTED) self.q.expect('dbus-signal', signal='SendingStateChanged', args=[cs.CALL_STREAM_FLOW_STATE_STARTED], path=c.stream.__dbus_object_path__) for i in o: if i.type == 'dbus-signal' and i.signal == 'EndpointsChanged': assertLength(1, i.args[0]) assertLength(0, i.args[1]) self.check_endpoint(c, i.args[0][0]) def accept(self): if self.incoming: self.accept_incoming() else: self.accept_outgoing() def running_check(self): self.context.options_ping(self.q) sync_dbus(self.bus, self.q, self.conn) for c in self.contents: props = c.stream.Properties.GetAll(cs.CALL_STREAM) assertEquals(cs.CALL_SENDING_STATE_SENDING, props['LocalSendingState']) assertEquals({self.remote_handle: cs.CALL_SENDING_STATE_SENDING}, props['RemoteMembers']) props = c.stream.Properties.GetAll(cs.CALL_STREAM_IFACE_MEDIA) assertEquals(cs.CALL_STREAM_FLOW_STATE_STARTED, props['SendingState']) assertEquals(cs.CALL_STREAM_FLOW_STATE_STARTED, props['ReceivingState']) def hangup(self): if self.incoming: bye_msg = self.context.terminate() o = self.q.expect_many( EventPattern('dbus-signal', signal='CallStateChanged', path=self.chan_path), EventPattern('sip-response', cseq=bye_msg.headers['cseq'][0])) assertEquals(cs.CALL_STATE_ENDED, o[0].args[0]) assertEquals(0, o[0].args[1]) assertEquals(self.remote_handle, o[0].args[2][0]) else: self.chan.Call1.Hangup(cs.CALL_SCR_USER_REQUESTED, "", "User hangs up") ended_event, bye_event = self.q.expect_many( EventPattern('dbus-signal', signal='CallStateChanged'), EventPattern('sip-bye', call_id=self.context.call_id)) # Check that we're the actor assertEquals(cs.CALL_STATE_ENDED, ended_event.args[0]) assertEquals(0, ended_event.args[1]) assertEquals((self.self_handle, cs.CALL_SCR_USER_REQUESTED, "", "User hangs up"), ended_event.args[2]) # For completeness, reply to the BYE. bye_response = self.sip_proxy.responseFromRequest( 200, bye_event.sip_message) self.sip_proxy.deliverResponse(bye_response) def during_call(self): pass def run(self): self.connect() self.initiate() self.accept() self.running_check() self.during_call() self.hangup() self.chan.Close() def run_call_test(q, bus, conn, sip_proxy, incoming=False, klass=CallTest, **params): test = klass(q, bus, conn, sip_proxy, incoming, **params) test.run() def run(**params): exec_test(lambda q, b, c, s: run_call_test(q, b, c, s, incoming=True, **params)) exec_test(lambda q, b, c, s: run_call_test(q, b, c, s, incoming=False, **params)) if __name__ == '__main__': run() run(peer='foo@sip.bar.com') run(video=True) run(video=True,audio=False) telepathy-rakia-0.8.0/tests/twisted/run-test.sh.in0000644000175000017500000000307612223047264017103 00000000000000#!/bin/sh if test "x$RAKIA_TEST_UNINSTALLED" = x; then script_fullname=`readlink -e "@rakiatestsdir@/twisted/run-test.sh"` if [ `readlink -e "$0"` != "$script_fullname" ] ; then echo "This script is meant to be installed at $script_fullname" >&2 exit 1 fi test_src="@rakiatestsdir@" test_build="@rakiatestsdir@" config_file="@rakiatestsdir@/twisted/tools/tmp-session-bus.conf" PYTHONPATH="@rakiatestsdir@/twisted" export PYTHONPATH RAKIA_TWISTED_PATH="@rakiatestsdir@/twisted" export RAKIA_TWISTED_PATH else if test -z "$RAKIA_ABS_TOP_SRCDIR"; then echo "RAKIA_ABS_TOP_SRCDIR must be set" >&2 exit 1 fi if test -z "$RAKIA_ABS_TOP_BUILDDIR"; then echo "RAKIA_ABS_TOP_BUILDDIR must be set" >&2 exit 1 fi test_src="${RAKIA_ABS_TOP_SRCDIR}/tests" test_build="${RAKIA_ABS_TOP_BUILDDIR}/tests" config_file="${test_build}/twisted/tools/tmp-session-bus.conf" PYTHONPATH="${test_src}/twisted:${test_build}/twisted" export PYTHONPATH RAKIA_TWISTED_PATH="${test_src}/twisted" export RAKIA_TWISTED_PATH fi if [ -n "$1" ] ; then list="$1" else list=$(cat "${test_build}"/twisted/rakia-twisted-tests.list) fi any_failed=0 for i in $list ; do echo "Testing $i ..." sh "${test_src}/twisted/tools/with-session-bus.sh" \ ${RAKIA_TEST_SLEEP} \ --config-file="${config_file}" \ -- \ @TEST_PYTHON@ -u "${test_src}/twisted/$i" e=$? case "$e" in (0) echo "PASS: $i" ;; (77) echo "SKIP: $i" ;; (*) any_failed=1 echo "FAIL: $i ($e)" ;; esac done exit $any_failed telepathy-rakia-0.8.0/tests/twisted/test-register.py0000644000175000017500000000070212223047264017525 00000000000000""" Test connecting to a server (successful REGISTER). """ from sofiatest import exec_test def test(q, bus, conn, sip): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[1, 1]) q.expect('dbus-signal', signal='StatusChanged', args=[0, 1]) conn.Disconnect() q.expect('dbus-signal', signal='StatusChanged', args=[2, 1]) return True if __name__ == '__main__': exec_test(test, params={"password": None}) telepathy-rakia-0.8.0/tests/twisted/tools/0000755000175000017500000000000012223050363015565 500000000000000telepathy-rakia-0.8.0/tests/twisted/tools/with-session-bus.sh0000644000175000017500000000505212223047264021274 00000000000000#!/bin/sh # with-session-bus.sh - run a program with a temporary D-Bus session daemon # # The canonical location of this program is the telepathy-glib tools/ # directory, please synchronize any changes with that copy. # # Copyright (C) 2007-2008 Collabora Ltd. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. set -e me=with-session-bus dbus_daemon_args="--print-address=5 --print-pid=6 --fork" sleep=0 usage () { echo "usage: $me [options] -- program [program_options]" >&2 echo "Requires write access to the current directory." >&2 echo "" >&2 echo "If \$WITH_SESSION_BUS_FORK_DBUS_MONITOR is set, fork dbus-monitor" >&2 echo "with the arguments in \$WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT." >&2 echo "The output of dbus-monitor is saved in $me-.dbus-monitor-logs" >&2 exit 2 } while test "z$1" != "z--"; do case "$1" in --sleep=*) sleep="$1" sleep="${sleep#--sleep=}" shift ;; --session) dbus_daemon_args="$dbus_daemon_args --session" shift ;; --config-file=*) # FIXME: assumes config file doesn't contain any special characters dbus_daemon_args="$dbus_daemon_args $1" shift ;; *) usage ;; esac done shift if test "z$1" = "z"; then usage; fi exec 5> $me-$$.address exec 6> $me-$$.pid cleanup () { pid=`head -n1 $me-$$.pid` if test -n "$pid" ; then if [ -n "$VERBOSE_TESTS" ]; then echo "Killing temporary bus daemon: $pid" >&2 fi kill -INT "$pid" fi rm -f $me-$$.address rm -f $me-$$.pid } trap cleanup INT HUP TERM dbus-daemon $dbus_daemon_args if [ -n "$VERBOSE_TESTS" ]; then { echo -n "Temporary bus daemon is "; cat $me-$$.address; } >&2 { echo -n "Temporary bus daemon PID is "; head -n1 $me-$$.pid; } >&2 fi e=0 # These might be non-null when run from e.g. gnome-terminal 3.8, which uses # an activatable service for its windows; we don't want to inherit them either unset DBUS_STARTER_ADDRESS unset DBUS_STARTER_BUS_TYPE DBUS_SESSION_BUS_ADDRESS="`cat $me-$$.address`" export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID="`cat $me-$$.pid`" export DBUS_SESSION_BUS_PID if [ -n "$WITH_SESSION_BUS_FORK_DBUS_MONITOR" ] ; then echo -n "Forking dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT" >&2 dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT \ > $me-$$.dbus-monitor-logs 2>&1 & fi "$@" || e=$? if test $sleep != 0; then sleep $sleep fi trap - INT HUP TERM cleanup exit $e telepathy-rakia-0.8.0/tests/twisted/tools/exec-with-log.sh.in0000644000175000017500000000120512223047264021126 00000000000000#!/bin/sh cd "@abs_top_builddir@/tests/twisted/tools" export RAKIA_DEBUG=all export TPORT_LOG=1 G_MESSAGES_DEBUG=all export G_MESSAGES_DEBUG ulimit -c unlimited exec > rakia-testing.log 2>&1 if test -n "$RAKIA_TEST_VALGRIND"; then export G_DEBUG=gc-friendly export G_SLICE=always-malloc RAKIA_WRAPPER="valgrind --leak-check=full" # RAKIA_WRAPPER="$RAKIA_WRAPPER --gen-suppressions=all" RAKIA_WRAPPER="$RAKIA_WRAPPER --suppressions=@abs_top_srcdir@/tests/suppressions/tp-glib.supp" RAKIA_WRAPPER="$RAKIA_WRAPPER --suppressions=@abs_top_srcdir@/tests/suppressions/rakia.supp" fi exec $RAKIA_WRAPPER @abs_top_builddir@/src/telepathy-rakia telepathy-rakia-0.8.0/tests/twisted/tools/Makefile.in0000644000175000017500000003424212223050267017562 00000000000000# Makefile.in generated by automake 1.14 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/twisted/tools DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/as-version.m4 \ $(top_srcdir)/m4/compiler.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/tp-compiler-flag.m4 \ $(top_srcdir)/m4/tp-compiler-warnings.m4 \ $(top_srcdir)/m4/tp-linker-flag.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPHB_CFLAGS = @IPHB_CFLAGS@ IPHB_LIBS = @IPHB_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOFIA_SIP_UA_CFLAGS = @SOFIA_SIP_UA_CFLAGS@ SOFIA_SIP_UA_LIBS = @SOFIA_SIP_UA_LIBS@ STRIP = @STRIP@ TELEPATHY_GLIB_CFLAGS = @TELEPATHY_GLIB_CFLAGS@ TELEPATHY_GLIB_LIBS = @TELEPATHY_GLIB_LIBS@ TELEPATHY_SIP_VERSION = @TELEPATHY_SIP_VERSION@ TELEPATHY_SIP_VERSION_MAJOR = @TELEPATHY_SIP_VERSION_MAJOR@ TELEPATHY_SIP_VERSION_MICRO = @TELEPATHY_SIP_VERSION_MICRO@ TELEPATHY_SIP_VERSION_MINOR = @TELEPATHY_SIP_VERSION_MINOR@ TELEPATHY_SIP_VERSION_NANO = @TELEPATHY_SIP_VERSION_NANO@ TELEPATHY_SIP_VERSION_RELEASE = @TELEPATHY_SIP_VERSION_RELEASE@ VERSION = @VERSION@ XSLTPROC = @XSLTPROC@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # D-Bus service file for testing service_in_files = sofiasip.service.in service_files = org.freedesktop.Telepathy.ConnectionManager.sofiasip.service # D-Bus config file for testing conf_in_files = tmp-session-bus.conf.in conf_files = $(conf_in_files:.conf.in=.conf) BUILT_SOURCES = $(service_files) $(conf_files) exec-with-log.sh EXTRA_DIST = \ $(service_in_files) \ $(conf_in_files) \ exec-with-log.sh.in \ with-session-bus.sh CLEANFILES = \ $(BUILT_SOURCES) \ rakia-testing.log all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/twisted/tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/twisted/tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am exec-with-log.sh: exec-with-log.sh.in sed -e "s|[@]abs_top_builddir[@]|@abs_top_builddir@|g" \ -e "s|[@]abs_top_srcdir[@]|@abs_top_srcdir@|g" $< > $@ chmod +x $@ %.conf: %.conf.in sed -e "s|[@]abs_top_builddir[@]|@abs_top_builddir@|g" $< > $@ # We don't use the full filename for the .in because > 99 character filenames # in tarballs are non-portable (and automake 1.8 doesn't let us build # non-archaic tarballs) org.freedesktop.Telepathy.ConnectionManager.%.service: %.service.in sed -e "s|[@]abs_top_builddir[@]|@abs_top_builddir@|g" $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: telepathy-rakia-0.8.0/tests/twisted/tools/tmp-session-bus.conf.in0000644000175000017500000000157712223047264022051 00000000000000 session unix:tmpdir=/tmp @abs_top_builddir@/tests/twisted/tools telepathy-rakia-0.8.0/tests/twisted/tools/sofiasip.service.in0000644000175000017500000000020712223047264021316 00000000000000[D-BUS Service] Name=org.freedesktop.Telepathy.ConnectionManager.sofiasip Exec=@abs_top_builddir@/tests/twisted/tools/exec-with-log.sh telepathy-rakia-0.8.0/tests/twisted/tools/Makefile.am0000644000175000017500000000203312223047264017545 00000000000000exec-with-log.sh: exec-with-log.sh.in sed -e "s|[@]abs_top_builddir[@]|@abs_top_builddir@|g" \ -e "s|[@]abs_top_srcdir[@]|@abs_top_srcdir@|g" $< > $@ chmod +x $@ %.conf: %.conf.in sed -e "s|[@]abs_top_builddir[@]|@abs_top_builddir@|g" $< > $@ # We don't use the full filename for the .in because > 99 character filenames # in tarballs are non-portable (and automake 1.8 doesn't let us build # non-archaic tarballs) org.freedesktop.Telepathy.ConnectionManager.%.service: %.service.in sed -e "s|[@]abs_top_builddir[@]|@abs_top_builddir@|g" $< > $@ # D-Bus service file for testing service_in_files = sofiasip.service.in service_files = org.freedesktop.Telepathy.ConnectionManager.sofiasip.service # D-Bus config file for testing conf_in_files = tmp-session-bus.conf.in conf_files = $(conf_in_files:.conf.in=.conf) BUILT_SOURCES = $(service_files) $(conf_files) exec-with-log.sh EXTRA_DIST = \ $(service_in_files) \ $(conf_in_files) \ exec-with-log.sh.in \ with-session-bus.sh CLEANFILES = \ $(BUILT_SOURCES) \ rakia-testing.log telepathy-rakia-0.8.0/tests/twisted/test-self-alias.py0000644000175000017500000000456712223047264017736 00000000000000# # Test alias setting for the self handle # from sofiatest import exec_test from servicetest import tp_name_prefix import dbus TEXT_TYPE = tp_name_prefix + '.Channel.Type.Text' ALIASING_INTERFACE = tp_name_prefix + '.Connection.Interface.Aliasing' CONTACTS_INTERFACE = tp_name_prefix + '.Connection.Interface.Contacts' def test(q, bus, conn, sip_proxy): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[0, 1]) self_handle = conn.GetSelfHandle() default_alias = conn.Aliasing.GetAliases([self_handle])[self_handle] conn.Aliasing.SetAliases({self_handle: 'foo@bar.baz'}) event = q.expect('dbus-signal', signal='AliasesChanged', args=[[(self_handle, u'foo@bar.baz')]]) handle = conn.RequestHandles(1, ['sip:user@somewhere.com'])[0] assert ALIASING_INTERFACE in \ conn.Properties.Get(CONTACTS_INTERFACE, "ContactAttributeInterfaces") attrs = conn.Contacts.GetContactAttributes([self_handle, handle], [ALIASING_INTERFACE], False) assert ALIASING_INTERFACE + "/alias" in attrs[self_handle] assert attrs[self_handle][ALIASING_INTERFACE + "/alias"] == u'foo@bar.baz' conn.RequestChannel(TEXT_TYPE, 1, handle, True) event = q.expect('dbus-signal', signal='NewChannel') text_iface = dbus.Interface(bus.get_object(conn.bus_name, event.args[0]), TEXT_TYPE) text_iface.Send(0, 'Check the display name in From') event = q.expect('sip-message') self_uri = conn.InspectHandles(1, [self_handle])[0] from_header = event.sip_message.headers['from'][0] assert from_header.startswith('"foo@bar.baz" <' + self_uri + '>'), from_header # Test setting of the default alias conn.Aliasing.SetAliases({self_handle: default_alias}) text_iface.Send(0, 'The display name should be missing in From') event = q.expect('sip-message') from_header = event.sip_message.headers['from'][0] assert from_header.startswith('<' + self_uri + '>'), from_header # Test if escaping and whitespace normalization works conn.Aliasing.SetAliases({self_handle: 'foo " bar \\\r\n baz\t'}) text_iface.Send(0, 'Check display name escaping in From') event = q.expect('sip-message') from_header = event.sip_message.headers['from'][0] assert from_header.startswith(r'"foo \" bar \\ baz " <' + self_uri + '>'), from_header if __name__ == '__main__': exec_test(test) telepathy-rakia-0.8.0/tests/twisted/Makefile.am0000644000175000017500000000404412223047264016411 00000000000000NULL = TWISTED_TESTS = \ cm/protocol.py \ test-register.py \ test-register-fail.py \ test-register-sasl.py \ test-debug.py \ test-handle-normalisation.py \ test-message.py \ test-self-alias.py \ text/initiate-requestotron.py \ voip/calltest.py \ voip/ringing-queued.py \ voip/requestable-classes.py \ voip/direction-change.py \ voip/add-remove-content.py \ $(NULL) check-local: check-coding-style check-twisted CHECK_TWISTED_SLEEP=0 check-twisted: $(BUILT_SOURCES) $(MAKE) -C tools if test "x$(CHECK_TWISTED_SLEEP)" = x0; then \ rakia_test_sleep= ; \ else \ rakia_test_sleep=--sleep=$(CHECK_TWISTED_SLEEP); \ fi; \ RAKIA_TEST_UNINSTALLED=1 \ RAKIA_ABS_TOP_SRCDIR=@abs_top_srcdir@ \ RAKIA_ABS_TOP_BUILDDIR=@abs_top_builddir@ \ RAKIA_TEST_SLEEP=$$rakia_test_sleep \ ./run-test.sh "$(TWISTED_TESTS)" if ENABLE_DEBUG DEBUGGING_PYBOOL = True else DEBUGGING_PYBOOL = False endif config.py: Makefile $(AM_V_GEN) { \ echo "PACKAGE_STRING = \"$(PACKAGE_STRING)\""; \ echo "DEBUGGING = $(DEBUGGING_PYBOOL)"; \ } > $@ rakia-twisted-tests.list: Makefile $(AM_V_GEN)echo $(TWISTED_TESTS) > $@ BUILT_SOURCES = \ config.py \ rakia-twisted-tests.list \ run-test.sh \ $(NULL) # We don't really use rakiatestsdir yet - we only support uninstalled testing # so far - but I'm substituting it to keep the script more similar to Gabble's. # ${pkglibexecdir}/tests is what GNOME's InstalledTests goal recommends. # # Similarly, Gabble supports TEST_PYTHON differing from PYTHON for historical # reasons, but we don't do that here. run-test.sh: run-test.sh.in Makefile $(AM_V_GEN)sed \ -e 's![@]rakiatestsdir[@]!${pkglibexecdir}/tests!' \ -e 's![@]TEST_PYTHON[@]!$(PYTHON)!' \ < $< > $@.tmp && \ chmod +x $@.tmp && \ mv $@.tmp $@ EXTRA_DIST = \ $(TWISTED_TESTS) \ constants.py \ run-test.sh.in \ sofiatest.py \ servicetest.py \ voip/voip_test.py CLEANFILES = \ $(BUILT_SOURCES) \ rakia-[1-9]*.log \ *.pyc \ */*.pyc \ $(NULL) check_misc_sources = $(TESTS) include $(top_srcdir)/tools/check-coding-style.mk SUBDIRS = tools telepathy-rakia-0.8.0/tests/twisted/test-handle-normalisation.py0000644000175000017500000000315412223047264022015 00000000000000from servicetest import assertEquals from sofiatest import exec_test import dbus import constants as cs def test(q, bus, conn, sip): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[cs.CONN_STATUS_CONNECTING, cs.CSR_REQUESTED]) q.expect('dbus-signal', signal='StatusChanged', args=[cs.CONN_STATUS_CONNECTED, cs.CSR_REQUESTED]) tests = [ ('sip:test@localhost', 'sip:test@localhost'), ('test@localhost', 'sip:test@localhost'), ('test', 'sip:test@127.0.0.1'), ('123456789', 'sip:123456789@127.0.0.1'), ('+123 45-67-89', 'sip:+123456789@127.0.0.1'), ('(123)\t45.67.89', 'sip:123456789@127.0.0.1'), ('gt:someone@gmail.com', 'gt:someone@gmail.com'), ('SIP:User:PaSS@HoSt;Param=CaseMattersHere', 'sip:User:PaSS@host;Param=CaseMattersHere'), ('weird\t\n\1\2user', 'sip:weird%09%0A%01%02user@127.0.0.1'), ('sip:%61%61%61%61@127.0.0.1', 'sip:aaaa@127.0.0.1'), ("-.!~*'()&=+$,?;/\1", "sip:-.!~*'()&=+$,?;/%01@127.0.0.1"), ('sip:0x0weir-d0.example.com', 'sip:0x0weir-d0.example.com'), ('sip:user@123.45.67.8', 'sip:user@123.45.67.8')] # TODO: test the wrong strings too orig = [ x[0] for x in tests ] expect = [ x[1] for x in tests ] handles = conn.RequestHandles(1, orig) names = conn.InspectHandles(1, handles) for a,b in zip(expect, names): assertEquals(a, b) conn.Disconnect() q.expect('dbus-signal', signal='StatusChanged', args=[cs.CONN_STATUS_DISCONNECTED, cs.CSR_REQUESTED]) if __name__ == '__main__': exec_test(test) telepathy-rakia-0.8.0/tests/twisted/test-message.py0000644000175000017500000002055612223047264017336 00000000000000# -*- coding: utf-8 -*- from servicetest import (tp_name_prefix, tp_path_prefix, unwrap, assertSameSets) from sofiatest import go, exec_test import constants as cs import twisted.protocols.sip import dbus import email.utils import time import uuid # Test message channels CHANNEL = tp_name_prefix + '.Channel' TEXT_TYPE = tp_name_prefix + '.Channel.Type.Text' FROM_URL = 'sip:other.user@somewhere.else.com' def test_new_channel(q, bus, conn, target_uri, initiator_uri, requested): event = q.expect('dbus-signal', signal='NewChannel') assert (event.args[1] == TEXT_TYPE and event.args[2] == 1) handle = event.args[3] obj = bus.get_object(conn._named_service, event.args[0]) initiator_handle = conn.RequestHandles(1, [initiator_uri])[0] text_props = obj.GetAll(CHANNEL, dbus_interface='org.freedesktop.DBus.Properties') assert text_props['ChannelType'] == TEXT_TYPE, text_props assert 'Interfaces' in text_props, text_props assertSameSets((cs.CHANNEL_IFACE_MESSAGES, cs.CHANNEL_IFACE_DESTROYABLE), text_props['Interfaces']) assert 'TargetHandle' in text_props, text_props assert text_props['TargetHandle'] == handle, \ (text_props, handle) assert 'TargetHandleType' in text_props, text_props assert text_props['TargetHandleType'] == 1, text_props assert text_props['TargetID'] == target_uri, text_props assert text_props['InitiatorHandle'] == initiator_handle, \ (text_props, initiator_handle) assert text_props['InitiatorID'] == initiator_uri, \ (text_props, initiator_uri) assert 'Requested' in text_props, text_props assert text_props['Requested'] == requested, text_props if initiator_handle != handle: conn.ReleaseHandles(1, [initiator_handle]) return obj, handle def test(q, bus, conn, sip): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[0, 1]) self_handle = conn.GetSelfHandle() self_uri = conn.InspectHandles(1, [self_handle])[0] contact = 'sip:user@somewhere.com' handle = conn.RequestHandles(1, [contact])[0] chan = conn.RequestChannel(TEXT_TYPE, 1, handle, True) requested_obj, target_handle = test_new_channel (q, bus, conn, target_uri=contact, initiator_uri=self_uri, requested=True) assert requested_obj.object_path == chan, requested_obj.object_path assert target_handle == handle, (target_handle, handle) iface = dbus.Interface(requested_obj, TEXT_TYPE) iface.Send(0, 'Hello') event = q.expect('sip-message', uri='sip:user@somewhere.com', body='Hello') sip.deliverResponse(sip.responseFromRequest(404, event.sip_message)) q.expect('dbus-signal', signal='SendError') iface.Send(0, 'Hello Again') event = q.expect('sip-message', uri='sip:user@somewhere.com', body='Hello Again') sip.deliverResponse(sip.responseFromRequest(200, event.sip_message)) ua_via = twisted.protocols.sip.parseViaHeader(event.headers['via'][0]) conn.ReleaseHandles(1, [handle]) call_id = 'XYZ@localhost' send_message(sip, ua_via, 'Hi', call_id=call_id, time=1234567890) incoming_obj, handle = test_new_channel (q, bus, conn, target_uri=FROM_URL, initiator_uri=FROM_URL, requested=False) iface = dbus.Interface(incoming_obj, TEXT_TYPE) name = conn.InspectHandles(1, [handle])[0] assert name == FROM_URL event = q.expect('dbus-signal', signal='MessageReceived') msg = event.args[0] now = time.time() assert msg[0]['message-token'] == "%s;cseq=%u" % (call_id, cseq_num) assert now - 10 < msg[0]['message-received'] < now + 10 assert msg[0]['message-sent'] == 1234567890 assert msg[1]['content-type'] == 'text/plain' assert msg[1]['content'] == 'Hi' # FIXME: times out for some reason, the response is in fact sent; # race condition with the earlier wait for 'dbus-signal'? #event = q.expect('sip-response', code=200) iface.AcknowledgePendingMessages([msg[0]['pending-message-id']]) # Test conversion from an 8-bit encoding. # Due to limited set of encodings available in some environments, # try with US ASCII and ISO 8859-1. send_message(sip, ua_via, u'straight ASCII'.encode('us-ascii'), encoding='us-ascii') event = q.expect('dbus-signal', signal='Received') assert event.args[5] == 'straight ASCII' iface.AcknowledgePendingMessages([event.args[0]]) send_message(sip, ua_via, u'Hyv\xe4!'.encode('iso-8859-1'), encoding='iso-8859-1') event = q.expect('dbus-signal', signal='Received') assert event.args[5] == u'Hyv\xe4!' conn.ReleaseHandles(1, [handle]) iface = dbus.Interface(incoming_obj, cs.CHANNEL_IFACE_DESTROYABLE) iface.Destroy() del iface event = q.expect('dbus-signal', signal='Closed') del incoming_obj # Sending the message to appear on the requested channel pending_msgs = [] send_message(sip, ua_via, 'How are you doing now, old pal?', sender=contact) event = q.expect('dbus-signal', signal='Received', path=chan) assert event.args[5] == 'How are you doing now, old pal?' pending_msgs.append(tuple(event.args)) send_message(sip, ua_via, 'I hope you can receive it', sender=contact) event = q.expect('dbus-signal', signal='Received') assert event.args[5] == 'I hope you can receive it' pending_msgs.append(tuple(event.args)) # Don't acknowledge the last messages, close the channel so that it's reopened dbus.Interface(requested_obj, CHANNEL).Close() del requested_obj event = q.expect('dbus-signal', signal='Closed', path=chan) requested_obj, handle = test_new_channel (q, bus, conn, target_uri=contact, initiator_uri=contact, requested=False) # Expect Channel_Text_Message_Flag_Resqued to be set pending_msgs = [message_with_resqued(msg) for msg in pending_msgs] # The first message is the delivery report of the message we failed to # send so we'll skip it. iface = dbus.Interface(requested_obj, TEXT_TYPE) pending_res = iface.ListPendingMessages(False) assert pending_msgs == pending_res[1:], (pending_msgs, unwrap(pending_res)[1:]) pending_res = iface.ListPendingMessages(True) assert pending_msgs == pending_res[1:], (pending_msgs, unwrap(pending_res)[1:]) # There should be no pending messages any more pending_res = iface.ListPendingMessages(False) assert pending_res == [], pending_res del iface # Hit also the code path for closing the channel with no pending messages dbus.Interface(requested_obj, CHANNEL).Close() event = q.expect('dbus-signal', signal='Closed') del requested_obj # Hit the message zapping path when the connection is disconnected send_message(sip, ua_via, 'Will you leave this unacknowledged?') test_new_channel (q, bus, conn, target_uri=FROM_URL, initiator_uri=FROM_URL, requested=False) conn.Disconnect() # Check the last channel with an unacknowledged message event = q.expect('dbus-signal', signal='Closed') q.expect('dbus-signal', signal='StatusChanged', args=[2,1]) cseq_num = 1 def send_message(sip, destVia, body, encoding=None, sender=FROM_URL, call_id=None, time=None): global cseq_num cseq_num += 1 url = twisted.protocols.sip.parseURL('sip:testacc@127.0.0.1') msg = twisted.protocols.sip.Request('MESSAGE', url) msg.body = body msg.addHeader('from', '<%s>;tag=XYZ' % sender) msg.addHeader('to', '') msg.addHeader('cseq', '%d MESSAGE' % cseq_num) msg.addHeader('allow', 'INVITE ACK BYE MESSAGE') if encoding is None: msg.addHeader('content-type', 'text/plain') else: msg.addHeader('content-type', 'text/plain; charset=%s' % encoding) msg.addHeader('content-length', '%d' % len(msg.body)) msg.addHeader('call-id', call_id or uuid.uuid4().hex) if time is not None: msg.addHeader('date', email.utils.formatdate(time, False, True)) via = sip.getVia() via.branch = 'z9hG4bKXYZ' msg.addHeader('via', via.toString()) host = destVia.received or destVia.host port = destVia.rport or destVia.port destAddr = twisted.protocols.sip.URL(host=host, port=port) sip.sendMessage(destAddr, msg) return True def message_with_resqued(msg): l = list(msg) l[4] = 8 return tuple(l) if __name__ == '__main__': exec_test(test) telepathy-rakia-0.8.0/tests/twisted/servicetest.py0000644000175000017500000004527212223047264017277 00000000000000 """ Infrastructure code for testing connection managers. """ from twisted.internet import glib2reactor from twisted.internet.protocol import Protocol, Factory, ClientFactory glib2reactor.install() import sys import time import pprint import unittest import dbus.glib from twisted.internet import reactor import constants as cs tp_name_prefix = 'org.freedesktop.Telepathy' tp_path_prefix = '/org/freedesktop/Telepathy' class Event: def __init__(self, type, **kw): self.__dict__.update(kw) self.type = type (self.subqueue, self.subtype) = type.split ("-", 1) def format_event(event): ret = ['- type %s' % event.type] for key in dir(event): if key != 'type' and not key.startswith('_'): ret.append('- %s: %s' % ( key, pprint.pformat(getattr(event, key)))) if key == 'error': ret.append('%s' % getattr(event, key)) return ret class EventPattern: def __init__(self, type, **properties): self.type = type self.predicate = None if 'predicate' in properties: self.predicate = properties['predicate'] del properties['predicate'] self.properties = properties (self.subqueue, self.subtype) = type.split ("-", 1) def __repr__(self): properties = dict(self.properties) if self.predicate is not None: properties['predicate'] = self.predicate return '%s(%r, **%r)' % ( self.__class__.__name__, self.type, properties) def match(self, event): if event.type != self.type: return False for key, value in self.properties.iteritems(): try: if getattr(event, key) != value: return False except AttributeError: return False if self.predicate is None or self.predicate(event): return True return False class TimeoutError(Exception): pass class BaseEventQueue: """Abstract event queue base class. Implement the wait() method to have something that works. """ def __init__(self, timeout=None): self.verbose = False self.forbidden_events = set() self.event_queues = {} if timeout is None: self.timeout = 5 else: self.timeout = timeout def log(self, s): if self.verbose: print s def log_queues(self, queues): self.log ("Waiting for event on: %s" % ", ".join(queues)) def log_event(self, event): self.log('got event:') if self.verbose: map(self.log, format_event(event)) def forbid_events(self, patterns): """ Add patterns (an iterable of EventPattern) to the set of forbidden events. If a forbidden event occurs during an expect or expect_many, the test will fail. """ self.forbidden_events.update(set(patterns)) def unforbid_events(self, patterns): """ Remove 'patterns' (an iterable of EventPattern) from the set of forbidden events. These must be the same EventPattern pointers that were passed to forbid_events. """ self.forbidden_events.difference_update(set(patterns)) def _check_forbidden(self, event): for e in self.forbidden_events: if e.match(event): print "forbidden event occurred:" for x in format_event(event): print x assert False def expect(self, type, **kw): """ Waits for an event matching the supplied pattern to occur, and returns it. For example, to await a D-Bus signal with particular arguments: e = q.expect('dbus-signal', signal='Badgers', args=["foo", 42]) """ pattern = EventPattern(type, **kw) t = time.time() while True: event = self.wait([pattern.subqueue]) self._check_forbidden(event) if pattern.match(event): self.log('handled, took %0.3f ms' % ((time.time() - t) * 1000.0) ) self.log('') return event self.log('not handled') self.log('') def expect_many(self, *patterns): """ Waits for events matching all of the supplied EventPattern instances to return, and returns a list of events in the same order as the patterns they matched. After a pattern is successfully matched, it is not considered for future events; if more than one unsatisfied pattern matches an event, the first "wins". Note that the expected events may occur in any order. If you're expecting a series of events in a particular order, use repeated calls to expect() instead. This method is useful when you're awaiting a number of events which may happen in any order. For instance, in telepathy-gabble, calling a D-Bus method often causes a value to be returned immediately, as well as a query to be sent to the server. Since these events may reach the test in either order, the following is incorrect and will fail if the IQ happens to reach the test first: ret = q.expect('dbus-return', method='Foo') query = q.expect('stream-iq', query_ns=ns.FOO) The following would be correct: ret, query = q.expect_many( EventPattern('dbus-return', method='Foo'), EventPattern('stream-iq', query_ns=ns.FOO), ) """ ret = [None] * len(patterns) t = time.time() while None in ret: try: queues = set() for i, pattern in enumerate(patterns): if ret[i] is None: queues.add(pattern.subqueue) event = self.wait(queues) except TimeoutError: self.log('timeout') self.log('still expecting:') for i, pattern in enumerate(patterns): if ret[i] is None: self.log(' - %r' % pattern) raise self._check_forbidden(event) for i, pattern in enumerate(patterns): if ret[i] is None and pattern.match(event): self.log('handled, took %0.3f ms' % ((time.time() - t) * 1000.0) ) self.log('') ret[i] = event break else: self.log('not handled') self.log('') return ret def demand(self, type, **kw): pattern = EventPattern(type, **kw) event = self.wait([pattern.subqueue]) if pattern.match(event): self.log('handled') self.log('') return event self.log('not handled') raise RuntimeError('expected %r, got %r' % (pattern, event)) def queues_available(self, queues): if queues == None: return self.event_queues.keys() else: available = self.event_queues.keys() return filter(lambda x: x in available, queues) def pop_next(self, queue): events = self.event_queues[queue] e = events.pop(0) if not events: self.event_queues.pop (queue) return e def append(self, event): self.log ("Adding to queue") self.log_event (event) self.event_queues[event.subqueue] = \ self.event_queues.get(event.subqueue, []) + [event] class IteratingEventQueue(BaseEventQueue): """Event queue that works by iterating the Twisted reactor.""" def __init__(self, timeout=None): BaseEventQueue.__init__(self, timeout) def wait(self, queues=None): stop = [False] def later(): stop[0] = True delayed_call = reactor.callLater(self.timeout, later) self.log_queues(queues) qa = self.queues_available(queues) while not qa and (not stop[0]): reactor.iterate(0.01) qa = self.queues_available(queues) if qa: delayed_call.cancel() e = self.pop_next (qa[0]) self.log_event (e) return e else: raise TimeoutError class TestEventQueue(BaseEventQueue): def __init__(self, events): BaseEventQueue.__init__(self) for e in events: self.append (e) def wait(self, queues = None): qa = self.queues_available(queues) if qa: return self.pop_next (qa[0]) else: raise TimeoutError class EventQueueTest(unittest.TestCase): def test_expect(self): queue = TestEventQueue([Event('test-foo'), Event('test-bar')]) assert queue.expect('test-foo').type == 'test-foo' assert queue.expect('test-bar').type == 'test-bar' def test_expect_many(self): queue = TestEventQueue([Event('test-foo'), Event('test-bar')]) bar, foo = queue.expect_many( EventPattern('test-bar'), EventPattern('test-foo')) assert bar.type == 'test-bar' assert foo.type == 'test-foo' def test_expect_many2(self): # Test that events are only matched against patterns that haven't yet # been matched. This tests a regression. queue = TestEventQueue([Event('test-foo', x=1), Event('test-foo', x=2)]) foo1, foo2 = queue.expect_many( EventPattern('test-foo'), EventPattern('test-foo')) assert foo1.type == 'test-foo' and foo1.x == 1 assert foo2.type == 'test-foo' and foo2.x == 2 def test_expect_queueing(self): queue = TestEventQueue([Event('foo-test', x=1), Event('foo-test', x=2)]) queue.append(Event('bar-test', x=1)) queue.append(Event('bar-test', x=2)) queue.append(Event('baz-test', x=1)) queue.append(Event('baz-test', x=2)) for x in xrange(1,2): e = queue.expect ('baz-test') assertEquals (x, e.x) e = queue.expect ('bar-test') assertEquals (x, e.x) e = queue.expect ('foo-test') assertEquals (x, e.x) def test_timeout(self): queue = TestEventQueue([]) self.assertRaises(TimeoutError, queue.expect, 'test-foo') def test_demand(self): queue = TestEventQueue([Event('test-foo'), Event('test-bar')]) foo = queue.demand('test-foo') assert foo.type == 'test-foo' def test_demand_fail(self): queue = TestEventQueue([Event('test-foo'), Event('test-bar')]) self.assertRaises(RuntimeError, queue.demand, 'test-bar') def unwrap(x): """Hack to unwrap D-Bus values, so that they're easier to read when printed.""" if isinstance(x, list): return map(unwrap, x) if isinstance(x, tuple): return tuple(map(unwrap, x)) if isinstance(x, dict): return dict([(unwrap(k), unwrap(v)) for k, v in x.iteritems()]) if isinstance(x, dbus.Boolean): return bool(x) for t in [unicode, str, long, int, float]: if isinstance(x, t): return t(x) return x def call_async(test, proxy, method, *args, **kw): """Call a D-Bus method asynchronously and generate an event for the resulting method return/error.""" def reply_func(*ret): test.append(Event('dbus-return', method=method, value=unwrap(ret))) def error_func(err): test.append(Event('dbus-error', method=method, error=err, name=err.get_dbus_name(), message=str(err))) method_proxy = getattr(proxy, method) kw.update({'reply_handler': reply_func, 'error_handler': error_func}) method_proxy(*args, **kw) def sync_dbus(bus, q, conn): # Dummy D-Bus method call # This won't do the right thing unless the proxy has a unique name. assert conn.object.bus_name.startswith(':') root_object = bus.get_object(conn.object.bus_name, '/') call_async( q, dbus.Interface(root_object, 'org.freedesktop.DBus.Peer'), 'Ping') q.expect('dbus-return', method='Ping') class ProxyWrapper: def __init__(self, object, default, others): self.object = object self.default_interface = dbus.Interface(object, default) self.Properties = dbus.Interface(object, dbus.PROPERTIES_IFACE) self.TpProperties = \ dbus.Interface(object, tp_name_prefix + '.Properties') self.interfaces = dict([ (name, dbus.Interface(object, iface)) for name, iface in others.iteritems()]) def __getattr__(self, name): if name in self.interfaces: return self.interfaces[name] if name in self.object.__dict__: return getattr(self.object, name) return getattr(self.default_interface, name) def wrap_connection(conn): return ProxyWrapper(conn, tp_name_prefix + '.Connection', dict([ (name, tp_name_prefix + '.Connection.Interface.' + name) for name in ['Aliasing', 'Avatars', 'Capabilities', 'Contacts', 'Presence', 'SimplePresence', 'Requests']] + [('Peer', 'org.freedesktop.DBus.Peer'), ('ContactCapabilities', cs.CONN_IFACE_CONTACT_CAPS), ('ContactInfo', cs.CONN_IFACE_CONTACT_INFO), ('Location', cs.CONN_IFACE_LOCATION), ('Future', tp_name_prefix + '.Connection.FUTURE'), ('MailNotification', cs.CONN_IFACE_MAIL_NOTIFICATION), ('ContactList', cs.CONN_IFACE_CONTACT_LIST), ('ContactGroups', cs.CONN_IFACE_CONTACT_GROUPS), ])) def wrap_channel(chan, type_, extra=None): interfaces = { type_: tp_name_prefix + '.Channel.Type.' + type_, 'Group': tp_name_prefix + '.Channel.Interface.Group', } if extra: interfaces.update(dict([ (name, tp_name_prefix + '.Channel.Interface.' + name) for name in extra])) return ProxyWrapper(chan, tp_name_prefix + '.Channel', interfaces) def make_connection(bus, event_func, name, proto, params): cm = bus.get_object( tp_name_prefix + '.ConnectionManager.%s' % name, tp_path_prefix + '/ConnectionManager/%s' % name) cm_iface = dbus.Interface(cm, tp_name_prefix + '.ConnectionManager') connection_name, connection_path = cm_iface.RequestConnection( proto, params) conn = wrap_connection(bus.get_object(connection_name, connection_path)) bus.add_signal_receiver( lambda *args, **kw: event_func( Event('dbus-signal', path=unwrap(kw['path']), signal=kw['member'], args=map(unwrap, args), interface=kw['interface'])), None, # signal name None, # interface cm._named_service, path_keyword='path', member_keyword='member', interface_keyword='interface', byte_arrays=True ) return conn def make_channel_proxy(conn, path, iface): bus = dbus.SessionBus() chan = bus.get_object(conn.object.bus_name, path) chan = dbus.Interface(chan, tp_name_prefix + '.' + iface) return chan # block_reading can be used if the test want to choose when we start to read # data from the socket. class EventProtocol(Protocol): def __init__(self, queue=None, block_reading=False): self.queue = queue def dataReceived(self, data): if self.queue is not None: self.queue.append(Event('socket-data', protocol=self, data=data)) def sendData(self, data): self.transport.write(data) def connectionMade(self): if self.block_reading: self.transport.stopReading() def connectionLost(self, reason=None): if self.queue is not None: self.queue.append(Event('socket-disconnected', protocol=self)) class EventProtocolFactory(Factory): def __init__(self, queue, block_reading=False): self.queue = queue self.block_reading = block_reading def _create_protocol(self): return EventProtocol(self.queue, self.block_reading) def buildProtocol(self, addr): proto = self._create_protocol() self.queue.append(Event('socket-connected', protocol=proto)) return proto class EventProtocolClientFactory(EventProtocolFactory, ClientFactory): pass def watch_tube_signals(q, tube): def got_signal_cb(*args, **kwargs): q.append(Event('tube-signal', path=kwargs['path'], signal=kwargs['member'], args=map(unwrap, args), tube=tube)) tube.add_signal_receiver(got_signal_cb, path_keyword='path', member_keyword='member', byte_arrays=True) def pretty(x): return pprint.pformat(unwrap(x)) def assertEquals(expected, value): if expected != value: raise AssertionError( "expected:\n%s\ngot:\n%s" % (pretty(expected), pretty(value))) def assertSameSets(expected, value): exp_set = set(expected) val_set = set(value) if exp_set != val_set: raise AssertionError( "expected contents:\n%s\ngot:\n%s" % ( pretty(exp_set), pretty(val_set))) def assertNotEquals(expected, value): if expected == value: raise AssertionError( "expected something other than:\n%s" % pretty(value)) def assertContains(element, value): if element not in value: raise AssertionError( "expected:\n%s\nin:\n%s" % (pretty(element), pretty(value))) def assertDoesNotContain(element, value): if element in value: raise AssertionError( "expected:\n%s\nnot in:\n%s" % (pretty(element), pretty(value))) def assertLength(length, value): if len(value) != length: raise AssertionError("expected: length %d, got length %d:\n%s" % ( length, len(value), pretty(value))) def assertFlagsSet(flags, value): masked = value & flags if masked != flags: raise AssertionError( "expected flags %u, of which only %u are set in %u" % ( flags, masked, value)) def assertFlagsUnset(flags, value): masked = value & flags if masked != 0: raise AssertionError( "expected none of flags %u, but %u are set in %u" % ( flags, masked, value)) def install_colourer(): def red(s): return '\x1b[31m%s\x1b[0m' % s def green(s): return '\x1b[32m%s\x1b[0m' % s patterns = { 'handled': green, 'not handled': red, } class Colourer: def __init__(self, fh, patterns): self.fh = fh self.patterns = patterns def write(self, s): f = self.patterns.get(s, lambda x: x) self.fh.write(f(s)) sys.stdout = Colourer(sys.stdout, patterns) return sys.stdout if __name__ == '__main__': unittest.main() telepathy-rakia-0.8.0/tests/twisted/text/0000755000175000017500000000000012223050362015410 500000000000000telepathy-rakia-0.8.0/tests/twisted/text/initiate-requestotron.py0000644000175000017500000000715512223047264022277 00000000000000""" Test text channel initiated by me, using Requests. """ import dbus from sofiatest import exec_test from servicetest import call_async, EventPattern def test(q, bus, conn, stream): conn.Connect() q.expect('dbus-signal', signal='StatusChanged', args=[0, 1]) self_handle = conn.GetSelfHandle() self_uri = conn.InspectHandles(1, [self_handle])[0] uri = 'sip:foo@bar.com' call_async(q, conn, 'RequestHandles', 1, [uri]) event = q.expect('dbus-return', method='RequestHandles') foo_handle = event.value[0][0] properties = conn.GetAll( 'org.freedesktop.Telepathy.Connection.Interface.Requests', dbus_interface='org.freedesktop.DBus.Properties') assert properties.get('Channels') == [], properties['Channels'] assert ({'org.freedesktop.Telepathy.Channel.ChannelType': 'org.freedesktop.Telepathy.Channel.Type.Text', 'org.freedesktop.Telepathy.Channel.TargetHandleType': 1, }, ['org.freedesktop.Telepathy.Channel.TargetHandle', 'org.freedesktop.Telepathy.Channel.TargetID' ], ) in properties.get('RequestableChannelClasses'),\ properties['RequestableChannelClasses'] requestotron = dbus.Interface(conn, 'org.freedesktop.Telepathy.Connection.Interface.Requests') call_async(q, requestotron, 'CreateChannel', { 'org.freedesktop.Telepathy.Channel.ChannelType': 'org.freedesktop.Telepathy.Channel.Type.Text', 'org.freedesktop.Telepathy.Channel.TargetHandleType': 1, 'org.freedesktop.Telepathy.Channel.TargetHandle': foo_handle, }) ret, old_sig, new_sig = q.expect_many( EventPattern('dbus-return', method='CreateChannel'), EventPattern('dbus-signal', signal='NewChannel'), EventPattern('dbus-signal', signal='NewChannels'), ) assert len(ret.value) == 2 emitted_props = ret.value[1] assert emitted_props['org.freedesktop.Telepathy.Channel.ChannelType'] ==\ 'org.freedesktop.Telepathy.Channel.Type.Text' assert emitted_props['org.freedesktop.Telepathy.Channel.' 'TargetHandleType'] == 1 assert emitted_props['org.freedesktop.Telepathy.Channel.TargetHandle'] ==\ foo_handle assert emitted_props['org.freedesktop.Telepathy.Channel.TargetID'] == uri assert emitted_props['org.freedesktop.Telepathy.Channel.' 'Requested'] == True assert emitted_props['org.freedesktop.Telepathy.Channel.' 'InitiatorHandle'] == self_handle assert emitted_props['org.freedesktop.Telepathy.Channel.' 'InitiatorID'] == self_uri assert old_sig.args[0] == ret.value[0] assert old_sig.args[1] == u'org.freedesktop.Telepathy.Channel.Type.Text' # check that handle type == contact handle assert old_sig.args[2] == 1 assert old_sig.args[3] == foo_handle assert old_sig.args[4] == True # suppress handler assert len(new_sig.args) == 1 assert len(new_sig.args[0]) == 1 # one channel assert len(new_sig.args[0][0]) == 2 # two struct members assert new_sig.args[0][0][0] == ret.value[0] assert new_sig.args[0][0][1] == ret.value[1] properties = conn.GetAll( 'org.freedesktop.Telepathy.Connection.Interface.Requests', dbus_interface='org.freedesktop.DBus.Properties') assert new_sig.args[0][0] in properties['Channels'], \ (new_sig.args[0][0], properties['Channels']) conn.Disconnect() q.expect('dbus-signal', signal='StatusChanged', args=[2, 1]) if __name__ == '__main__': exec_test(test) telepathy-rakia-0.8.0/tests/twisted/cm/0000755000175000017500000000000012223050362015023 500000000000000telepathy-rakia-0.8.0/tests/twisted/cm/protocol.py0000644000175000017500000000427112223047264017171 00000000000000""" Test Rakia's o.fd.T.Protocol implementation """ import dbus from servicetest import (unwrap, tp_path_prefix, assertEquals, assertContains, call_async) from sofiatest import exec_test import constants as cs def test(q, bus, conn, sip): cm = bus.get_object(cs.CM + '.sofiasip', tp_path_prefix + '/ConnectionManager/sofiasip') cm_iface = dbus.Interface(cm, cs.CM) cm_prop_iface = dbus.Interface(cm, cs.PROPERTIES_IFACE) protocols = unwrap(cm_prop_iface.Get(cs.CM, 'Protocols')) assertEquals(set(['sip']), set(protocols.keys())) protocol_names = unwrap(cm_iface.ListProtocols()) assertEquals(set(['sip']), set(protocol_names)) cm_params = cm_iface.GetParameters('sip') local_props = protocols['sip'] local_params = local_props[cs.PROTOCOL + '.Parameters'] assertEquals(cm_params, local_params) proto = bus.get_object(cm.bus_name, cm.object_path + '/sip') proto_iface = dbus.Interface(proto, cs.PROTOCOL) proto_prop_iface = dbus.Interface(proto, cs.PROPERTIES_IFACE) proto_props = unwrap(proto_prop_iface.GetAll(cs.PROTOCOL)) for key in ['Parameters', 'Interfaces', 'ConnectionInterfaces', 'RequestableChannelClasses', u'VCardField', u'EnglishName', u'Icon']: a = local_props[cs.PROTOCOL + '.' + key] b = proto_props[key] assertEquals(a, b) assertEquals('x-sip', proto_props['VCardField']) assertEquals('SIP', proto_props['EnglishName']) assertEquals('im-sip', proto_props['Icon']) assertContains(cs.CONN_IFACE_ALIASING, proto_props['ConnectionInterfaces']) assertContains(cs.CONN_IFACE_CONTACTS, proto_props['ConnectionInterfaces']) assertContains(cs.CONN_IFACE_REQUESTS, proto_props['ConnectionInterfaces']) assertEquals('sip:example@mit.edu', unwrap(proto_iface.NormalizeContact('example@MIT.Edu'))) # Only account is mandatory call_async(q, proto_iface, 'IdentifyAccount', {}) q.expect('dbus-error', method='IdentifyAccount', name=cs.INVALID_ARGUMENT) test_params = {'account': 'smcv@example.com'} acc_name = unwrap(proto_iface.IdentifyAccount(test_params)) assertEquals('smcv@example.com', acc_name) if __name__ == '__main__': exec_test(test) telepathy-rakia-0.8.0/tests/twisted/sofiatest.py0000644000175000017500000001144512223047264016733 00000000000000""" Telepathy-Rakia testing framework """ import servicetest from twisted.protocols import sip from twisted.internet import reactor import os import sys import random import dbus import dbus.glib class SipProxy(sip.RegisterProxy): registry = sip.InMemoryRegistry("127.0.0.1") def __init__(self, *args, **kw): sip.RegisterProxy.__init__(self, *args, **kw) def register(self, message, host, port): if hasattr(self, 'registrar_handler'): self.event_func(servicetest.Event('sip-register', uri=str(message.uri), headers=message.headers, body=message.body, sip_message=message, host=host, port=port)) if self.registrar_handler(message, host, port): sip.RegisterProxy.register(self, message, host, port) else: self.unauthorized(message, host, port) def handle_request(self, message, addr): if message.method == 'REGISTER': return sip.RegisterProxy.handle_REGISTER_request(self, message, addr) elif message.method == 'OPTIONS' and \ 'REGISTRATION PROBE' == message.headers.get('subject','')[0]: self.deliverResponse(self.responseFromRequest(200, message)) else: headers = {} for key, values in message.headers.items(): headers[key.replace('-', '_')] = values[0] self.event_func(servicetest.Event('sip-%s' % message.method.lower(), uri=str(message.uri), headers=message.headers, body=message.body, sip_message=message, **headers)) def handle_response(self, message, addr): headers = {} for key, values in message.headers.items(): headers[key.replace('-', '_')] = values[0] self.event_func(servicetest.Event('sip-response', code=message.code, headers=message.headers, body=message.body, sip_message=message, **headers)) def prepare_test(event_func, register_cb, params=None): actual_params = { 'account': 'testacc@127.0.0.1', 'password': 'testpwd', 'proxy-host': '127.0.0.1', 'port': dbus.UInt16(random.randint(9090, 9999)), 'local-ip-address': '127.0.0.1', 'transport': 'udp' } if params is not None: for k, v in params.items(): if v is None: actual_params.pop(k, None) else: actual_params[k] = v bus = dbus.SessionBus() conn = servicetest.make_connection(bus, event_func, 'sofiasip', 'sip', actual_params) port = int(actual_params['port']) sip = SipProxy(host=actual_params['proxy-host'], port=port) sip.event_func = event_func sip.registrar_handler = register_cb reactor.listenUDP(port, sip) return bus, conn, sip def default_register_cb(message, host, port): return True def go(params=None, register_cb=default_register_cb, start=None): handler = servicetest.EventTest() bus, conn, sip = \ prepare_test(handler.handle_event, register_cb, params) handler.data = { 'bus': bus, 'conn': conn, 'conn_iface': dbus.Interface(conn, 'org.freedesktop.Telepathy.Connection'), 'sip': sip} handler.data['test'] = handler handler.data['sip'].test_handler = handler handler.verbose = (os.environ.get('CHECK_TWISTED_VERBOSE', '') != '') map(handler.expect, servicetest.load_event_handlers()) if '-v' in sys.argv: handler.verbose = True if start is None: handler.data['conn'].Connect() else: start(handler.data) reactor.run() def exec_test(fun, params=None, register_cb=default_register_cb, timeout=None): queue = servicetest.IteratingEventQueue(timeout) queue.verbose = (os.environ.get('CHECK_TWISTED_VERBOSE', '') != '') if '-v' in sys.argv: queue.verbose = True bus, conn, sip = prepare_test(queue.append, params=params, register_cb=register_cb) if sys.stdout.isatty(): def red(s): return '\x1b[31m%s\x1b[0m' % s def green(s): return '\x1b[32m%s\x1b[0m' % s patterns = { 'handled,': green, 'not hand': red, } class Colourer: def __init__(self, fh, patterns): self.fh = fh self.patterns = patterns def write(self, s): f = self.patterns.get(s[:len('handled,')], lambda x: x) self.fh.write(f(s)) def isatty(self): return False sys.stdout = Colourer(sys.stdout, patterns) try: fun(queue, bus, conn, sip) finally: try: conn.Disconnect() # second call destroys object conn.Disconnect() except dbus.DBusException, e: pass telepathy-rakia-0.8.0/tests/Makefile.am0000644000175000017500000000106512223047264014726 00000000000000if WANT_TWISTED_TESTS CHECKTWISTED = twisted endif SUBDIRS = $(CHECKTWISTED) # noinst_PROGRAMS = \ # tp_caller # AM_CFLAGS = $(ERROR_CFLAGS) @DBUS_CFLAGS@ @GLIB_CFLAGS@ \ # -I $(top_srcdir)/src -I $(top_builddir)/src # ALL_LIBS = @DBUS_LIBS@ @GLIB_LIBS@ check-valgrind: G_SLICE=always-malloc \ G_DEBUG=gc-friendly \ $(MAKE) \ TESTS_ENVIRONMENT="\ libtool --mode=execute valgrind \ --leak-check=full \ --show-reachable=no \ --error-exitcode=1" \ check # check_c_sources = \ # tp_caller.c include $(top_srcdir)/tools/check-coding-style.mk