From 3b0db38361d6ff50d62d814e72eb1fdd0e5d762d Mon Sep 17 00:00:00 2001 From: jcorgan Date: Sat, 11 Jul 2009 02:34:31 +0000 Subject: [PATCH] Implements ticket:401 and ticket:402. Adds several API functions to determine build constants at runtime, and a convenience command line program to display them: From C++: const std::string gr_prefix(); const std::string gr_sysconfdir(); const std::string gr_prefsdir(); const std::string gr_build_date(); const std::string gr_svn_date(); const std::string gr_svn_version(); const std::string gr_version(); From Python: gr.prefix() gr.sysconfdir() gr.prefsdir() gr.build_date() gr.svn_date() gr.svn_version() gr.version() The new binary is 'gnuradio' and installed on the path: $ gnuradio Program options: gnuradio [options]: -h [ --help ] print help message --prefix print gnuradio installation prefix --sysconfdir print gnuradio system configuration directory --prefsdir print gnuradio preferences directory --builddate print gnuradio build date (RFC2822 format) -v [ --version ] print gnuradio version --svnversion print SVN repository version (SVN format) --svndate print SVN repository date $ git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@11418 221aa14e-8319-0410-a670-987f0aec2ac5 --- Makefile.common | 2 +- config/grc_gnuradio_core.m4 | 2 +- configure.ac | 23 +++++- gnuradio-core/Makefile.am | 2 +- gnuradio-core/src/lib/Makefile.am | 6 ++ gnuradio-core/src/lib/general/Makefile.am | 8 +- gnuradio-core/src/lib/general/general.i | 4 +- .../{gr_prefix.cc.in => gr_constants.cc.in} | 44 +++++++++- .../general/{gr_prefix.h => gr_constants.h} | 37 ++++++++- gnuradio-core/src/lib/general/gr_constants.i | 17 ++++ gnuradio-core/src/lib/general/gr_prefix.i | 5 -- gnuradio-core/src/lib/gnuradio.cc | 80 +++++++++++++++++++ gnuradio-core/src/python/gnuradio/gr/prefs.py | 2 +- gr-audio-alsa/Makefile.am | 2 +- gr-audio-jack/Makefile.am | 2 +- gr-audio-oss/Makefile.am | 2 +- gr-audio-portaudio/Makefile.am | 2 +- gr-wxgui/Makefile.am | 2 +- grc/Makefile.am | 2 +- 19 files changed, 215 insertions(+), 29 deletions(-) rename gnuradio-core/src/lib/general/{gr_prefix.cc.in => gr_constants.cc.in} (62%) rename gnuradio-core/src/lib/general/{gr_prefix.h => gr_constants.h} (52%) create mode 100644 gnuradio-core/src/lib/general/gr_constants.i delete mode 100644 gnuradio-core/src/lib/general/gr_prefix.i create mode 100644 gnuradio-core/src/lib/gnuradio.cc diff --git a/Makefile.common b/Makefile.common index 14cbe269..13804535 100644 --- a/Makefile.common +++ b/Makefile.common @@ -115,7 +115,7 @@ docdir ?= $(datadir)/doc/$(PACKAGE) gr_docdir = $(docdir)-$(VERSION) # System configuration files -gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d +gr_prefsdir = $(GR_PREFSDIR) # Other common defines; use "+=" to add to these STAMPS = diff --git a/config/grc_gnuradio_core.m4 b/config/grc_gnuradio_core.m4 index a1724aea..3e4cbdf4 100644 --- a/config/grc_gnuradio_core.m4 +++ b/config/grc_gnuradio_core.m4 @@ -86,7 +86,7 @@ AC_DEFUN([GRC_GNURADIO_CORE],[ gnuradio-core/src/lib/filter/Makefile \ gnuradio-core/src/lib/g72x/Makefile \ gnuradio-core/src/lib/general/Makefile \ - gnuradio-core/src/lib/general/gr_prefix.cc \ + gnuradio-core/src/lib/general/gr_constants.cc \ gnuradio-core/src/lib/gengen/Makefile \ gnuradio-core/src/lib/io/Makefile \ gnuradio-core/src/lib/missing/Makefile \ diff --git a/configure.ac b/configure.ac index 548cfdb1..92de3e95 100644 --- a/configure.ac +++ b/configure.ac @@ -26,7 +26,10 @@ AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE(gnuradio,3.3svn) + +VERSION=3.3svn +AC_SUBST(VERSION) +AM_INIT_AUTOMAKE(gnuradio,$VERSION) DEFINES="" AC_SUBST(DEFINES) @@ -286,9 +289,25 @@ dnl AX_BOOST_WSERIALIZATION dnl If this is being done from a subversion tree, create variables GR_SUBVERSION -BUILD_DATE=`date -R` +BUILD_DATE=`date -R -u` AC_SUBST(BUILD_DATE) +dnl SYSCONFDIR substitution +if test "${sysconfdir}" == "\${prefix}/etc" ; then + if test "${prefix}" == "NONE" ; then + SYSCONFDIR=["$ac_default_prefix/etc"] + else + SYSCONFDIR=["${prefix}/etc"] + fi +else + SYSCONFDIR=[${sysconfdir}] +fi +AC_SUBST(SYSCONFDIR) + +dnl System configuration files +GR_PREFSDIR=[$SYSCONFDIR/${PACKAGE}/conf.d] +AC_SUBST(GR_PREFSDIR) + dnl Component specific configuration dnl The order of the GR_ macros determines the order of compilation dnl For -any- checks on $enable_all_components diff --git a/gnuradio-core/Makefile.am b/gnuradio-core/Makefile.am index d5447c17..107ff785 100644 --- a/gnuradio-core/Makefile.am +++ b/gnuradio-core/Makefile.am @@ -29,5 +29,5 @@ SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gnuradio-core.pc -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = gnuradio-core.conf diff --git a/gnuradio-core/src/lib/Makefile.am b/gnuradio-core/src/lib/Makefile.am index ef2b17f5..8b2dc82c 100644 --- a/gnuradio-core/src/lib/Makefile.am +++ b/gnuradio-core/src/lib/Makefile.am @@ -29,6 +29,8 @@ if PYTHON SUBDIRS += swig endif +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + # generate libgnuradio-core.la from the convenience libraries in subdirs lib_LTLIBRARIES = libgnuradio-core.la libgnuradio-core-qa.la @@ -64,3 +66,7 @@ libgnuradio_core_qa_la_LIBADD = \ runtime/libruntime-qa.la \ libgnuradio-core.la \ $(CPPUNIT_LIBS) + +bin_PROGRAMS = gnuradio +gnuradio_SOURCES = gnuradio.cc +gnuradio_LDADD = libgnuradio-core.la $(BOOST_PROGRAM_OPTIONS_LIB) diff --git a/gnuradio-core/src/lib/general/Makefile.am b/gnuradio-core/src/lib/general/Makefile.am index 5564ee3d..9b070b86 100644 --- a/gnuradio-core/src/lib/general/Makefile.am +++ b/gnuradio-core/src/lib/general/Makefile.am @@ -31,7 +31,7 @@ BUILT_SOURCES = EXTRA_DIST = \ gen_sine_table.py \ - gr_prefix.cc.in + gr_constants.cc.in libgeneral_la_SOURCES = \ gr_agc_cc.cc \ @@ -117,7 +117,7 @@ libgeneral_la_SOURCES = \ gr_pll_freqdet_cf.cc \ gr_pll_refout_cc.cc \ gr_pn_correlator_cc.cc \ - gr_prefix.cc \ + gr_constants.cc \ gr_prefs.cc \ gr_probe_avg_mag_sqrd_c.cc \ gr_probe_avg_mag_sqrd_cf.cc \ @@ -273,7 +273,7 @@ grinclude_HEADERS = \ gr_pll_freqdet_cf.h \ gr_pll_refout_cc.h \ gr_pn_correlator_cc.h \ - gr_prefix.h \ + gr_constants.h \ gr_prefs.h \ gr_probe_avg_mag_sqrd_c.h \ gr_probe_avg_mag_sqrd_cf.h \ @@ -432,7 +432,7 @@ swiginclude_HEADERS = \ gr_pll_freqdet_cf.i \ gr_pll_refout_cc.i \ gr_pn_correlator_cc.i \ - gr_prefix.i \ + gr_constants.i \ gr_prefs.i \ gr_probe_avg_mag_sqrd_c.i \ gr_probe_avg_mag_sqrd_cf.i \ diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i index 0cb54870..0684e63a 100644 --- a/gnuradio-core/src/lib/general/general.i +++ b/gnuradio-core/src/lib/general/general.i @@ -105,7 +105,7 @@ #include #include #include -#include +#include #include #include #include @@ -225,7 +225,7 @@ %include "gr_pa_2x2_phase_combiner.i" %include "gr_kludge_copy.i" %include "gr_prefs.i" -%include "gr_prefix.i" +%include "gr_constants.i" %include "gr_test_types.h" %include "gr_test.i" %include "gr_unpack_k_bits_bb.i" diff --git a/gnuradio-core/src/lib/general/gr_prefix.cc.in b/gnuradio-core/src/lib/general/gr_constants.cc.in similarity index 62% rename from gnuradio-core/src/lib/general/gr_prefix.cc.in rename to gnuradio-core/src/lib/general/gr_constants.cc.in index f03043ce..efb0f1c7 100644 --- a/gnuradio-core/src/lib/general/gr_prefix.cc.in +++ b/gnuradio-core/src/lib/general/gr_constants.cc.in @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,10 +20,50 @@ * Boston, MA 02110-1301, USA. */ -#include +#if HAVE_CONFIG_H +#include +#endif + +#include const std::string gr_prefix() { return "@prefix@"; } + +const std::string +gr_sysconfdir() +{ + return "@SYSCONFDIR@"; +} + +const std::string +gr_prefsdir() +{ + return "@GR_PREFSDIR@"; +} + +const std::string +gr_build_date() +{ + return "@BUILD_DATE@"; +} + +const std::string +gr_svn_date() +{ + return "@SVNDATE@"; +} + +const std::string +gr_svn_version() +{ + return "@SVNVERSION@"; +} + +const std::string +gr_version() +{ + return "@VERSION@"; +} diff --git a/gnuradio-core/src/lib/general/gr_prefix.h b/gnuradio-core/src/lib/general/gr_constants.h similarity index 52% rename from gnuradio-core/src/lib/general/gr_prefix.h rename to gnuradio-core/src/lib/general/gr_constants.h index 0a107b98..e44890be 100644 --- a/gnuradio-core/src/lib/general/gr_prefix.h +++ b/gnuradio-core/src/lib/general/gr_constants.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -19,8 +19,8 @@ * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ -#ifndef INCLUDED_GR_PREFIX_H -#define INCLUDED_GR_PREFIX_H +#ifndef INCLUDED_GR_CONSTANTS_H +#define INCLUDED_GR_CONSTANTS_H #include @@ -29,5 +29,34 @@ */ const std::string gr_prefix(); +/*! + * \brief return ./configure --sysconfdir argument. Typically $prefix/etc or /etc + */ +const std::string gr_sysconfdir(); + +/*! + * \brief return preferences file directory. Typically $sysconfdir/etc/conf.d + */ +const std::string gr_prefsdir(); + +/*! + * \brief return date/time of build, as set when 'bootstrap' is run + */ +const std::string gr_build_date(); + +/*! + * \brief return repository date as set when 'bootstrap' is run + */ +const std::string gr_svn_date(); + +/*! + * \brief return repository version as set when 'bootstrap' is run + */ +const std::string gr_svn_version(); + +/*! + * \brief return version string defined in configure.ac + */ +const std::string gr_version(); -#endif /* INCLUDED_GR_PREFIX_H */ +#endif /* INCLUDED_GR_CONSTANTS_H */ diff --git a/gnuradio-core/src/lib/general/gr_constants.i b/gnuradio-core/src/lib/general/gr_constants.i new file mode 100644 index 00000000..156af4a3 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_constants.i @@ -0,0 +1,17 @@ +/* -*- c++ -*- */ + +%rename(prefix) gr_prefix; +%rename(sysconfdir) gr_sysconfdir; +%rename(prefsdir) gr_prefsdir; +%rename(build_date) gr_build_date; +%rename(svn_date) gr_svn_date; +%rename(svn_version) gr_svn_version; +%rename(version) gr_version; + +const std::string gr_prefix(); +const std::string gr_sysconfdir(); +const std::string gr_prefsdir(); +const std::string gr_build_date(); +const std::string gr_svn_date(); +const std::string gr_svn_version(); +const std::string gr_version(); diff --git a/gnuradio-core/src/lib/general/gr_prefix.i b/gnuradio-core/src/lib/general/gr_prefix.i deleted file mode 100644 index 04e1899a..00000000 --- a/gnuradio-core/src/lib/general/gr_prefix.i +++ /dev/null @@ -1,5 +0,0 @@ -/* -*- c++ -*- */ - -%rename(prefix) gr_prefix; - -const std::string gr_prefix(); diff --git a/gnuradio-core/src/lib/gnuradio.cc b/gnuradio-core/src/lib/gnuradio.cc new file mode 100644 index 00000000..df78ea2d --- /dev/null +++ b/gnuradio-core/src/lib/gnuradio.cc @@ -0,0 +1,80 @@ +/* -*- c++ -*- */ +/* + * Copyright 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. + */ + +#if HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +namespace po = boost::program_options; + +int +main(int argc, char **argv) +{ + po::options_description desc("Program options: gnuradio [options]"); + po::variables_map vm; + + desc.add_options() + ("help,h", "print help message") + ("prefix", "print gnuradio installation prefix") + ("sysconfdir", "print gnuradio system configuration directory") + ("prefsdir", "print gnuradio preferences directory") + ("builddate", "print gnuradio build date (RFC2822 format)") + ("version,v", "print gnuradio version") + ("svnversion", "print SVN repository version (SVN format)") + ("svndate", "print SVN repository date") + ; + + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + if (vm.size() == 0 || vm.count("help")) { + std::cout << desc << std::endl; + return 1; + } + + if (vm.count("prefix")) + std::cout << gr_prefix() << std::endl; + + if (vm.count("sysconfdir")) + std::cout << gr_sysconfdir() << std::endl; + + if (vm.count("prefsdir")) + std::cout << gr_prefsdir() << std::endl; + + if (vm.count("builddate")) + std::cout << gr_build_date() << std::endl; + + if (vm.count("version")) + std::cout << gr_version() << std::endl; + + if (vm.count("svnversion")) + std::cout << gr_svn_version() << std::endl; + + if (vm.count("svndate")) + std::cout << gr_svn_date() << std::endl; + + return 0; +} diff --git a/gnuradio-core/src/python/gnuradio/gr/prefs.py b/gnuradio-core/src/python/gnuradio/gr/prefs.py index 52f1ff64..9b31b772 100644 --- a/gnuradio-core/src/python/gnuradio/gr/prefs.py +++ b/gnuradio-core/src/python/gnuradio/gr/prefs.py @@ -33,7 +33,7 @@ def _user_prefs_filename(): return os.path.expanduser('~/.gnuradio/config.conf') def _sys_prefs_dirname(): - return os.path.join(gsp.prefix(), 'etc/gnuradio/conf.d') + return gsp.prefsdir() def _bool(x): """ diff --git a/gr-audio-alsa/Makefile.am b/gr-audio-alsa/Makefile.am index 443bc321..5bd92b0f 100644 --- a/gr-audio-alsa/Makefile.am +++ b/gr-audio-alsa/Makefile.am @@ -26,5 +26,5 @@ SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = gnuradio-audio-alsa.pc -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = gr-audio-alsa.conf diff --git a/gr-audio-jack/Makefile.am b/gr-audio-jack/Makefile.am index 99cfe844..cdc1433d 100644 --- a/gr-audio-jack/Makefile.am +++ b/gr-audio-jack/Makefile.am @@ -26,5 +26,5 @@ SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = gnuradio-audio-jack.pc -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = gr-audio-jack.conf diff --git a/gr-audio-oss/Makefile.am b/gr-audio-oss/Makefile.am index 9f460bc3..c55d3ecb 100644 --- a/gr-audio-oss/Makefile.am +++ b/gr-audio-oss/Makefile.am @@ -26,5 +26,5 @@ SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = gnuradio-audio-oss.pc -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = gr-audio-oss.conf diff --git a/gr-audio-portaudio/Makefile.am b/gr-audio-portaudio/Makefile.am index 8be2fa73..198d89f8 100644 --- a/gr-audio-portaudio/Makefile.am +++ b/gr-audio-portaudio/Makefile.am @@ -26,5 +26,5 @@ SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = gnuradio-audio-portaudio.pc -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = gr-audio-portaudio.conf diff --git a/gr-wxgui/Makefile.am b/gr-wxgui/Makefile.am index e35ac649..335ebe43 100644 --- a/gr-wxgui/Makefile.am +++ b/gr-wxgui/Makefile.am @@ -29,7 +29,7 @@ EXTRA_DIST = \ if PYTHON SUBDIRS = src -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = gr-wxgui.conf pkgconfigdir = $(libdir)/pkgconfig diff --git a/grc/Makefile.am b/grc/Makefile.am index a921fdd3..4ffdee0b 100644 --- a/grc/Makefile.am +++ b/grc/Makefile.am @@ -39,7 +39,7 @@ endif ourpythondir = $(grc_src_prefix) ourpython_PYTHON = __init__.py -etcdir = $(gr_sysconfdir) +etcdir = $(gr_prefsdir) dist_etc_DATA = grc.conf EXTRA_DIST = \ -- 2.30.2