diff options
-rw-r--r-- | debian/changelog | 8 | ||||
-rw-r--r-- | debian/prefs.py | 126 | ||||
-rwxr-xr-x | debian/rules | 5 |
3 files changed, 138 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog index 25e638202..ad9147291 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,12 @@ +gnuradio (3.3svn-1) unstable; urgency=high + + * Fix broken prefs.py when installed in --prefix=/usr + + -- Johnathan Corgan <jcorgan@corganenterprises.com> Sun, 06 Jul 2009 16:00:00 -0800 + gnuradio (3.3svn) unstable; urgency=low - * Development trunk updates as of packaging date + * Development trunk updates as of revision 11370 * See http://gnuradio.org/trac -- Johnathan Corgan <jcorgan@corganenterprises.com> Sun, 05 Jul 2009 18:00:00 -0800 diff --git a/debian/prefs.py b/debian/prefs.py new file mode 100644 index 000000000..452415b96 --- /dev/null +++ b/debian/prefs.py @@ -0,0 +1,126 @@ +# +# Copyright 2006,2009 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +import gnuradio_swig_python as gsp +_prefs_base = gsp.gr_prefs + + +import ConfigParser +import os +import os.path +import sys + + +def _user_prefs_filename(): + return os.path.expanduser('~/.gnuradio/config.conf') + +def _sys_prefs_dirname(): + return '/etc/gnuradio/conf.d' + +def _bool(x): + """ + Try to coerce obj to a True or False + """ + if isinstance(x, bool): + return x + if isinstance(x, (float, int)): + return bool(x) + raise TypeError, x + + +class _prefs(_prefs_base): + """ + Derive our 'real class' from the stubbed out base class that has support + for SWIG directors. This allows C++ code to magically and transparently + invoke the methods in this python class. + """ + def __init__(self): + _prefs_base.__init__(self) + self.cp = ConfigParser.RawConfigParser() + self.__getattr__ = lambda self, name: getattr(self.cp, name) + + def _sys_prefs_filenames(self): + dir = _sys_prefs_dirname() + try: + fnames = os.listdir(dir) + except (IOError, OSError): + return [] + fnames.sort() + return [os.path.join(dir, f) for f in fnames] + + def _read_files(self): + filenames = self._sys_prefs_filenames() + filenames.append(_user_prefs_filename()) + #print "filenames: ", filenames + self.cp.read(filenames) + + # ---------------------------------------------------------------- + # These methods override the C++ virtual methods of the same name + # ---------------------------------------------------------------- + def has_section(self, section): + return self.cp.has_section(section) + + def has_option(self, section, option): + return self.cp.has_option(section, option) + + def get_string(self, section, option, default_val): + try: + return self.cp.get(section, option) + except: + return default_val + + def get_bool(self, section, option, default_val): + try: + return self.cp.getboolean(section, option) + except: + return default_val + + def get_long(self, section, option, default_val): + try: + return self.cp.getint(section, option) + except: + return default_val + + def get_double(self, section, option, default_val): + try: + return self.cp.getfloat(section, option) + except: + return default_val + # ---------------------------------------------------------------- + # End override of C++ virtual methods + # ---------------------------------------------------------------- + + +_prefs_db = _prefs() + +# if GR_DONT_LOAD_PREFS is set, don't load them. +# (make check uses this to avoid interactions.) +if os.getenv("GR_DONT_LOAD_PREFS", None) is None: + _prefs_db._read_files() + + +_prefs_base.set_singleton(_prefs_db) # tell C++ what instance to use + +def prefs(): + """ + Return the global preference data base + """ + return _prefs_db diff --git a/debian/rules b/debian/rules index 42464ced9..edabac6fe 100755 --- a/debian/rules +++ b/debian/rules @@ -90,10 +90,15 @@ install-stamp: extract-stamp debian/control install -m 0644 -D debian/grc.conf \ debian/tmp/etc/gnuradio/conf.d/grc.conf + : # Install custom prefs.py FIXME + install -m 0644 -D debian/prefs.py \ + debian/tmp/usr/lib/python2.6/dist-packages/gnuradio/gr/prefs.py + dh_install --sourcedir=debian/tmp touch $@ + # Must not depend on anything. This is to be called by # binary-arch/binary-indep # in another 'make' thread. |