# HG changeset patch # User renatofilho # Date 1201904253 0 # Node ID 847da72672346482335d5f43b170b9c29ab64d20 # Parent 46205cce5b8e1e717b439bf7d1b5bdeff9763793 [svn r915] updated to use libupnp diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/INSTALL --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gmyth-upnp/INSTALL Fri Feb 01 22:17:33 2008 +0000 @@ -0,0 +1,236 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free +Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +These are generic installation instructions. + + 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 only 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. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. 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. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. 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. + +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=c89 CFLAGS=-O2 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 must use a version of `make' that +supports the `VPATH' variable, such as 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 `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have 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. + +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'. + + 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. + + 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'. + +Optional Features +================= + +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. + +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). Here is a another example: + + /bin/bash ./configure CONFIG_SHELL=/bin/bash + +Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent +configuration-related scripts to be executed by `/bin/bash'. + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--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. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/Makefile.am --- a/gmyth-upnp/Makefile.am Fri Feb 01 19:22:17 2008 +0000 +++ b/gmyth-upnp/Makefile.am Fri Feb 01 22:17:33 2008 +0000 @@ -1,4 +1,4 @@ -SUBDIRS= src +SUBDIRS= src test ### all of the standard pc files we need to generate pcfiles = gmyth-upnp.pc @@ -12,8 +12,6 @@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = $(pcfiles) -include aminclude.am - EXTRA_DIST = \ autogen.sh \ gmyth-upnp.pc.in \ diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/autogen.sh --- a/gmyth-upnp/autogen.sh Fri Feb 01 19:22:17 2008 +0000 +++ b/gmyth-upnp/autogen.sh Fri Feb 01 22:17:33 2008 +0000 @@ -1,102 +1,21 @@ #!/bin/sh # Run this to generate all the initial makefiles, etc. -DIE=0 -package=gmyth-upnp -srcfile=configure.ac +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. -# a quick cvs co if necessary to alleviate the pain - may remove this -# when developers get a clue ;) -if test ! -d common; -then - echo "+ getting common/ from svn" - svn co common -fi +PKG_NAME="mtv" -# source helper functions -if test ! -f common/autogen-helper.sh; -then - echo There is something wrong with your source tree. - echo You are missing common/autogen-helper.sh - exit 1 -fi -. common/autogen-helper.sh - -CONFIGURE_DEF_OPT='--enable-maintainer-mode' -# uncomment below to disable the UPnP features -#CONFIGURE_DEF_OPT+=' --disable-upnp' -CONFIGURE_EXT_OPT="$@" - -autogen_options - -echo -n "+ check for build tools" -if test ! -z "$NOCHECK"; then echo " skipped"; else echo; fi -version_check "autoconf" "$AUTOCONF autoconf autoconf-2.54 autoconf-2.53" \ - "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 53 || DIE=1 -version_check "automake" "$AUTOMAKE automake automake-1.9 automake-1.8 automake-1.7 automake-1.6" \ - "ftp://ftp.gnu.org/pub/gnu/automake/" 1 6 || DIE=1 -version_check "libtoolize" "$LIBTOOLIZE libtoolize" \ - "ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1 -version_check "pkg-config" "" \ - "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1 - -die_check $DIE - -aclocal_check || DIE=1 -autoheader_check || DIE=1 - -die_check $DIE - -# if no arguments specified then this will be printed -if test -z "$*"; then - echo "+ checking for autogen.sh options" - echo " This autogen script will automatically run ./configure as:" - echo " ./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT" - echo " To pass any additional options, please specify them on the $0" - echo " command line." -fi - -toplevel_check $srcfile - -tool_run "$aclocal" "-I m4 $ACLOCAL_FLAGS" -tool_run "$libtoolize" "--copy --force" -tool_run "$autoheader" - -# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo -echo timestamp > stamp-h.in 2> /dev/null - -tool_run "$autoconf" -tool_run "$automake" "-a -c" - -# if enable exists, add an -enable option for each of the lines in that file -if test -f enable; then - for a in `cat enable`; do - CONFIGURE_FILE_OPT="--enable-$a" - done -fi - -# if disable exists, add an -disable option for each of the lines in that file -if test -f disable; then - for a in `cat disable`; do - CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a" - done -fi - -test -n "$NOCONFIGURE" && { - echo "+ skipping configure stage for package $package, as requested." - echo "+ autogen.sh done." - exit 0 +(test -f $srcdir/configure.ac) || { + echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" + echo " top-level $PKG_NAME directory" + exit 1 } -echo "+ running configure ... " -test ! -z "$CONFIGURE_DEF_OPT" && echo " ./configure default flags: $CONFIGURE_DEF_OPT" -test ! -z "$CONFIGURE_EXT_OPT" && echo " ./configure external flags: $CONFIGURE_EXT_OPT" -test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT" -echo - -./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || { - echo " configure failed" - exit 1 +which gnome-autogen.sh || { + echo "You need to install gnome-common from the GNOME CVS" + exit 1 } -echo "Now type 'make' to compile $package." +ACLOCAL_FLAGS="$ACLOCAL_FLAGS" +REQUIRED_AUTOMAKE_VERSION=1.7 USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/common/Makefile.am --- a/gmyth-upnp/common/Makefile.am Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -EXTRA_DIST = autogen-helper.sh diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/common/autogen-helper.sh --- a/gmyth-upnp/common/autogen-helper.sh Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -# a silly hack that generates autoregen.sh but it's handy -echo "#!/bin/sh" > autoregen.sh -echo "./autogen.sh $@ \$@" >> autoregen.sh -chmod +x autoregen.sh - -# helper functions for autogen.sh - -debug () -# print out a debug message if DEBUG is a defined variable -{ - if test ! -z "$DEBUG" - then - echo "DEBUG: $1" - fi -} - -version_check () -# check the version of a package -# first argument : package name (executable) -# second argument : optional path where to look for it instead -# third argument : source download url -# rest of arguments : major, minor, micro version -# all consecutive ones : suggestions for binaries to use -# (if not specified in second argument) -{ - PACKAGE=$1 - PKG_PATH=$2 - URL=$3 - MAJOR=$4 - MINOR=$5 - MICRO=$6 - - # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null - if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi - debug "major $MAJOR minor $MINOR micro $MICRO" - VERSION=$MAJOR - if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi - if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi - - debug "major $MAJOR minor $MINOR micro $MICRO" - - for SUGGESTION in $PKG_PATH; do - COMMAND="$SUGGESTION" - - # don't check if asked not to - test -z "$NOCHECK" && { - echo -n " checking for $COMMAND >= $VERSION ... " - } || { - # we set a var with the same name as the package, but stripped of - # unwanted chars - VAR=`echo $PACKAGE | sed 's/-//g'` - debug "setting $VAR" - eval $VAR="$COMMAND" - return 0 - } - - debug "checking version with $COMMAND" - ($COMMAND --version) < /dev/null > /dev/null 2>&1 || - { - echo "not found." - continue - } - # strip everything that's not a digit, then use cut to get the first field - pkg_version=`$COMMAND --version|head -n 1|sed 's/^[^0-9]*//'|cut -d' ' -f1` - debug "pkg_version $pkg_version" - # remove any non-digit characters from the version numbers to permit numeric - # comparison - pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g` - pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g` - pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g` - test -z "$pkg_major" && pkg_major=0 - test -z "$pkg_minor" && pkg_minor=0 - test -z "$pkg_micro" && pkg_micro=0 - debug "found major $pkg_major minor $pkg_minor micro $pkg_micro" - - #start checking the version - debug "version check" - - # reset check - WRONG= - - if [ ! "$pkg_major" -gt "$MAJOR" ]; then - debug "major: $pkg_major <= $MAJOR" - if [ "$pkg_major" -lt "$MAJOR" ]; then - debug "major: $pkg_major < $MAJOR" - WRONG=1 - elif [ ! "$pkg_minor" -gt "$MINOR" ]; then - debug "minor: $pkg_minor <= $MINOR" - if [ "$pkg_minor" -lt "$MINOR" ]; then - debug "minor: $pkg_minor < $MINOR" - WRONG=1 - elif [ "$pkg_micro" -lt "$MICRO" ]; then - debug "micro: $pkg_micro < $MICRO" - WRONG=1 - fi - fi - fi - - if test ! -z "$WRONG"; then - echo "found $pkg_version, not ok !" - continue - else - echo "found $pkg_version, ok." - # we set a var with the same name as the package, but stripped of - # unwanted chars - VAR=`echo $PACKAGE | sed 's/-//g'` - debug "setting $VAR" - eval $VAR="$COMMAND" - return 0 - fi - done - - echo "not found !" - echo "You must have $PACKAGE installed to compile $package." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at $URL" - return 1; -} - -aclocal_check () -{ - # normally aclocal is part of automake - # so we expect it to be in the same place as automake - # so if a different automake is supplied, we need to adapt as well - # so how's about replacing automake with aclocal in the set var, - # and saving that in $aclocal ? - # note, this will fail if the actual automake isn't called automake* - # or if part of the path before it contains it - if [ -z "$automake" ]; then - echo "Error: no automake variable set !" - return 1 - else - aclocal=`echo $automake | sed s/automake/aclocal/` - debug "aclocal: $aclocal" - if [ "$aclocal" != "aclocal" ]; - then - CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal" - fi - if [ ! -x `which $aclocal` ]; then - echo "Error: cannot execute $aclocal !" - return 1 - fi - fi -} - -autoheader_check () -{ - # same here - autoheader is part of autoconf - # use the same voodoo - if [ -z "$autoconf" ]; then - echo "Error: no autoconf variable set !" - return 1 - else - autoheader=`echo $autoconf | sed s/autoconf/autoheader/` - debug "autoheader: $autoheader" - if [ "$autoheader" != "autoheader" ]; - then - CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader" - fi - if [ ! -x `which $autoheader` ]; then - echo "Error: cannot execute $autoheader !" - return 1 - fi - fi - -} - -autoconf_2_52d_check () -{ - # autoconf 2.52d has a weird issue involving a yes:no error - # so don't allow it's use - test -z "$NOCHECK" && { - ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'` - if test "$ac_version" = "2.52d"; then - echo "autoconf 2.52d has an issue with our current build." - echo "We don't know who's to blame however. So until we do, get a" - echo "regular version. RPM's of a working version are on the gstreamer site." - exit 1 - fi - } - return 0 -} - -die_check () -{ - # call with $DIE - # if set to 1, we need to print something helpful then die - DIE=$1 - if test "x$DIE" = "x1"; - then - echo - echo "- Please get the right tools before proceeding." - echo "- Alternatively, if you're sure we're wrong, run with --nocheck." - exit 1 - fi -} - -autogen_options () -{ - if test "x$1" = "x"; then - return 0 - fi - - while test "x$1" != "x" ; do - optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - case "$1" in - --noconfigure) - NOCONFIGURE=defined - AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure" - echo "+ configure run disabled" - shift - ;; - --nocheck) - AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck" - NOCHECK=defined - echo "+ autotools version check disabled" - shift - ;; - --debug) - DEBUG=defined - AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug" - echo "+ debug output enabled" - shift - ;; - --prefix=*) - CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$optarg" - echo "+ passing --prefix=$optarg to configure" - shift - ;; - --prefix) - shift - echo "DEBUG: $1" - CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT --prefix=$1" - echo "+ passing --prefix=$1 to configure" - shift - ;; - -h|--help) - echo "autogen.sh (autogen options) -- (configure options)" - echo "autogen.sh help options: " - echo " --noconfigure don't run the configure script" - echo " --nocheck don't do version checks" - echo " --debug debug the autogen process" - echo " --prefix will be passed on to configure" - echo - echo " --with-autoconf PATH use autoconf in PATH" - echo " --with-automake PATH use automake in PATH" - echo - echo "to pass options to configure, put them as arguments after -- " - exit 1 - ;; - --with-automake=*) - AUTOMAKE=$optarg - echo "+ using alternate automake in $optarg" - CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE" - shift - ;; - --with-autoconf=*) - AUTOCONF=$optarg - echo "+ using alternate autoconf in $optarg" - CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF" - shift - ;; - --disable*|--enable*|--with*) - echo "+ passing option $1 to configure" - CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1" - shift - ;; - --) shift ; break ;; - *) echo "- ignoring unknown autogen.sh argument $1"; shift ;; - esac - done - - for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done - if test ! -z "$CONFIGURE_EXT_OPT" - then - echo "+ options passed to configure: $CONFIGURE_EXT_OPT" - fi -} - -toplevel_check () -{ - srcfile=$1 - test -f $srcfile || { - echo "You must run this script in the top-level $package directory" - exit 1 - } -} - - -tool_run () -{ - tool=$1 - options=$2 - run_if_fail=$3 - echo "+ running $tool $options..." - $tool $options || { - echo - echo $tool failed - eval $run_if_fail - exit 1 - } -} diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/configure.ac --- a/gmyth-upnp/configure.ac Fri Feb 01 19:22:17 2008 +0000 +++ b/gmyth-upnp/configure.ac Fri Feb 01 22:17:33 2008 +0000 @@ -3,17 +3,11 @@ AC_PREREQ(2.50) -AC_INIT([gmyth-upnp],[0.1]) +AC_INIT([gmyth-upnp],[0.7]) AC_CONFIG_SRCDIR([src/gmyth_upnp.c]) AC_CONFIG_HEADER(config.h) -dnl when going to/from release please set the nano (fourth number) right ! -dnl releases only do Wall, SVN and prerelease does Werror too -AS_VERSION(gmyth-upnp, GMYTH_UPNP, 0, 1, 0, 3, GMYTH_UPNP_SVN="no", GMYTH_UPNP_SVN="yes") -GMYTH_UPNP_MAJORMINOR=$GMYTH_UPNP_MAJOR_VERSION.$GMYTH_UPNP_MINOR_VERSION -AC_SUBST(GMYTH_UPNP_MAJORMINOR) - dnl AM_MAINTAINER_MODE provides the option to enable maintainer mode AM_MAINTAINER_MODE dnl make aclocal work in maintainer mode @@ -26,17 +20,6 @@ AC_PROG_CC AC_PROG_LIBTOOL -dnl Generate doxygen documentation -DX_HTML_FEATURE(ON) -DX_CHM_FEATURE(OFF) -DX_CHI_FEATURE(OFF) -DX_MAN_FEATURE(OFF) -DX_RTF_FEATURE(OFF) -DX_XML_FEATURE(OFF) -DX_PDF_FEATURE(OFF) -DX_PS_FEATURE(OFF) -DX_INIT_DOXYGEN(gmyth-upnp, doxygen.cfg, docs) - # Checks for libraries. # Check for pkgconfig @@ -120,12 +103,12 @@ AC_SUBST(GOBJECT_CFLAGS) AC_SUBST(GOBJECT_LIBS) -## Check for gmyth-0.1 -PKG_CHECK_MODULES(LIBGMYTH, gmyth-0.1, HAVE_LIBGMYTH=yes,HAVE_LIBGMYTH=no) +## Check for gmyth-0.7 +PKG_CHECK_MODULES(LIBGMYTH, gmyth >= 0.7, HAVE_LIBGMYTH=yes,HAVE_LIBGMYTH=no) -# Give error and exit if we don't have gmyth-0.1 +# Give error and exit if we don't have gmyth-0.7 if test "x$HAVE_LIBGMYTH" = "xno"; then - AC_MSG_ERROR([you need gmyth-0.1 installed]) + AC_MSG_ERROR([you need gmyth installed]) fi # make LIBXML_CFLAGS and LIBXML_LIBS available @@ -133,28 +116,24 @@ AC_SUBST(LIBGMYTH_LIBS) dnl ========== Check for Cyberlink UPnP Libraries -PKG_CHECK_MODULES(CYBERLINK, clinkc, - HAVE_CYBERLINK=yes, HAVE_CYBERLINK=no) +PKG_CHECK_MODULES(LIBUPNP, libupnp, HAVE_LIBUPNP=yes, HAVE_LIBUPNP=no) -if test "x$HAVE_CYBERLINK" = "xno"; then - AC_MSG_ERROR([you need clinkc installed]) +if test "x$HAVE_LIBUPNP" = "xno"; then + AC_MSG_ERROR([you need libupnp installed]) fi -dnl make CYBERLINK_CFLAGS and CYBERLINK_LIBS available -AC_SUBST(CYBERLINK_CFLAGS) -AC_SUBST(CYBERLINK_LIBS) - -#dnl Enable gtk-doc -#GTK_DOC_CHECK(1.4) +AC_SUBST(LIBUPNP_CFLAGS) +AC_SUBST(LIBIPNP_LIBS) AC_OUTPUT([ Makefile src/Makefile +test/Makefile gmyth-upnp.pc]) if test "x$enable_debug" != "xno"; then AC_MSG_NOTICE([Debug: Enabled]) else AC_MSG_NOTICE([Debug: Disabled]) -fi +fi diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/AUTHORS --- a/gmyth-upnp/m4/AUTHORS Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -Alexsandro Jose Virginio dos Santos -Hallyson Luiz de Morais Melo -Leonardo Sobral Cunha -Rosfran Lins Borges diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/COPYING --- a/gmyth-upnp/m4/COPYING Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, 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 St, 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! - - diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/ChangeLog --- a/gmyth-upnp/m4/ChangeLog Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -2006-08-17 Rosfran Borges - * Added the correct gstreamer-base package (GSTBASE) at the configure.ac; - GSTBASE_CFLAGS and GSTBASE_LIBS variables had the same values from - the GST_CFLAGS/GST_LIBS. - -2006-08-16 Rosfran Borges - * Fixed some installation issues, regarding lib-installing to the - correct directory, and copying the header files to the destination - dir (make install). - * Put 'pkg-config' resource to the Maemo Myth library. The name of the - PKG-CONFIG resource is 'maemo-myth', plus the minor and major version. - Actually, the version is '0.1', so the library config file is: - 'maemo-myth-0.1.pc'. You can type: 'pkg-config --cflags --libs - maemo-myth-0.1'. - * Many adjustments in the automake/autoconf configuration files - (configure.ac, Makefile.am) - some autotools misusage fixed. - * Added the MythURI structure, and the URI parsing utility functions - (missing in the GLib). - * Some functions were exported (myth_socket, mmyth_context), that's - why many ther modules need to use them. - * Fixed some library dependencies. - * Prepared to be used inside the GStreamer (linking with the MythTV - plug-in). - diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/INSTALL --- a/gmyth-upnp/m4/INSTALL Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,236 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. - -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - -These are generic installation instructions. - - 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 only 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. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. 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. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. 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. - -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=c89 CFLAGS=-O2 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 must use a version of `make' that -supports the `VPATH' variable, such as 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 `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have 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. - -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'. - - 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. - - 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'. - -Optional Features -================= - -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. - -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). Here is a another example: - - /bin/bash ./configure CONFIG_SHELL=/bin/bash - -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. - -`configure' Invocation -====================== - -`configure' recognizes the following options to control how it operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--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. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/Makefile.am --- a/gmyth-upnp/m4/Makefile.am Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -SUBDIRS= src pixmaps - -include aminclude.am - -EXTRA_DIST = \ - autogen.sh \ - AUTHORS \ - COPYING \ - README - diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/ac_doxygen.m4 --- a/gmyth-upnp/m4/ac_doxygen.m4 Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,312 +0,0 @@ -# This file is part of Autoconf. -*- Autoconf -*- - -# Copyright (C) 2004 Oren Ben-Kiki -# This file is distributed under the same terms as the Autoconf macro files. - -# Generate automatic documentation using Doxygen. Works in concert with the -# aminclude.m4 file and a compatible doxygen configuration file. Defines the -# following public macros: -# -# DX_???_FEATURE(ON|OFF) - control the default setting fo a Doxygen feature. -# Supported features are 'DOXYGEN' itself, 'DOT' for generating graphics, -# 'HTML' for plain HTML, 'CHM' for compressed HTML help (for MS users), 'CHI' -# for generating a seperate .chi file by the .chm file, and 'MAN', 'RTF', -# 'XML', 'PDF' and 'PS' for the appropriate output formats. The environment -# variable DOXYGEN_PAPER_SIZE may be specified to override the default 'a4wide' -# paper size. -# -# By default, HTML, PDF and PS documentation is generated as this seems to be -# the most popular and portable combination. MAN pages created by Doxygen are -# usually problematic, though by picking an appropriate subset and doing some -# massaging they might be better than nothing. CHM and RTF are specific for MS -# (note that you can't generate both HTML and CHM at the same time). The XML is -# rather useless unless you apply specialized post-processing to it. -# -# The macro mainly controls the default state of the feature. The use can -# override the default by specifying --enable or --disable. The macros ensure -# that contradictory flags are not given (e.g., --enable-doxygen-html and -# --enable-doxygen-chm, --enable-doxygen-anything with --disable-doxygen, etc.) -# Finally, each feature will be automatically disabled (with a warning) if the -# required programs are missing. -# -# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN with -# the following parameters: a one-word name for the project for use as a -# filename base etc., an optional configuration file name (the default is -# 'Doxyfile', the same as Doxygen's default), and an optional output directory -# name (the default is 'doxygen-doc'). - -## ----------## -## Defaults. ## -## ----------## - -DX_ENV="" -AC_DEFUN([DX_FEATURE_doc], ON) -AC_DEFUN([DX_FEATURE_dot], ON) -AC_DEFUN([DX_FEATURE_man], OFF) -AC_DEFUN([DX_FEATURE_html], ON) -AC_DEFUN([DX_FEATURE_chm], OFF) -AC_DEFUN([DX_FEATURE_chi], OFF) -AC_DEFUN([DX_FEATURE_rtf], OFF) -AC_DEFUN([DX_FEATURE_xml], OFF) -AC_DEFUN([DX_FEATURE_pdf], ON) -AC_DEFUN([DX_FEATURE_ps], ON) - -## --------------- ## -## Private macros. ## -## --------------- ## - -# DX_ENV_APPEND(VARIABLE, VALUE) -# ------------------------------ -# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen. -AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])]) - -# DX_DIRNAME_EXPR -# --------------- -# Expand into a shell expression prints the directory part of a path. -AC_DEFUN([DX_DIRNAME_EXPR], - [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) - -# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) -# ------------------------------------- -# Expands according to the M4 (static) status of the feature. -AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) - -# DX_REQUIRE_PROG(VARIABLE, PROGRAM) -# ---------------------------------- -# Require the specified program to be found for the DX_CURRENT_FEATURE to work. -AC_DEFUN([DX_REQUIRE_PROG], [ -AC_PATH_TOOL([$1], [$2]) -if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then - AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) - AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) -fi -]) - -# DX_TEST_FEATURE(FEATURE) -# ------------------------ -# Expand to a shell expression testing whether the feature is active. -AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) - -# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) -# ------------------------------------------------- -# Verify that a required features has the right state before trying to turn on -# the DX_CURRENT_FEATURE. -AC_DEFUN([DX_CHECK_DEPEND], [ -test "$DX_FLAG_$1" = "$2" \ -|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, - requires, contradicts) doxygen-DX_CURRENT_FEATURE]) -]) - -# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) -# ---------------------------------------------------------- -# Turn off the DX_CURRENT_FEATURE if the required feature is off. -AC_DEFUN([DX_CLEAR_DEPEND], [ -test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_[]DX_CURRENT_FEATURE], 0) -]) - -# DX_FEATURE_ARG(FEATURE, DESCRIPTION, -# CHECK_DEPEND, CLEAR_DEPEND, -# REQUIRE, DO-IF-ON, DO-IF-OFF) -# -------------------------------------------- -# Parse the command-line option controlling a feature. CHECK_DEPEND is called -# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), -# otherwise CLEAR_DEPEND is called to turn off the default state if a required -# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional -# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and -# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. -AC_DEFUN([DX_ARG_ABLE], [ - AC_DEFUN([DX_CURRENT_FEATURE], [$1]) - AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) - AC_ARG_ENABLE(doxygen-$1, - [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], - [--enable-doxygen-$1]), - DX_IF_FEATURE([$1], [don't $2], [$2]))], - [ -case "$enableval" in -#( -y|Y|yes|Yes|YES) - AC_SUBST([DX_FLAG_$1], 1) - $3 -;; #( -n|N|no|No|NO) - AC_SUBST([DX_FLAG_$1], 0) -;; #( -*) - AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) -;; -esac -], [ -AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) -$4 -]) -if DX_TEST_FEATURE([$1]); then - $5 - : -fi -if DX_TEST_FEATURE([$1]); then - AM_CONDITIONAL(DX_COND_$1, :) - $6 - : -else - AM_CONDITIONAL(DX_COND_$1, false) - $7 - : -fi -]) - -## -------------- ## -## Public macros. ## -## -------------- ## - -# DX_XXX_FEATURE(DEFAULT_STATE) -# ----------------------------- -AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) -AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) -AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) -AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) -AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) -AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) -AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) -AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) -AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) -AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) - -# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR]) -# --------------------------------------------------------- -# PROJECT also serves as the base name for the documentation files. -# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc". -AC_DEFUN([DX_INIT_DOXYGEN], [ - -# Files: -AC_SUBST([DX_PROJECT], [$1]) -AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])]) -AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])]) - -# Environment variables used inside doxygen.cfg: -DX_ENV_APPEND(SRCDIR, $srcdir) -DX_ENV_APPEND(PROJECT, $DX_PROJECT) -DX_ENV_APPEND(DOCDIR, $DX_DOCDIR) -DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) - -# Doxygen itself: -DX_ARG_ABLE(doc, [generate any doxygen documentation], - [], - [], - [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) - DX_REQUIRE_PROG([DX_PERL], perl)], - [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) - -# Dot for graphics: -DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [DX_REQUIRE_PROG([DX_DOT], dot)], - [DX_ENV_APPEND(HAVE_DOT, YES) - DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], - [DX_ENV_APPEND(HAVE_DOT, NO)]) - -# Man pages generation: -DX_ARG_ABLE(man, [generate doxygen manual pages], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [], - [DX_ENV_APPEND(GENERATE_MAN, YES)], - [DX_ENV_APPEND(GENERATE_MAN, NO)]) - -# RTF file generation: -DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [], - [DX_ENV_APPEND(GENERATE_RTF, YES)], - [DX_ENV_APPEND(GENERATE_RTF, NO)]) - -# XML file generation: -DX_ARG_ABLE(xml, [generate doxygen XML documentation], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [], - [DX_ENV_APPEND(GENERATE_XML, YES)], - [DX_ENV_APPEND(GENERATE_XML, NO)]) - -# (Compressed) HTML help generation: -DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [DX_REQUIRE_PROG([DX_HHC], hhc)], - [DX_ENV_APPEND(HHC_PATH, $DX_HHC) - DX_ENV_APPEND(GENERATE_HTML, YES) - DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], - [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) - -# Seperate CHI file generation. -DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file], - [DX_CHECK_DEPEND(chm, 1)], - [DX_CLEAR_DEPEND(chm, 1)], - [], - [DX_ENV_APPEND(GENERATE_CHI, YES)], - [DX_ENV_APPEND(GENERATE_CHI, NO)]) - -# Plain HTML pages generation: -DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], - [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], - [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], - [], - [DX_ENV_APPEND(GENERATE_HTML, YES)], - [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) - -# PostScript file generation: -DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [DX_REQUIRE_PROG([DX_LATEX], latex) - DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) - DX_REQUIRE_PROG([DX_DVIPS], dvips) - DX_REQUIRE_PROG([DX_EGREP], egrep)]) - -# PDF file generation: -DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], - [DX_CHECK_DEPEND(doc, 1)], - [DX_CLEAR_DEPEND(doc, 1)], - [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) - DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) - DX_REQUIRE_PROG([DX_EGREP], egrep)]) - -# LaTeX generation for PS and/or PDF: -if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then - AM_CONDITIONAL(DX_COND_latex, :) - DX_ENV_APPEND(GENERATE_LATEX, YES) -else - AM_CONDITIONAL(DX_COND_latex, false) - DX_ENV_APPEND(GENERATE_LATEX, NO) -fi - -# Paper size for PS and/or PDF: -AC_ARG_VAR(DOXYGEN_PAPER_SIZE, - [a4wide (default), a4, letter, legal or executive]) -case "$DOXYGEN_PAPER_SIZE" in -#( -"") - AC_SUBST(DOXYGEN_PAPER_SIZE, "") -;; #( -a4wide|a4|letter|legal|executive) - DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) -;; #( -*) - AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) -;; -esac - -#For debugging: -#echo DX_FLAG_doc=$DX_FLAG_doc -#echo DX_FLAG_dot=$DX_FLAG_dot -#echo DX_FLAG_man=$DX_FLAG_man -#echo DX_FLAG_html=$DX_FLAG_html -#echo DX_FLAG_chm=$DX_FLAG_chm -#echo DX_FLAG_chi=$DX_FLAG_chi -#echo DX_FLAG_rtf=$DX_FLAG_rtf -#echo DX_FLAG_xml=$DX_FLAG_xml -#echo DX_FLAG_pdf=$DX_FLAG_pdf -#echo DX_FLAG_ps=$DX_FLAG_ps -#echo DX_ENV=$DX_ENV -]) diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/as-compiler-flag.m4 --- a/gmyth-upnp/m4/as-compiler-flag.m4 Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -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.1.1 2005/08/26 00:42:44 andrunko 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]) -]) - diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/as-expand.m4 --- a/gmyth-upnp/m4/as-expand.m4 Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR) -dnl -dnl example -dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) -dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local - -AC_DEFUN([AS_AC_EXPAND], -[ - EXP_VAR=[$1] - FROM_VAR=[$2] - - dnl first expand prefix and exec_prefix if necessary - prefix_save=$prefix - exec_prefix_save=$exec_prefix - - dnl if no prefix given, then use /usr/local, the default prefix - if test "x$prefix" = "xNONE"; then - prefix=$ac_default_prefix - fi - dnl if no exec_prefix given, then use prefix - if test "x$exec_prefix" = "xNONE"; then - exec_prefix=$prefix - fi - - full_var="$FROM_VAR" - dnl loop until it doesn't change anymore - while true; do - new_full_var="`eval echo $full_var`" - if test "x$new_full_var"="x$full_var"; then break; fi - full_var=$new_full_var - done - - dnl clean up - full_var=$new_full_var - AC_SUBST([$1], "$full_var") - - dnl restore prefix and exec_prefix - prefix=$prefix_save - exec_prefix=$exec_prefix_save -]) diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/as-version.m4 --- a/gmyth-upnp/m4/as-version.m4 Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -dnl version.m4 0.0.5 -dnl autostars m4 macro for versioning -dnl thomas@apestaart.org -dnl -dnl AS_VERSION(PACKAGE, PREFIX, MAJOR, MINOR, MICRO, NANO, 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 -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 - -AC_DEFUN([AS_VERSION], -[ - PACKAGE=[$1] - [$2]_MAJOR_VERSION=[$3] - [$2]_MINOR_VERSION=[$4] - [$2]_MICRO_VERSION=[$5] - NANO=[$6] - [$2]_NANO_VERSION=$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=`date +%Y%m%d_%H%M%S` - dnl execute action - ifelse([$8], , :, [$8]) - fi - - [$2]_VERSION=$VERSION - AC_DEFINE_UNQUOTED([$2]_VERSION, "$[$2]_VERSION", [Define the version]) - AC_SUBST([$2]_VERSION) - - AC_SUBST([$2]_RELEASE) - - AC_SUBST([$2]_MAJOR_VERSION) - AC_SUBST([$2]_MINOR_VERSION) - AC_SUBST([$2]_MICRO_VERSION) - AC_SUBST([$2]_NANO_VERSION) - AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define the package name]) - AC_SUBST(PACKAGE) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Define the version]) - AC_SUBST(VERSION) -]) diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/m4/configure.ac --- a/gmyth-upnp/m4/configure.ac Fri Feb 01 19:22:17 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.50) - -AC_INIT([gmyth],[0.1]) - -dnl AC_CONFIG_SRCDIR([src/mmyth_main.c]) -AC_CONFIG_HEADER(config.h) - -dnl when going to/from release please set the nano (fourth number) right ! -dnl releases only do Wall, SVN and prerelease does Werror too -AS_VERSION(gmyth, GMYTH, 0, 1, 0, 3, GMYTH_SVN="no", GMYTH_SVN="yes") - -GMYTH_MAJORMINOR=$GMYTH_MAJOR_VERSION.$GMYTH_MINOR_VERSION - -AC_SUBST(GMYTH_MAJORMINOR) - -dnl AM_MAINTAINER_MODE provides the option to enable maintainer mode -AM_MAINTAINER_MODE -dnl make aclocal work in maintainer mode -AC_SUBST(ACLOCAL_AMFLAGS, "-I m4") - -# Checks for programs. -# check for tools -# Make sure CFLAGS is defined to stop AC_PROC_CC adding -g -CFLAGS="$CFLAGS -Wall" -AC_PROG_CC -AC_PROG_LIBTOOL - -dnl Generate doxygen documentation -DX_HTML_FEATURE(ON) -DX_CHM_FEATURE(OFF) -DX_CHI_FEATURE(OFF) -DX_MAN_FEATURE(OFF) -DX_RTF_FEATURE(OFF) -DX_XML_FEATURE(OFF) -DX_PDF_FEATURE(OFF) -DX_PS_FEATURE(OFF) -DX_INIT_DOXYGEN(gmyth, doxygen.cfg, docs) - - -# Checks for libraries. - -# Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h unistd.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_PID_T -AC_STRUCT_TM - -# Checks for library functions. -AC_FUNC_FORK -AC_PROG_GCC_TRADITIONAL -AC_FUNC_MALLOC -AC_FUNC_MKTIME -AC_FUNC_VPRINTF -AC_CHECK_FUNCS([memset socket stime strstr strtoul]) - -AM_INIT_AUTOMAKE($PACKAGE, $VERSION) - -# Checks required packages - -dnl Test if --disable-debug given -AC_ARG_ENABLE(debug, - [AC_HELP_STRING([--disable-debug], [disable debugging mode])], - enable_debug="$enableval", - enable_debug=yes) - -if test "x$enable_debug" = "xyes" ; then - CFLAGS="$CFLAGS -g" -else - AC_DEFINE( NDEBUG, 1, [disable debug messages] ) - CFLAGS="$CFLAGS -O2 -DG_DISABLE_CHECKS -DNDEBUG" -fi - -AM_CONDITIONAL( NDEBUG, test "x$enable_debug" = "xyes" ) - -# Check for pkgconfig -AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, yes, no) -# Give error and exit if we don't have pkgconfig -if test "x$HAVE_PKGCONFIG" = "xno"; then - AC_MSG_ERROR(you need to have pkgconfig installed !) -fi - -# Check for Glib2.0 -PKG_CHECK_MODULES(GLIB, glib-2.0, HAVE_GLIB=yes,HAVE_GLIB=no) - -# Give error and exit if we don't have glib -if test "x$HAVE_GLIB" = "xno"; then - AC_MSG_ERROR(you need glib-2.0 installed) -fi - -# make GLIB_CFLAGS and GLIB_LIBS available -AC_SUBST(GLIB_CFLAGS) -AC_SUBST(GLIB_LIBS) - -# Check for GObject2.0 -PKG_CHECK_MODULES(GOBJECT, - gobject-2.0, - HAVE_GOBJECT=yes, HAVE_GOBJECT=no) - -# Give error and exit if we don't have gobject -if test "x$HAVE_GOBJECT" = "xno"; then - AC_MSG_ERROR(you need gobject-2.0 installed) -fi - -# make GOBJECT_CFLAGS and GOBJECT_LIBS available -AC_SUBST(GOBJECT_CFLAGS) -AC_SUBST(GOBJECT_LIBS) - -# Check for GTK+-2.0 -PKG_CHECK_MODULES(GTK, gtk+-2.0, HAVE_GTK=yes,HAVE_GTK=no) - -# Give error and exit if we don't have gtk -if test "x$HAVE_GTK" = "xyes"; then - AC_DEFINE(WITH_GTK, 1, [build with GTK+ related stuff]) - dnl AC_MSG_ERROR(you need gtk+-2.0 installed) -else - AC_MSG_RESULT(no) -fi - -AM_CONDITIONAL(WITH_GTK, test "x$HAVE_GTK" = "xyes" ) - -# make GTK_CFLAGS and GTK_LIBS available -AC_SUBST(GTK_CFLAGS) -AC_SUBST(GTK_LIBS) - -dnl ========== Check for Hildon Libraries -PKG_CHECK_MODULES(HILDON, - hildon-lgpl libosso hildon-status-bar-lib libhildonmenu hildon-base-lib hildon-control-panel hildon-libs, - HAVE_HILDON=yes, HAVE_HILDON=no) - -if test "x$HAVE_HILDON" = "xyes"; then - AC_DEFINE(MAEMO_PLATFORM, 1, [build with hildon libs]) - HILDON_CFLAGS="$HILDON_CFLAGS -DMAEMO_PLATFORM=1" -else - AC_MSG_RESULT(no) -fi - -AM_CONDITIONAL(MAEMO_PLATFORM, test "x$HAVE_HILDON" = "xyes") - -dnl make HILDON_CFLAGS and HILDON_LIBS available -AC_SUBST(HILDON_CFLAGS) -AC_SUBST(HILDON_LIBS) - -# Check for libxml-2.0 -PKG_CHECK_MODULES(LIBXML, libxml-2.0, HAVE_LIBXML=yes,HAVE_LIBXML=no) - -# Give error and exit if we don't have libxml -if test "x$HAVE_LIBXML" = "xno"; then - AC_MSG_ERROR(you need libxml-2.0 installed) -fi - -# make LIBXML_CFLAGS and LIBXML_LIBS available -AC_SUBST(LIBXML_CFLAGS) -AC_SUBST(LIBXML_LIBS) - - -# check for gstreamer development files -GST_REQUIRED=0.10 -GST_MAJORMINOR=0.10 -PKG_CHECK_MODULES(GST, \ - gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED, - HAVE_GST=yes, HAVE_GST=no) - -# Give error and exit if we don't have gstreamer -if test "x$HAVE_GST" = "xno"; then - AC_MSG_ERROR(you need gstreamer development packages installed !) -fi - -# make GST_CFLAGS and GST_LIBS available -AC_SUBST(GST_CFLAGS) -AC_SUBST(GST_LIBS) - -# check for gstreamer-base plugins (xoverlay interface) -GSTBASE_REQUIRED=0.10 -GSTBASE_MAJORMINOR=0.10 -PKG_CHECK_MODULES(GSTBASE, \ - gstreamer-base-$GSTBASE_MAJORMINOR >= $GSTBASE_REQUIRED, - HAVE_GSTBASE=yes, HAVE_GSTBASE=no) - -# Give error and exit if we don't have gstreamer base libraries -if test "x$HAVE_GSTBASE" = "xno"; then - AC_MSG_ERROR(you need gstreamer base development packages installed !) -fi - -# make GSTBASE_CFLAGS and GSTBASE_LIBS available -AC_SUBST(GSTBASE_CFLAGS) -AC_SUBST(GSTBASE_LIBS) - - -# make GST_MAJORMINOR available in Makefile.am -AC_SUBST(GST_MAJORMINOR) - -# -# mysql libraries -# -AC_CHECK_PROG(MYSQL_CFLAGS,mysql_config,`mysql_config --cflags`) -if test -z "$MYSQL_CFLAGS"; then - AC_MSG_ERROR([Could not find mysql_config script. Make sure the mysql client libraries are installed]) -fi -AC_SUBST(MYSQL_CFLAGS) - - -AC_CHECK_PROG(MYSQL_LIBS,mysql_config,`mysql_config --libs`) -if test -z "$MYSQL_LIBS"; then - AC_MSG_ERROR([Could not find mysql_config script. Make sure the mysql client libraries are installed]) -fi -AC_SUBST(MYSQL_LIBS) - -## Check for gmyth-0.1 - -PKG_CHECK_MODULES(LIBGMYTH, gmyth-0.1, HAVE_LIBGMYTH=yes,HAVE_LIBGMYTH=no) - -# Give error and exit if we don't have gmyth-0.1 -if test "x$HAVE_LIBGMYTH" = "xno"; then - AC_MSG_ERROR(you need gmyth-0.1 installed) -fi - -# make LIBXML_CFLAGS and LIBXML_LIBS available -AC_SUBST(LIBGMYTH_CFLAGS) -AC_SUBST(LIBGMYTH_LIBS) - -#dnl Enable gtk-doc -#GTK_DOC_CHECK(1.4) - - -AC_CONFIG_FILES([Makefile - src/Makefile - pixmaps/Makefile]) -AC_OUTPUT diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/src/Makefile.am --- a/gmyth-upnp/src/Makefile.am Fri Feb 01 19:22:17 2008 +0000 +++ b/gmyth-upnp/src/Makefile.am Fri Feb 01 22:17:33 2008 +0000 @@ -27,12 +27,12 @@ libgmythupnp_la_CFLAGS = \ -DDATADIR=\"$(pkgdatadir)\" \ $(LIBGMYTH_CFLAGS) \ - $(CYBERLINK_CFLAGS) + $(LIBUPNP_CFLAGS) libgmythupnp_la_LDFLAGS = \ -export-dynamic \ $(LIBGMYTH_LIBS) \ - $(CYBERLINK_LIBS) + $(LIBUPNP_LIBS) libgmythupnp_includedir = \ $(pkgincludedir) diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/src/gmyth_upnp.c --- a/gmyth-upnp/src/gmyth_upnp.c Fri Feb 01 19:22:17 2008 +0000 +++ b/gmyth-upnp/src/gmyth_upnp.c Fri Feb 01 22:17:33 2008 +0000 @@ -30,64 +30,69 @@ #endif #include "gmyth_upnp.h" -#include "gmyth_upnp_marshal.h" -#include -#include -#include -#include -#include -#include +#include +#include +#include -#include -#include -#include -#include -/* - * Maximum number of searches in the synchronized search - */ -#define GMYTH_UPNP_MAX_SEARCHS 10 +#define UPNP_SEARCH_TIMEOUT 5 +#define UPNP_SERVICE_FILTER "urn:schemas-mythtv-org:service:MythTv:1" +#define SERVER_ID "MythTV AV Media Server" + +typedef struct _GMythUPnPPrivate GMythUPnPPrivate; +typedef struct _GMythUPnPIdleData GMythUPnPIdleData; #define GMYTH_UPNP_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GMYTH_UPNP_TYPE, GMythUPnPPrivate)) +enum +{ + DEVICE_FOUND, + DEVICE_LOST, + LAST_SIGNAL +}; + +struct _GMythUPnPIdleData +{ + GMythUPnP *parent; + GMythBackendInfo *server; +}; + struct _GMythUPnPPrivate { - GHashTable *mythtv_servers; + GHashTable *servers; GMythUPnPDeviceStatus last_status; gboolean upnp_dev_found; gchar *udn; GMutex *mutex; + gint idle_count; + + /* upnp */ + UpnpClient_Handle client_id; }; -static void gmyth_upnp_class_init(GMythUPnPClass * klass); -static void gmyth_upnp_init(GMythUPnP * object); +static void gmyth_upnp_class_init (GMythUPnPClass* klass); +static void gmyth_upnp_init (GMythUPnP* object); +static void gmyth_upnp_dispose (GObject* object); +static void gmyth_upnp_finalize (GObject* object); +static GObject* gmyth_upnp_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params); -static void gmyth_upnp_dispose(GObject * object); -static void gmyth_upnp_finalize(GObject * object); -static void _mythtv_device_found(GMythUPnP * gmyth_upnp, - GMythUPnPDeviceStatus status, - gchar * dev); -static void _clinkc_mythtv_device_found(gchar * udn, - GMythUPnPDeviceStatus status); +static int _upnp_event_handler (Upnp_EventType e_type, + void* e, + void* data); -static gboolean gmyth_upnp_initialize(GMythUPnP * gmyth_upnp, - GMythBackendInfo * - gmyth_backend_info, - GMythUPnPDeviceListener listener); -static gboolean gmyth_upnp_got_mythtv_service(CgUpnpControlPoint * - controlPt, gchar ** udn, - GHashTable ** - mythtv_servers_lst); +static int signals[LAST_SIGNAL] = {0}; -G_DEFINE_TYPE(GMythUPnP, gmyth_upnp, G_TYPE_OBJECT) +static GMythUPnP *singleton = NULL; - static GMythUPnP *gmyth_upnp_static = NULL; +G_DEFINE_TYPE(GMythUPnP, gmyth_upnp, G_TYPE_OBJECT); - static void - gmyth_upnp_class_init(GMythUPnPClass * klass) +static void +gmyth_upnp_class_init(GMythUPnPClass * klass) { GObjectClass *gobject_class; GMythUPnPClass *gupnp_class; @@ -97,347 +102,354 @@ gobject_class->dispose = gmyth_upnp_dispose; gobject_class->finalize = gmyth_upnp_finalize; + gobject_class->constructor = gmyth_upnp_constructor; - g_type_class_add_private(gobject_class, sizeof(GMythUPnPPrivate)); + g_type_class_add_private (gobject_class, sizeof(GMythUPnPPrivate)); - gupnp_class->device_found_handler = _mythtv_device_found; - gupnp_class->device_found_handler_signal_id = - g_signal_new("device-found", - G_TYPE_FROM_CLASS(gupnp_class), - G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | - G_SIGNAL_NO_HOOKS, 0, NULL, NULL, - gmyth_upnp_marshal_VOID__INT_STRING, G_TYPE_NONE, 2, - G_TYPE_INT, G_TYPE_STRING); + + signals[DEVICE_FOUND] = g_signal_new("device-found", + G_TYPE_FROM_CLASS(gupnp_class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + GMYTH_BACKEND_INFO_TYPE); + + signals[DEVICE_LOST] = g_signal_new("device-lost", + G_TYPE_FROM_CLASS(gupnp_class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + GMYTH_BACKEND_INFO_TYPE); } static void -gmyth_upnp_init(GMythUPnP * gmyth_upnp) +gmyth_upnp_init(GMythUPnP* self) { + gint ret; + GMythUPnPPrivate *priv; - gmyth_upnp->backend_info = NULL; + priv = GMYTH_UPNP_GET_PRIVATE (self); - gmyth_upnp->control_point = NULL; + priv->mutex = g_mutex_new (); + priv->servers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); - gmyth_upnp->priv = GMYTH_UPNP_GET_PRIVATE(gmyth_upnp); - gmyth_upnp->priv->mutex = g_mutex_new(); - gmyth_upnp->priv->upnp_dev_found = FALSE; + /* initalize upnp client */ + ret = UpnpInit (NULL, 0); + if (ret != UPNP_E_SUCCESS) + g_warning ("Fail to inilialize upnp SDK: %d", ret); + else + { + ret = UpnpRegisterClient (_upnp_event_handler, + &priv->client_id, &priv->client_id); - g_signal_connect(G_OBJECT(gmyth_upnp), "device-found", - (GCallback) (GMYTH_UPNP_GET_CLASS(gmyth_upnp)-> - device_found_handler), NULL); - - gmyth_upnp_static = gmyth_upnp; - + if (ret != UPNP_E_SUCCESS) + g_warning ("Fail to start upnp client: %d", ret); + } } -/** Creates a new instance of GMythUPnP. - * - * @return a new instance of GMythUPnP. - */ -GMythUPnP * -gmyth_upnp_new(GMythBackendInfo * gmyth_backend_info, - GMythUPnPDeviceListener handler) +static GObject* +gmyth_upnp_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) { - GMythUPnP *gmyth_upnp = - GMYTH_UPNP(g_object_new(GMYTH_UPNP_TYPE, NULL)); + GObject *object; - g_object_ref(gmyth_backend_info); + if (!singleton) + { + object = G_OBJECT_CLASS (gmyth_upnp_parent_class)->constructor (type, + n_construct_params, + construct_params); - gmyth_upnp->backend_info = gmyth_backend_info; + singleton = GMYTH_UPNP (object); + } + else + object = g_object_ref (G_OBJECT (singleton)); - if (!gmyth_upnp_initialize(gmyth_upnp, gmyth_backend_info, handler)) { - gmyth_debug("Error initializing the GMythUPnP!!!"); - } - - return gmyth_upnp; + return object; } static void gmyth_upnp_dispose(GObject * object) { - GMythUPnP *gmyth_upnp = GMYTH_UPNP(object); - - if (gmyth_upnp->control_point != NULL) { - cg_upnp_controlpoint_stop(gmyth_upnp->control_point); - cg_upnp_controlpoint_delete(gmyth_upnp->control_point); - gmyth_upnp->control_point = NULL; - } - - if (gmyth_upnp->priv->mythtv_servers != NULL) { - g_hash_table_destroy(gmyth_upnp->priv->mythtv_servers); - gmyth_upnp->priv->mythtv_servers = NULL; - } - - if (gmyth_upnp->backend_info != NULL) { - g_object_unref(gmyth_upnp->backend_info); - gmyth_upnp->backend_info = NULL; - } - + /* finalize upnp client */ + UpnpFinish (); G_OBJECT_CLASS(gmyth_upnp_parent_class)->dispose(object); } static void gmyth_upnp_finalize(GObject * object) { - g_signal_handlers_destroy(object); - G_OBJECT_CLASS(gmyth_upnp_parent_class)->finalize(object); + singleton = NULL; } -gchar * -gmyth_upnp_device_status_to_string(GMythUPnPDeviceStatus status) + +GMythUPnP* +gmyth_upnp_get_instance (void) { - if (status == CgUpnpDeviceStatusAdded) - return "Added"; - else if (status == CgUpnpDeviceStatusUpdated) - return "Updated"; - else if (status == CgUpnpDeviceStatusInvalid) - return "Invalid"; - else if (status == CgUpnpDeviceStatusRemoved) - return "Removed"; - - return ""; + return GMYTH_UPNP(g_object_new(GMYTH_UPNP_TYPE, NULL)); } -/** - * GObject's signal handler - */ -static void -_mythtv_device_found(GMythUPnP * gmyth_upnp, GMythUPnPDeviceStatus status, - gchar * udn) + +void +gmyth_upnp_search (GMythUPnP *self) { - g_debug("Device: [status = %s, UDN = %s]\n", - gmyth_upnp_device_status_to_string(status), udn); + int ret; + GMythUPnPPrivate *priv; + + priv = GMYTH_UPNP_GET_PRIVATE (self); + + ret = UpnpSearchAsync (priv->client_id, + UPNP_SEARCH_TIMEOUT, + UPNP_SERVICE_FILTER, + NULL); + + if (ret != UPNP_E_SUCCESS) + g_warning ("Fail to start upnp listener: %d", ret); } -/** - * GObject's signal handler - */ -static void -_clinkc_mythtv_device_found(gchar * udn, GMythUPnPDeviceStatus status) +static gboolean +_idle_emit_device_found_signal (gpointer data) { - if (gmyth_upnp_static != NULL && udn != NULL) - g_signal_emit(gmyth_upnp_static, GMYTH_UPNP_GET_CLASS(gmyth_upnp_static)->device_found_handler_signal_id, 0, /* details - */ - status, udn); + GMythUPnPPrivate *priv; + GMythUPnPIdleData *idle_data; + + idle_data = (GMythUPnPIdleData *) data; + priv = GMYTH_UPNP_GET_PRIVATE (idle_data->parent); + + g_signal_emit (idle_data->parent, signals[DEVICE_FOUND], 0, idle_data->server); + + g_object_unref (idle_data->server); + g_free (idle_data); + priv->idle_count--; + + return FALSE; } -/** - * Create a control point and start it. - */ -static gboolean -gmyth_upnp_initialize(GMythUPnP * gmyth_upnp, - GMythBackendInfo * gmyth_backend_info, - GMythUPnPDeviceListener device_found_handler) +static gboolean +_idle_emit_device_lost_signal (gpointer data) { - gboolean ret = TRUE; + GMythUPnPPrivate *priv; + GMythUPnPIdleData *idle_data; - g_return_val_if_fail(gmyth_backend_info != NULL, FALSE); + idle_data = (GMythUPnPIdleData *) data; + priv = GMYTH_UPNP_GET_PRIVATE (idle_data->parent); - /* - * Create the cybergarage control point - */ - gmyth_upnp->control_point = cg_upnp_controlpoint_new(); + g_signal_emit (idle_data->parent, signals[DEVICE_LOST], 0, idle_data->server); - if (device_found_handler != NULL) { - GMYTH_UPNP_GET_CLASS(gmyth_upnp)->device_found_handler = - device_found_handler; + g_object_unref (idle_data->server); + g_free (idle_data); + priv->idle_count--; - cg_upnp_controlpoint_setdevicelistener(gmyth_upnp->control_point, - _clinkc_mythtv_device_found); + return FALSE; +} + +static char* +_xml_get_first_document_item (IXML_Document * doc, + const gchar *item ) +{ + IXML_NodeList *node_list = NULL; + IXML_Node *text_node = NULL; + IXML_Node *tmp_node = NULL; + + gchar *ret = NULL; + + node_list = ixmlDocument_getElementsByTagName (doc, + (char *) item); + + if (node_list) + { + if ((tmp_node = ixmlNodeList_item (node_list, 0))) + { + text_node = ixmlNode_getFirstChild (tmp_node); + + ret = strdup (ixmlNode_getNodeValue (text_node)); + } } - /* - * Start the control point - */ - if (cg_upnp_controlpoint_start(gmyth_upnp->control_point) == FALSE) { - gmyth_debug("Unable to start UPnP control point!!!"); - ret = FALSE; - goto done; - } else { - gmyth_debug("Control point started."); - } - - done: + if (node_list) + ixmlNodeList_free (node_list); return ret; } + static void -_gmyth_foreach_key_value(gchar * udn, gchar * dev, - GList * upnp_servers_list) +_append_mythtv_server_from_loation (GMythUPnP *self, + const gchar *uuid, + const gchar *location) { - GMythUPnPDevice *gmyth_upnp = g_malloc0(sizeof(GMythUPnPDevice)); + GMythUPnPPrivate *priv; + gchar *base_url; + gchar *end; - GMythURI *uri = NULL; - gmyth_upnp->uri = (gchar *) (dev); - uri = gmyth_uri_new_with_value(gmyth_upnp->uri); + priv = GMYTH_UPNP_GET_PRIVATE (self); - gmyth_upnp->host = gmyth_uri_get_host(uri); - gmyth_upnp->port = gmyth_uri_get_port(uri); - gmyth_upnp->protocol = gmyth_uri_get_protocol(uri); + base_url = g_strdup (location); + end = g_strrstr (base_url, "/"); + if (end) + { + gint ret; + IXML_Document *desc_doc; + gchar *info_url; - gmyth_debug("MythTV UPnP service [ %s, %d ].", gmyth_upnp->host, - gmyth_upnp->port); + end[0] = '\0'; + info_url = g_strconcat (base_url, + "Myth/GetConnectionInfo", + NULL); + g_free (base_url); + desc_doc = NULL; + ret = UpnpDownloadXmlDoc (info_url, &desc_doc); + if (ret != UPNP_E_SUCCESS) + { + g_warning ("Error obtaining device desc: %d", ret); + } + else + { + GMythBackendInfo *info; + GMythUPnPIdleData *idle_data; - upnp_servers_list = g_list_append(upnp_servers_list, gmyth_upnp); + info = gmyth_backend_info_new_full ( + _xml_get_first_document_item (desc_doc, "Host"), + _xml_get_first_document_item (desc_doc, "UserName"), + _xml_get_first_document_item (desc_doc, "Password"), + _xml_get_first_document_item (desc_doc, "Name"), + // Current mythtv version not export port number + 6543); - if (uri != NULL) { - g_object_unref(uri); - uri = NULL; + if (desc_doc) + ixmlDocument_free (desc_doc); + + g_mutex_lock (priv->mutex); + g_hash_table_insert (priv->servers, + g_strdup (uuid), + g_object_ref (info)); + g_mutex_unlock (priv->mutex); + g_debug ("info url: %s", info_url); + g_free (info_url); + + idle_data = g_new0 (GMythUPnPIdleData, 1); + idle_data->parent = self; + idle_data->server = g_object_ref (info); + + priv->idle_count++; + g_idle_add (_idle_emit_device_found_signal, idle_data); + } } +} + +static void +_remove_mythtv_server (GMythUPnP *self, + const gchar *uuid) +{ + GMythUPnPPrivate *priv; + GMythBackendInfo *info; + + priv = GMYTH_UPNP_GET_PRIVATE (self); + + g_mutex_lock (priv->mutex); + info = g_hash_table_lookup (priv->servers, uuid); + if (info) + { + GMythUPnPIdleData *idle_data; + + idle_data = g_new0 (GMythUPnPIdleData, 1); + idle_data->parent = self; + idle_data->server = g_object_ref (info); + + g_hash_table_remove (priv->servers, uuid); + + priv->idle_count++; + g_idle_add (_idle_emit_device_lost_signal, idle_data); + } + g_mutex_unlock (priv->mutex); } -GList * -gmyth_upnp_do_search_sync(GMythUPnP * gmyth_upnp) +static GMythBackendInfo* +_find_service_by_uuid (GMythUPnP *self, + const gchar *uuid) { - GList *upnp_servers_list = NULL; - guint iter_count = GMYTH_UPNP_MAX_SEARCHS; - /* - * gmyth_upnp->priv = GMYTH_UPNP_GET_PRIVATE( gmyth_upnp ); - */ + GMythUPnPPrivate *priv; + GMythBackendInfo *info; - while (gmyth_upnp->priv->upnp_dev_found == FALSE && (--iter_count > 0)) { + priv = GMYTH_UPNP_GET_PRIVATE (self); + info = NULL; - gmyth_debug - ("UPnP MythTV Client control point is searching MythTV AV Device server...\n"); + g_mutex_lock (priv->mutex); + info = g_hash_table_lookup (priv->servers, uuid); + g_mutex_unlock (priv->mutex); - if (gmyth_upnp->control_point != NULL) - cg_upnp_controlpoint_search(gmyth_upnp->control_point, - "urn:schemas-upnp-org:service:ContentDirectory:1"); - - /* - * just to avoid clinkc pthread concurrency faults - */ - cg_wait(1000); - - /* - * discover if it was found - */ - gmyth_upnp->priv->upnp_dev_found = - gmyth_upnp_got_mythtv_service(gmyth_upnp->control_point, - &gmyth_upnp->priv->udn, - &gmyth_upnp->priv-> - mythtv_servers); - - } /* while */ - - if (gmyth_upnp->priv->upnp_dev_found) { - - gmyth_debug("Found UPnP MythTV AV Device...\n"); - - g_hash_table_foreach(gmyth_upnp->priv->mythtv_servers, - (GHFunc) _gmyth_foreach_key_value, - upnp_servers_list); - - } - /* - * if - found UPnP device - */ - return upnp_servers_list; + return info; } -/** - * Checks if got the MythTV service in the Control Point's device list. - */ -static gboolean -gmyth_upnp_got_mythtv_service(CgUpnpControlPoint * controlPt, gchar ** udn, - GHashTable ** mythtv_servers_lst) +static int +_upnp_event_handler (Upnp_EventType e_type, + void* e, + void* data) { + g_return_val_if_fail (singleton != NULL, 0); - g_return_val_if_fail(mythtv_servers_lst != NULL, FALSE); - g_return_val_if_fail(controlPt != NULL, FALSE); + switch (e_type) + { + case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: + case UPNP_DISCOVERY_SEARCH_RESULT: + { + struct Upnp_Discovery *d_event; - *mythtv_servers_lst = g_hash_table_new(g_str_hash, g_str_equal); + d_event = (struct Upnp_Discovery *) e; - const gchar *mythtvFriendlyName = "Myth"; - /* - * begin assertion about the size of discovered devices - */ - gint numDevices = - cg_upnp_controlpoint_getndevices(controlPt); - gint cntDevs = 0; - CgUpnpDevice *childDev; - gchar *devName = NULL, - *dev_url = NULL; - gboolean upnp_dev_found = FALSE; + g_debug ("TYPE: %s", d_event->ServiceType); - gmyth_debug("UPnP MythTV AV Device list size = %d\n", numDevices); + if (strcmp (d_event->ServiceType, UPNP_SERVICE_FILTER) != 0) + { + g_debug ("invalid device : %s", d_event->DeviceId); + break; + } - for (childDev = cg_upnp_controlpoint_getdevices(controlPt); - childDev != NULL; childDev = cg_upnp_device_next(childDev)) { - devName = cg_upnp_device_getfriendlyname(childDev); - dev_url = cg_upnp_device_getlocationfromssdppacket(childDev); - gmyth_debug - ("Device's friendly name = %s, and device's URL = %s\n", - devName, dev_url); - if ((g_strstr_len(devName, strlen(devName), mythtvFriendlyName) != - NULL) == TRUE) { - upnp_dev_found = TRUE; - /* - * stores the last UDN number ID - */ - *udn = cg_upnp_device_getudn(childDev); - /* - *mythtv_servers_lst = g_list_append( *mythtv_servers_lst, dev_url ); */ - g_hash_table_insert(*mythtv_servers_lst, (gpointer) * udn, - (gpointer) dev_url); + + if (d_event->ErrCode != UPNP_E_SUCCESS) + { + g_warning ("Error in Discovery: %d", d_event->ErrCode); + break; + } + + if (_find_service_by_uuid (GMYTH_UPNP (singleton), d_event->DeviceId) == NULL) + _append_mythtv_server_from_loation (singleton, + d_event->DeviceId, + d_event->Location); + + + break; } - ++cntDevs; + case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: + { + GMythUPnPPrivate *priv; + struct Upnp_Discovery *d_event; + + d_event = (struct Upnp_Discovery *) e; + if (d_event->ErrCode != UPNP_E_SUCCESS) + { + g_warning ("Error in Discovery: %d", d_event->ErrCode); + break; + } + + priv = GMYTH_UPNP_GET_PRIVATE (singleton); + _remove_mythtv_server (singleton, + d_event->DeviceId); + + break; + + } + default: + g_debug ("No handle event: %d", e_type); + break; } - if (upnp_dev_found == TRUE) { - gmyth_debug - ("MythTV AV Device found, from a total of %d devices.\n", - cntDevs); - } else if (numDevices == cntDevs) { - gmyth_debug - ("MythTV AV Device not found, from a total of %d devices.\n", - cntDevs); - } else { - gmyth_debug - ("Control Point's MythTV AV Device count is wrong: iterated over %d devices, but there are %d registered devices.\n", - cntDevs, numDevices); - } - - return upnp_dev_found; - + return 0; } -/** Gets the UPnP AV devices server's list associated to this upnp. - * - * @return The GHashTable* containing all the URI values for each recognized UPnP device, - * or NULL if it couldn't recognize any MythTV AV device. - */ -GHashTable * -gmyth_upnp_get_servers(GMythUPnP * gmyth_upnp) -{ - - if (NULL == gmyth_upnp || NULL == gmyth_upnp->priv->mythtv_servers) { - gmyth_debug("[%s] GMythUPnP has no MythTV servers recognized.\n", - __FUNCTION__); - return NULL; - } - - return gmyth_upnp->priv->mythtv_servers; -} - -/** Gets the GMythBackendInfo object associated to this upnp. - * - * @return The GMythBackendInfo object currently valid or NULL if the settings - * were not opened. - */ -GMythBackendInfo * -gmyth_upnp_get_backend_info(GMythUPnP * gmyth_upnp) -{ - - if (NULL == gmyth_upnp || NULL == gmyth_upnp->backend_info) { - gmyth_debug("[%s] GMythUPnP not initialized\n", __FUNCTION__); - return NULL; - } - - return gmyth_upnp->backend_info; -} diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/src/gmyth_upnp.h --- a/gmyth-upnp/src/gmyth_upnp.h Fri Feb 01 19:22:17 2008 +0000 +++ b/gmyth-upnp/src/gmyth_upnp.h Fri Feb 01 22:17:33 2008 +0000 @@ -35,7 +35,6 @@ #include #include -#include #include G_BEGIN_DECLS @@ -47,7 +46,7 @@ #define GMYTH_UPNP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GMYTH_UPNP_TYPE, GMythUPnPClass)) typedef struct _GMythUPnP GMythUPnP; typedef struct _GMythUPnPClass GMythUPnPClass; -typedef struct _GMythUPnPPrivate GMythUPnPPrivate; +typedef struct _GMythUPnPDevice GMythUPnPDevice; /**************************************** * Data Type @@ -59,59 +58,25 @@ GMYTH_UPNP_DEVICE_REMOVED } GMythUPnPDeviceStatus; -typedef void (*GMythUPnPDeviceListener) (GMythUPnP * gmyth_upnp, - GMythUPnPDeviceStatus status, - gchar * dev); +struct _GMythUPnPDevice { + gchar *uri; + gchar *host; + gint port; + gchar *protocol; +}; + struct _GMythUPnPClass { GObjectClass parent_class; - - /* - * callbacks - */ - guint device_found_handler_signal_id; - - GMythUPnPDeviceListener device_found_handler; - - /* - * no one for now - */ }; -struct _GMythUPnPDevice { - gchar *uri; - gchar *host; - gint port; - gchar *protocol; +struct _GMythUPnP { + GObject parent; }; -typedef struct _GMythUPnPDevice GMythUPnPDevice; - -struct _GMythUPnP { - - GObject parent; - GMythUPnPPrivate *priv; - - - CgUpnpControlPoint *control_point; - - gchar *udn; - - GMythBackendInfo *backend_info; - - gboolean upnp_dev_found; -}; - -GType gmyth_upnp_get_type(void); -GMythUPnP *gmyth_upnp_new(GMythBackendInfo * gmyth_backend_info, - GMythUPnPDeviceListener handler); - -GList *gmyth_upnp_do_search_sync(GMythUPnP * gmyth_upnp); - -GMythBackendInfo *gmyth_upnp_get_backend_info(GMythUPnP * gmyth_upnp); - -gchar *gmyth_upnp_device_status_to_string(GMythUPnPDeviceStatus - status); +GType gmyth_upnp_get_type (void); +GMythUPnP* gmyth_upnp_get_instance (void); +void gmyth_upnp_search (GMythUPnP * gmyth_upnp); G_END_DECLS #endif /* _GMYTH_UPNP_H_ */ diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/test/Makefile.am --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gmyth-upnp/test/Makefile.am Fri Feb 01 22:17:33 2008 +0000 @@ -0,0 +1,18 @@ +LDADD = \ + $(GLIB_LIBS) \ + $(LIBUPNP_LIBS) \ + $(top_srcdir)/src/.libs/libgmythupnp.la + +INCLUDES = \ + -I$(top_srcdir)/src \ + $(GLIB_CFLAGS) \ + $(GOBJECT_CFLAGS) \ + $(LIBUPNP_CFLAGS) + +bin_PROGRAMS = \ + test + +test_SOURCES = \ + main.c + +CLEANFILES = $(BUILT_SOURCES) diff -r 46205cce5b8e -r 847da7267234 gmyth-upnp/test/main.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gmyth-upnp/test/main.c Fri Feb 01 22:17:33 2008 +0000 @@ -0,0 +1,49 @@ +#include + +#include "gmyth_upnp.h" + +static void +_device_found_cb (GMythUPnP *upnp, + GMythBackendInfo *info, + gpointer data) +{ + g_debug ("BACKEND FOUND: %s", info->hostname); +} + +static void +_device_lost_cb (GMythUPnP *upnp, + GMythBackendInfo *info, + gpointer data) +{ + g_debug ("BACKEND LOST: %s", info->hostname); +} + + + +int main (int argc, char** argv) +{ + GMythUPnP *o; + GMainLoop *loop; + + g_type_init (); + g_thread_init (NULL); + + o = gmyth_upnp_get_instance (); + g_signal_connect (o, + "device-found", + G_CALLBACK (_device_found_cb), + NULL); + g_signal_connect (o, + "device-lost", + G_CALLBACK (_device_lost_cb), + NULL); + + + gmyth_upnp_search (o); + + loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (loop); + g_object_unref (o); + + return 0; +}