Compare commits
32 Commits
Author | SHA1 | Date |
---|---|---|
Clayton Smith | 3528dd48b2 | |
Sylvain Munaut | fbee239a6f | |
Sylvain Munaut | a520a46ed8 | |
Sylvain Munaut | 18895c4a61 | |
Sylvain Munaut | e9978be6cd | |
Sylvain Munaut | 7caa2643e2 | |
Sylvain Munaut | acb81c6537 | |
Sylvain Munaut | 61e90740eb | |
Sylvain Munaut | 82ca4ef197 | |
Sylvain Munaut | 96dd2541e0 | |
Sylvain Munaut | f56d917c83 | |
Sylvain Munaut | 6c9576670a | |
Sylvain Munaut | 3c108e2726 | |
Sylvain Munaut | 5608f73930 | |
Sylvain Munaut | 0db42ae287 | |
Sylvain Munaut | 9c2cfbca39 | |
Sylvain Munaut | 296837b1ad | |
A. Maitland Bottoms | c3ae8fb9ef | |
Brian Waters | fc67c92f0a | |
Sylvain Munaut | dcd73fd549 | |
Sylvain Munaut | 44ab02f671 | |
Sylvain Munaut | 4cdda60189 | |
Sylvain Munaut | d4fd4dd41e | |
Sylvain Munaut | a1bca1f9ba | |
Sylvain Munaut | de99fa6d22 | |
Sylvain Munaut | 27c5af81f9 | |
Sylvain Munaut | 0eb60d3865 | |
Sylvain Munaut | 077397e65a | |
Dimitri Stolnikov | 022ec6859f | |
Dimitri Stolnikov | 0039c7fec6 | |
Sylvain Munaut | ba2a55a4a9 | |
Dimitri Stolnikov | 189e89cd93 |
|
@ -1,3 +1,3 @@
|
||||||
[submodule "libosmo-dsp"]
|
[submodule "libosmo-dsp"]
|
||||||
path = libosmo-dsp
|
path = libosmo-dsp
|
||||||
url = git://git.osmocom.org/libosmo-dsp
|
url = https://gitea.osmocom.org/sdr/libosmo-dsp.git
|
||||||
|
|
175
CMakeLists.txt
175
CMakeLists.txt
|
@ -1,29 +1,21 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file is part of gr-iqbalance
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Project setup
|
# Project setup
|
||||||
########################################################################
|
########################################################################
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 3.8)
|
||||||
project(gr-iqbalance CXX C)
|
project(gr-iqbalance CXX C)
|
||||||
|
include(GNUInstallDirs)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
|
#policy setup
|
||||||
|
cmake_policy(SET CMP0011 NEW)
|
||||||
|
|
||||||
#select the release build type by default to get optimization flags
|
#select the release build type by default to get optimization flags
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE "Release")
|
set(CMAKE_BUILD_TYPE "Release")
|
||||||
|
@ -31,32 +23,55 @@ if(NOT CMAKE_BUILD_TYPE)
|
||||||
endif(NOT CMAKE_BUILD_TYPE)
|
endif(NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
|
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
########################################################################
|
||||||
|
# GNURadio setup
|
||||||
|
########################################################################
|
||||||
|
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
||||||
|
|
||||||
|
# Find GNURadio
|
||||||
|
find_package(Gnuradio "3.9" REQUIRED)
|
||||||
|
|
||||||
|
# Set the version information here
|
||||||
|
set(VERSION_MAJOR 3)
|
||||||
|
set(VERSION_API 9)
|
||||||
|
set(VERSION_ABI 0)
|
||||||
|
set(VERSION_PATCH 0)
|
||||||
|
include(GrVersion) #setup version info
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Compiler specific setup
|
# Compiler specific setup
|
||||||
########################################################################
|
########################################################################
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
|
if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
|
||||||
|
CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
AND NOT WIN32)
|
||||||
#http://gcc.gnu.org/wiki/Visibility
|
#http://gcc.gnu.org/wiki/Visibility
|
||||||
add_definitions(-fvisibility=hidden)
|
add_definitions(-fvisibility=hidden)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
else()
|
||||||
|
message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
else()
|
||||||
|
message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")
|
||||||
|
endif()
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Find boost
|
# Find boost
|
||||||
########################################################################
|
########################################################################
|
||||||
if(UNIX AND NOT BOOST_ROOT AND EXISTS "/usr/lib64")
|
find_package(Boost "1.65" REQUIRED system)
|
||||||
list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
|
|
||||||
endif(UNIX AND NOT BOOST_ROOT AND EXISTS "/usr/lib64")
|
|
||||||
set(Boost_ADDITIONAL_VERSIONS
|
|
||||||
"1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
|
|
||||||
"1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
|
|
||||||
"1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
|
|
||||||
"1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
|
|
||||||
"1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
|
|
||||||
"1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
|
|
||||||
"1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
|
|
||||||
)
|
|
||||||
find_package(Boost "1.35")
|
|
||||||
|
|
||||||
if(NOT Boost_FOUND)
|
if(NOT Boost_FOUND)
|
||||||
message(FATAL_ERROR "Boost required to compile iqbalance")
|
message(FATAL_ERROR "Boost required to compile iqbalance")
|
||||||
|
@ -67,7 +82,7 @@ endif()
|
||||||
########################################################################
|
########################################################################
|
||||||
find_package(FFTW3f)
|
find_package(FFTW3f)
|
||||||
|
|
||||||
if(NOT FFTW3F_FOUND)
|
if(NOT FFTW3f_FOUND)
|
||||||
message(FATAL_ERROR "FFTW3 required to compile iqbalance")
|
message(FATAL_ERROR "FFTW3 required to compile iqbalance")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -77,70 +92,77 @@ endif()
|
||||||
find_package(LibOsmoDSP)
|
find_package(LibOsmoDSP)
|
||||||
|
|
||||||
if(LIBOSMODSP_FOUND)
|
if(LIBOSMODSP_FOUND)
|
||||||
set(LIBOSMODSP_SOURCES "")
|
set(LIBOSMODSP_SEL_INCLUDE_DIRS ${LIBOSMODSP_INCLUDE_DIRS})
|
||||||
|
set(LIBOSMODSP_SEL_LIBRARIES ${LIBOSMODSP_LIBRARIES})
|
||||||
|
set(LIBOSMODSP_SEL_SOURCES "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT LIBOSMODSP_FOUND)
|
if(NOT LIBOSMODSP_FOUND)
|
||||||
message(STATUS "libosmodsp not found, using local checkout")
|
message(STATUS "libosmodsp not found, using local checkout")
|
||||||
set(LIBOSMODSP_INCLUDE_DIRS "libosmo-dsp/include/")
|
set(LIBOSMODSP_SEL_INCLUDE_DIRS ${FFTW3f_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/include/")
|
||||||
set(LIBOSMODSP_LIBRARIES "")
|
set(LIBOSMODSP_SEL_LIBRARIES ${FFTW3f_LIBRARIES})
|
||||||
set(LIBOSMODSP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/cxvec.c ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/iqbal.c)
|
set(LIBOSMODSP_SEL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/cxvec.c ${CMAKE_CURRENT_SOURCE_DIR}/libosmo-dsp/src/iqbal.c)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Install directories
|
# Install directories
|
||||||
########################################################################
|
########################################################################
|
||||||
include(GrPlatform) #define LIB_SUFFIX
|
include(GrPlatform) #define LIB_SUFFIX
|
||||||
set(GR_RUNTIME_DIR bin)
|
|
||||||
set(GR_LIBRARY_DIR lib${LIB_SUFFIX})
|
if(NOT CMAKE_MODULES_DIR)
|
||||||
|
set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
|
||||||
|
endif(NOT CMAKE_MODULES_DIR)
|
||||||
|
|
||||||
set(GR_INCLUDE_DIR include)
|
set(GR_INCLUDE_DIR include)
|
||||||
set(GR_DATA_DIR share)
|
set(GR_CMAKE_DIR ${CMAKE_MODULES_DIR}/gnuradio)
|
||||||
set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
|
set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})
|
||||||
set(GR_DOC_DIR ${GR_DATA_DIR}/doc)
|
|
||||||
set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
|
set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})
|
||||||
set(GR_CONF_DIR etc)
|
|
||||||
set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
|
set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)
|
||||||
set(GR_LIBEXEC_DIR libexec)
|
|
||||||
set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
|
set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})
|
||||||
set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks)
|
|
||||||
|
########################################################################
|
||||||
|
# On Apple only, set install name and use rpath correctly, if not already set
|
||||||
|
########################################################################
|
||||||
|
if(APPLE)
|
||||||
|
if(NOT CMAKE_INSTALL_NAME_DIR)
|
||||||
|
set(CMAKE_INSTALL_NAME_DIR
|
||||||
|
${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
|
||||||
|
PATH "Library Install Name Destination Directory" FORCE)
|
||||||
|
endif(NOT CMAKE_INSTALL_NAME_DIR)
|
||||||
|
if(NOT CMAKE_INSTALL_RPATH)
|
||||||
|
set(CMAKE_INSTALL_RPATH
|
||||||
|
${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE
|
||||||
|
PATH "Library Install RPath" FORCE)
|
||||||
|
endif(NOT CMAKE_INSTALL_RPATH)
|
||||||
|
if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
|
||||||
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE
|
||||||
|
BOOL "Do Build Using Library Install RPath" FORCE)
|
||||||
|
endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)
|
||||||
|
endif(APPLE)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Find gnuradio build dependencies
|
# Find gnuradio build dependencies
|
||||||
########################################################################
|
########################################################################
|
||||||
find_package(Gruel)
|
find_package(Doxygen)
|
||||||
find_package(GnuradioCore)
|
|
||||||
|
|
||||||
if(NOT GRUEL_FOUND)
|
|
||||||
message(FATAL_ERROR "Gruel required to compile iqbalance")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT GNURADIO_CORE_FOUND)
|
|
||||||
message(FATAL_ERROR "GnuRadio Core required to compile iqbalance")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Setup the include and linker paths
|
# PyBind11 Related
|
||||||
########################################################################
|
########################################################################
|
||||||
include_directories(
|
|
||||||
${CMAKE_SOURCE_DIR}/include
|
|
||||||
${Boost_INCLUDE_DIRS}
|
|
||||||
${FFTW3F_INCLUDE_DIRS}
|
|
||||||
${LIBOSMODSP_INCLUDE_DIRS}
|
|
||||||
${GRUEL_INCLUDE_DIRS}
|
|
||||||
${GNURADIO_CORE_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
link_directories(
|
find_package(pybind11 REQUIRED)
|
||||||
${Boost_LIBRARY_DIRS}
|
execute_process(
|
||||||
${FFTW3F_LIBRARY_DIRS}
|
COMMAND "${PYTHON_EXECUTABLE}" -c
|
||||||
${LIBOSMODSP_LIBRARY_DIRS}
|
"try:\n import numpy\n import os\n inc_path = numpy.get_include()\n if os.path.exists(os.path.join(inc_path, 'numpy', 'arrayobject.h')):\n print(inc_path, end='')\nexcept:\n pass"
|
||||||
${GRUEL_LIBRARY_DIRS}
|
OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR)
|
||||||
${GNURADIO_CORE_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set component parameters
|
########################################################################
|
||||||
set(GR_IQBALANCE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)
|
# Setup doxygen option
|
||||||
set(GR_IQBALANCE_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)
|
########################################################################
|
||||||
|
if(DOXYGEN_FOUND)
|
||||||
|
option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)
|
||||||
|
else(DOXYGEN_FOUND)
|
||||||
|
option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)
|
||||||
|
endif(DOXYGEN_FOUND)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Create uninstall target
|
# Create uninstall target
|
||||||
|
@ -157,10 +179,9 @@ add_custom_target(uninstall
|
||||||
########################################################################
|
########################################################################
|
||||||
# Add subdirectories
|
# Add subdirectories
|
||||||
########################################################################
|
########################################################################
|
||||||
add_subdirectory(include)
|
add_subdirectory(include/gnuradio/iqbalance)
|
||||||
add_subdirectory(lib)
|
add_subdirectory(lib)
|
||||||
add_subdirectory(swig)
|
|
||||||
add_subdirectory(python)
|
|
||||||
add_subdirectory(grc)
|
|
||||||
add_subdirectory(apps)
|
add_subdirectory(apps)
|
||||||
add_subdirectory(docs)
|
add_subdirectory(docs)
|
||||||
|
add_subdirectory(python)
|
||||||
|
add_subdirectory(grc)
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
title: gr-iqbalance
|
||||||
|
brief: GNU Radio block to correct IQ imbalance in quadrature receivers
|
||||||
|
tags:
|
||||||
|
- iq imbalance
|
||||||
|
- rx
|
||||||
|
- osmocom
|
||||||
|
author:
|
||||||
|
- Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
copyright_owner:
|
||||||
|
- Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
license: GPLv3
|
||||||
|
gr_supported_version: 3.9
|
||||||
|
repo: git://git.osmocom.org/gr-iqbal
|
||||||
|
icon: http://people.osmocom.org/~tnt/stuff/iqbal-icon.png
|
||||||
|
---
|
||||||
|
GNU Radio block to correct IQ imbalance in quadrature receivers
|
||||||
|
|
||||||
|
It's composed of two main block:
|
||||||
|
- *fix* : Given a phase and amplitude error, it will correct a complex signal
|
||||||
|
- *optimize*: Attempts to auto-detect the phase and amplitude error to feed to
|
||||||
|
the fix block above
|
||||||
|
|
||||||
|
The gr-osmosdr driver can make use of this block automatically if gr-iqbalance
|
||||||
|
is installed prior to gr-osmosdr.
|
|
@ -1,21 +1,9 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file is part of gr-iqbalance
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
|
|
||||||
include(GrPython)
|
include(GrPython)
|
||||||
|
|
||||||
|
|
|
@ -1,138 +0,0 @@
|
||||||
# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
|
|
||||||
#
|
|
||||||
# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for
|
|
||||||
# parsing the arguments given to that macro or function.
|
|
||||||
# It processes the arguments and defines a set of variables which hold the
|
|
||||||
# values of the respective options.
|
|
||||||
#
|
|
||||||
# The <options> argument contains all options for the respective macro,
|
|
||||||
# i.e. keywords which can be used when calling the macro without any value
|
|
||||||
# following, like e.g. the OPTIONAL keyword of the install() command.
|
|
||||||
#
|
|
||||||
# The <one_value_keywords> argument contains all keywords for this macro
|
|
||||||
# which are followed by one value, like e.g. DESTINATION keyword of the
|
|
||||||
# install() command.
|
|
||||||
#
|
|
||||||
# The <multi_value_keywords> argument contains all keywords for this macro
|
|
||||||
# which can be followed by more than one value, like e.g. the TARGETS or
|
|
||||||
# FILES keywords of the install() command.
|
|
||||||
#
|
|
||||||
# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the
|
|
||||||
# keywords listed in <options>, <one_value_keywords> and
|
|
||||||
# <multi_value_keywords> a variable composed of the given <prefix>
|
|
||||||
# followed by "_" and the name of the respective keyword.
|
|
||||||
# These variables will then hold the respective value from the argument list.
|
|
||||||
# For the <options> keywords this will be TRUE or FALSE.
|
|
||||||
#
|
|
||||||
# All remaining arguments are collected in a variable
|
|
||||||
# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see whether
|
|
||||||
# your macro was called with unrecognized parameters.
|
|
||||||
#
|
|
||||||
# As an example here a my_install() macro, which takes similar arguments as the
|
|
||||||
# real install() command:
|
|
||||||
#
|
|
||||||
# function(MY_INSTALL)
|
|
||||||
# set(options OPTIONAL FAST)
|
|
||||||
# set(oneValueArgs DESTINATION RENAME)
|
|
||||||
# set(multiValueArgs TARGETS CONFIGURATIONS)
|
|
||||||
# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
|
||||||
# ...
|
|
||||||
#
|
|
||||||
# Assume my_install() has been called like this:
|
|
||||||
# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
|
|
||||||
#
|
|
||||||
# After the cmake_parse_arguments() call the macro will have set the following
|
|
||||||
# variables:
|
|
||||||
# MY_INSTALL_OPTIONAL = TRUE
|
|
||||||
# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install()
|
|
||||||
# MY_INSTALL_DESTINATION = "bin"
|
|
||||||
# MY_INSTALL_RENAME = "" (was not used)
|
|
||||||
# MY_INSTALL_TARGETS = "foo;bar"
|
|
||||||
# MY_INSTALL_CONFIGURATIONS = "" (was not used)
|
|
||||||
# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL"
|
|
||||||
#
|
|
||||||
# You can the continue and process these variables.
|
|
||||||
#
|
|
||||||
# Keywords terminate lists of values, e.g. if directly after a one_value_keyword
|
|
||||||
# another recognized keyword follows, this is interpreted as the beginning of
|
|
||||||
# the new option.
|
|
||||||
# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in
|
|
||||||
# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would
|
|
||||||
# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
|
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2010 Alexander Neundorf <neundorf@kde.org>
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
|
|
||||||
|
|
||||||
if(__CMAKE_PARSE_ARGUMENTS_INCLUDED)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE)
|
|
||||||
|
|
||||||
|
|
||||||
function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
|
|
||||||
# first set all result variables to empty/FALSE
|
|
||||||
foreach(arg_name ${_singleArgNames} ${_multiArgNames})
|
|
||||||
set(${prefix}_${arg_name})
|
|
||||||
endforeach(arg_name)
|
|
||||||
|
|
||||||
foreach(option ${_optionNames})
|
|
||||||
set(${prefix}_${option} FALSE)
|
|
||||||
endforeach(option)
|
|
||||||
|
|
||||||
set(${prefix}_UNPARSED_ARGUMENTS)
|
|
||||||
|
|
||||||
set(insideValues FALSE)
|
|
||||||
set(currentArgName)
|
|
||||||
|
|
||||||
# now iterate over all arguments and fill the result variables
|
|
||||||
foreach(currentArg ${ARGN})
|
|
||||||
list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword
|
|
||||||
list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword
|
|
||||||
list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword
|
|
||||||
|
|
||||||
if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1)
|
|
||||||
if(insideValues)
|
|
||||||
if("${insideValues}" STREQUAL "SINGLE")
|
|
||||||
set(${prefix}_${currentArgName} ${currentArg})
|
|
||||||
set(insideValues FALSE)
|
|
||||||
elseif("${insideValues}" STREQUAL "MULTI")
|
|
||||||
list(APPEND ${prefix}_${currentArgName} ${currentArg})
|
|
||||||
endif()
|
|
||||||
else(insideValues)
|
|
||||||
list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg})
|
|
||||||
endif(insideValues)
|
|
||||||
else()
|
|
||||||
if(NOT ${optionIndex} EQUAL -1)
|
|
||||||
set(${prefix}_${currentArg} TRUE)
|
|
||||||
set(insideValues FALSE)
|
|
||||||
elseif(NOT ${singleArgIndex} EQUAL -1)
|
|
||||||
set(currentArgName ${currentArg})
|
|
||||||
set(${prefix}_${currentArgName})
|
|
||||||
set(insideValues "SINGLE")
|
|
||||||
elseif(NOT ${multiArgIndex} EQUAL -1)
|
|
||||||
set(currentArgName ${currentArg})
|
|
||||||
set(${prefix}_${currentArgName})
|
|
||||||
set(insideValues "MULTI")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endforeach(currentArg)
|
|
||||||
|
|
||||||
# propagate the result variables to the caller:
|
|
||||||
foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames})
|
|
||||||
set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE)
|
|
||||||
endforeach(arg_name)
|
|
||||||
set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE)
|
|
||||||
|
|
||||||
endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs)
|
|
|
@ -1,29 +0,0 @@
|
||||||
INCLUDE(FindPkgConfig)
|
|
||||||
PKG_CHECK_MODULES(PC_GNURADIO_CORE gnuradio-core)
|
|
||||||
|
|
||||||
FIND_PATH(
|
|
||||||
GNURADIO_CORE_INCLUDE_DIRS
|
|
||||||
NAMES gr_random.h
|
|
||||||
HINTS $ENV{GNURADIO_CORE_DIR}/include/gnuradio
|
|
||||||
${PC_GNURADIO_CORE_INCLUDEDIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/include/gnuradio
|
|
||||||
PATHS /usr/local/include/gnuradio
|
|
||||||
/usr/include/gnuradio
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(
|
|
||||||
GNURADIO_CORE_LIBRARIES
|
|
||||||
NAMES gnuradio-core
|
|
||||||
HINTS $ENV{GNURADIO_CORE_DIR}/lib
|
|
||||||
${PC_GNURADIO_CORE_LIBDIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib64
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib
|
|
||||||
PATHS /usr/local/lib
|
|
||||||
/usr/local/lib64
|
|
||||||
/usr/lib
|
|
||||||
/usr/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_CORE DEFAULT_MSG GNURADIO_CORE_LIBRARIES GNURADIO_CORE_INCLUDE_DIRS)
|
|
||||||
MARK_AS_ADVANCED(GNURADIO_CORE_LIBRARIES GNURADIO_CORE_INCLUDE_DIRS)
|
|
|
@ -1,29 +0,0 @@
|
||||||
INCLUDE(FindPkgConfig)
|
|
||||||
PKG_CHECK_MODULES(PC_GRUEL gruel)
|
|
||||||
|
|
||||||
FIND_PATH(
|
|
||||||
GRUEL_INCLUDE_DIRS
|
|
||||||
NAMES gruel/attributes.h
|
|
||||||
HINTS $ENV{GRUEL_DIR}/include
|
|
||||||
${PC_GRUEL_INCLUDEDIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/include
|
|
||||||
PATHS /usr/local/include
|
|
||||||
/usr/include
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(
|
|
||||||
GRUEL_LIBRARIES
|
|
||||||
NAMES gruel
|
|
||||||
HINTS $ENV{GRUEL_DIR}/lib
|
|
||||||
${PC_GRUEL_LIBDIR}
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib
|
|
||||||
${CMAKE_INSTALL_PREFIX}/lib64
|
|
||||||
PATHS /usr/local/lib
|
|
||||||
/usr/local/lib64
|
|
||||||
/usr/lib
|
|
||||||
/usr/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GRUEL DEFAULT_MSG GRUEL_LIBRARIES GRUEL_INCLUDE_DIRS)
|
|
||||||
MARK_AS_ADVANCED(GRUEL_LIBRARIES GRUEL_INCLUDE_DIRS)
|
|
|
@ -1,210 +0,0 @@
|
||||||
# Copyright 2010-2011 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(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Set global variable macro.
|
|
||||||
# Used for subdirectories to export settings.
|
|
||||||
# Example: include and library paths.
|
|
||||||
########################################################################
|
|
||||||
function(GR_SET_GLOBAL var)
|
|
||||||
set(${var} ${ARGN} CACHE INTERNAL "" FORCE)
|
|
||||||
endfunction(GR_SET_GLOBAL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Set the pre-processor definition if the condition is true.
|
|
||||||
# - def the pre-processor definition to set and condition name
|
|
||||||
########################################################################
|
|
||||||
function(GR_ADD_COND_DEF def)
|
|
||||||
if(${def})
|
|
||||||
add_definitions(-D${def})
|
|
||||||
endif(${def})
|
|
||||||
endfunction(GR_ADD_COND_DEF)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check for a header and conditionally set a compile define.
|
|
||||||
# - hdr the relative path to the header file
|
|
||||||
# - def the pre-processor definition to set
|
|
||||||
########################################################################
|
|
||||||
function(GR_CHECK_HDR_N_DEF hdr def)
|
|
||||||
include(CheckIncludeFileCXX)
|
|
||||||
CHECK_INCLUDE_FILE_CXX(${hdr} ${def})
|
|
||||||
GR_ADD_COND_DEF(${def})
|
|
||||||
endfunction(GR_CHECK_HDR_N_DEF)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Include subdirectory macro.
|
|
||||||
# Sets the CMake directory variables,
|
|
||||||
# includes the subdirectory CMakeLists.txt,
|
|
||||||
# resets the CMake directory variables.
|
|
||||||
#
|
|
||||||
# This macro includes subdirectories rather than adding them
|
|
||||||
# so that the subdirectory can affect variables in the level above.
|
|
||||||
# This provides a work-around for the lack of convenience libraries.
|
|
||||||
# This way a subdirectory can append to the list of library sources.
|
|
||||||
########################################################################
|
|
||||||
macro(GR_INCLUDE_SUBDIRECTORY subdir)
|
|
||||||
#insert the current directories on the front of the list
|
|
||||||
list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
#set the current directories to the names of the subdirs
|
|
||||||
set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})
|
|
||||||
set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})
|
|
||||||
|
|
||||||
#include the subdirectory CMakeLists to run it
|
|
||||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
|
|
||||||
|
|
||||||
#reset the value of the current directories
|
|
||||||
list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)
|
|
||||||
list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)
|
|
||||||
|
|
||||||
#pop the subdir names of the front of the list
|
|
||||||
list(REMOVE_AT _cmake_source_dirs 0)
|
|
||||||
list(REMOVE_AT _cmake_binary_dirs 0)
|
|
||||||
endmacro(GR_INCLUDE_SUBDIRECTORY)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check if a compiler flag works and conditionally set a compile define.
|
|
||||||
# - flag the compiler flag to check for
|
|
||||||
# - have the variable to set with result
|
|
||||||
########################################################################
|
|
||||||
macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
CHECK_CXX_COMPILER_FLAG(${flag} ${have})
|
|
||||||
if(${have})
|
|
||||||
add_definitions(${flag})
|
|
||||||
endif(${have})
|
|
||||||
endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Generates the .la libtool file
|
|
||||||
# This appears to generate libtool files that cannot be used by auto*.
|
|
||||||
# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])
|
|
||||||
# Notice: there is not COMPONENT option, these will not get distributed.
|
|
||||||
########################################################################
|
|
||||||
function(GR_LIBTOOL)
|
|
||||||
if(NOT DEFINED GENERATE_LIBTOOL)
|
|
||||||
set(GENERATE_LIBTOOL OFF) #disabled by default
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(GENERATE_LIBTOOL)
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})
|
|
||||||
|
|
||||||
find_program(LIBTOOL libtool)
|
|
||||||
if(LIBTOOL)
|
|
||||||
include(CMakeMacroLibtoolFile)
|
|
||||||
CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})
|
|
||||||
endif(LIBTOOL)
|
|
||||||
endif(GENERATE_LIBTOOL)
|
|
||||||
|
|
||||||
endfunction(GR_LIBTOOL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Do standard things to the library target
|
|
||||||
# - set target properties
|
|
||||||
# - make install rules
|
|
||||||
# Also handle gnuradio custom naming conventions w/ extras mode.
|
|
||||||
########################################################################
|
|
||||||
function(GR_LIBRARY_FOO target)
|
|
||||||
#parse the arguments for component names
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})
|
|
||||||
|
|
||||||
#set additional target properties
|
|
||||||
set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})
|
|
||||||
|
|
||||||
#install the generated files like so...
|
|
||||||
install(TARGETS ${target}
|
|
||||||
LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file
|
|
||||||
ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT} # .lib file
|
|
||||||
RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file
|
|
||||||
)
|
|
||||||
|
|
||||||
#extras mode enabled automatically on linux
|
|
||||||
if(NOT DEFINED LIBRARY_EXTRAS)
|
|
||||||
set(LIBRARY_EXTRAS ${LINUX})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#special extras mode to enable alternative naming conventions
|
|
||||||
if(LIBRARY_EXTRAS)
|
|
||||||
|
|
||||||
#create .la file before changing props
|
|
||||||
GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})
|
|
||||||
|
|
||||||
#give the library a special name with ultra-zero soversion
|
|
||||||
set_target_properties(${target} PROPERTIES LIBRARY_OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")
|
|
||||||
set(target_name lib${target}-${LIBVER}.so.0.0.0)
|
|
||||||
|
|
||||||
#custom command to generate symlinks
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${target}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install
|
|
||||||
)
|
|
||||||
|
|
||||||
#and install the extra symlinks
|
|
||||||
install(
|
|
||||||
FILES
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0
|
|
||||||
DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
endif(LIBRARY_EXTRAS)
|
|
||||||
endfunction(GR_LIBRARY_FOO)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Create a dummy custom command that depends on other targets.
|
|
||||||
# Usage:
|
|
||||||
# GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)
|
|
||||||
# ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})
|
|
||||||
#
|
|
||||||
# Custom command cant depend on targets, but can depend on executables,
|
|
||||||
# and executables can depend on targets. So this is the process:
|
|
||||||
########################################################################
|
|
||||||
function(GR_GEN_TARGET_DEPS name var)
|
|
||||||
file(
|
|
||||||
WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
|
|
||||||
"int main(void){return 0;}\n"
|
|
||||||
)
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp
|
|
||||||
)
|
|
||||||
add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)
|
|
||||||
if(ARGN)
|
|
||||||
add_dependencies(${name} ${ARGN})
|
|
||||||
endif(ARGN)
|
|
||||||
|
|
||||||
if(CMAKE_CROSSCOMPILING)
|
|
||||||
set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross
|
|
||||||
else()
|
|
||||||
set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction(GR_GEN_TARGET_DEPS)
|
|
|
@ -1,46 +0,0 @@
|
||||||
# Copyright 2011 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(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup additional defines for OS types
|
|
||||||
########################################################################
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
set(LINUX TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(LINUX AND EXISTS "/etc/debian_version")
|
|
||||||
set(DEBIAN TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(LINUX AND EXISTS "/etc/redhat-release")
|
|
||||||
set(REDHAT TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# when the library suffix should be 64 (applies to redhat linux family)
|
|
||||||
########################################################################
|
|
||||||
if(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
|
|
||||||
set(LIB_SUFFIX 64)
|
|
||||||
endif()
|
|
||||||
set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
|
|
|
@ -1,227 +0,0 @@
|
||||||
# Copyright 2010-2011 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(DEFINED __INCLUDED_GR_PYTHON_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_PYTHON_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup the python interpreter:
|
|
||||||
# This allows the user to specify a specific interpreter,
|
|
||||||
# or finds the interpreter via the built-in cmake module.
|
|
||||||
########################################################################
|
|
||||||
#this allows the user to override PYTHON_EXECUTABLE
|
|
||||||
if(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
set(PYTHONINTERP_FOUND TRUE)
|
|
||||||
|
|
||||||
#otherwise if not set, try to automatically find it
|
|
||||||
else(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
#use the built-in find script
|
|
||||||
find_package(PythonInterp)
|
|
||||||
|
|
||||||
#and if that fails use the find program routine
|
|
||||||
if(NOT PYTHONINTERP_FOUND)
|
|
||||||
find_program(PYTHON_EXECUTABLE NAMES python python2.7 python2.6 python2.5)
|
|
||||||
if(PYTHON_EXECUTABLE)
|
|
||||||
set(PYTHONINTERP_FOUND TRUE)
|
|
||||||
endif(PYTHON_EXECUTABLE)
|
|
||||||
endif(NOT PYTHONINTERP_FOUND)
|
|
||||||
|
|
||||||
endif(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
#make the path to the executable appear in the cmake gui
|
|
||||||
set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")
|
|
||||||
|
|
||||||
#make sure we can use -B with python (introduced in 2.6)
|
|
||||||
if(PYTHON_EXECUTABLE)
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -B -c ""
|
|
||||||
OUTPUT_QUIET ERROR_QUIET
|
|
||||||
RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT
|
|
||||||
)
|
|
||||||
if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)
|
|
||||||
set(PYTHON_DASH_B "-B")
|
|
||||||
endif()
|
|
||||||
endif(PYTHON_EXECUTABLE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Check for the existence of a python module:
|
|
||||||
# - desc a string description of the check
|
|
||||||
# - mod the name of the module to import
|
|
||||||
# - cmd an additional command to run
|
|
||||||
# - have the result variable to set
|
|
||||||
########################################################################
|
|
||||||
macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "Python checking for ${desc}")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -c "
|
|
||||||
#########################################
|
|
||||||
try: import ${mod}
|
|
||||||
except: exit(-1)
|
|
||||||
try: assert ${cmd}
|
|
||||||
except: exit(-1)
|
|
||||||
#########################################"
|
|
||||||
RESULT_VARIABLE ${have}
|
|
||||||
)
|
|
||||||
if(${have} EQUAL 0)
|
|
||||||
message(STATUS "Python checking for ${desc} - found")
|
|
||||||
set(${have} TRUE)
|
|
||||||
else(${have} EQUAL 0)
|
|
||||||
message(STATUS "Python checking for ${desc} - not found")
|
|
||||||
set(${have} FALSE)
|
|
||||||
endif(${have} EQUAL 0)
|
|
||||||
endmacro(GR_PYTHON_CHECK_MODULE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Sets the python installation directory GR_PYTHON_DIR
|
|
||||||
########################################################################
|
|
||||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "
|
|
||||||
from distutils import sysconfig
|
|
||||||
print sysconfig.get_python_lib(plat_specific=True, prefix='')
|
|
||||||
" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Create an always-built target with a unique name
|
|
||||||
# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)
|
|
||||||
########################################################################
|
|
||||||
function(GR_UNIQUE_TARGET desc)
|
|
||||||
file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
|
|
||||||
unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
|
|
||||||
print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
|
|
||||||
OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
add_custom_target(${_target} ALL DEPENDS ${ARGN})
|
|
||||||
endfunction(GR_UNIQUE_TARGET)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install python sources (also builds and installs byte-compiled python)
|
|
||||||
########################################################################
|
|
||||||
function(GR_PYTHON_INSTALL)
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})
|
|
||||||
|
|
||||||
####################################################################
|
|
||||||
if(GR_PYTHON_INSTALL_FILES)
|
|
||||||
####################################################################
|
|
||||||
install(${ARGN}) #installs regular python files
|
|
||||||
|
|
||||||
#create a list of all generated files
|
|
||||||
unset(pysrcfiles)
|
|
||||||
unset(pycfiles)
|
|
||||||
unset(pyofiles)
|
|
||||||
foreach(pyfile ${GR_PYTHON_INSTALL_FILES})
|
|
||||||
get_filename_component(pyfile ${pyfile} ABSOLUTE)
|
|
||||||
list(APPEND pysrcfiles ${pyfile})
|
|
||||||
|
|
||||||
#determine if this file is in the source or binary directory
|
|
||||||
file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})
|
|
||||||
string(LENGTH "${source_rel_path}" source_rel_path_len)
|
|
||||||
file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})
|
|
||||||
string(LENGTH "${binary_rel_path}" binary_rel_path_len)
|
|
||||||
|
|
||||||
#and set the generated path appropriately
|
|
||||||
if(${source_rel_path_len} GREATER ${binary_rel_path_len})
|
|
||||||
set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})
|
|
||||||
else()
|
|
||||||
set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})
|
|
||||||
endif()
|
|
||||||
list(APPEND pycfiles ${pygenfile}c)
|
|
||||||
list(APPEND pyofiles ${pygenfile}o)
|
|
||||||
|
|
||||||
#ensure generation path exists
|
|
||||||
get_filename_component(pygen_path ${pygenfile} PATH)
|
|
||||||
file(MAKE_DIRECTORY ${pygen_path})
|
|
||||||
|
|
||||||
endforeach(pyfile)
|
|
||||||
|
|
||||||
#the command to generate the pyc files
|
|
||||||
add_custom_command(
|
|
||||||
DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}
|
|
||||||
)
|
|
||||||
|
|
||||||
#the command to generate the pyo files
|
|
||||||
add_custom_command(
|
|
||||||
DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}
|
|
||||||
)
|
|
||||||
|
|
||||||
#create install rule and add generated files to target list
|
|
||||||
set(python_install_gen_targets ${pycfiles} ${pyofiles})
|
|
||||||
install(FILES ${python_install_gen_targets}
|
|
||||||
DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
####################################################################
|
|
||||||
elseif(GR_PYTHON_INSTALL_PROGRAMS)
|
|
||||||
####################################################################
|
|
||||||
file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)
|
|
||||||
|
|
||||||
foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})
|
|
||||||
get_filename_component(pyfile_name ${pyfile} NAME)
|
|
||||||
get_filename_component(pyfile ${pyfile} ABSOLUTE)
|
|
||||||
string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")
|
|
||||||
list(APPEND python_install_gen_targets ${pyexefile})
|
|
||||||
|
|
||||||
get_filename_component(pyexefile_path ${pyexefile} PATH)
|
|
||||||
file(MAKE_DIRECTORY ${pyexefile_path})
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${pyexefile} DEPENDS ${pyfile}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -c
|
|
||||||
\"open('${pyexefile}', 'w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())\"
|
|
||||||
COMMENT "Shebangin ${pyfile_name}"
|
|
||||||
)
|
|
||||||
|
|
||||||
#on windows, python files need an extension to execute
|
|
||||||
get_filename_component(pyfile_ext ${pyfile} EXT)
|
|
||||||
if(WIN32 AND NOT pyfile_ext)
|
|
||||||
set(pyfile_name "${pyfile_name}.py")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}
|
|
||||||
DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
endforeach(pyfile)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})
|
|
||||||
|
|
||||||
endfunction(GR_PYTHON_INSTALL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Write the python helper script that generates byte code files
|
|
||||||
########################################################################
|
|
||||||
file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "
|
|
||||||
import sys, py_compile
|
|
||||||
files = sys.argv[1:]
|
|
||||||
srcs, gens = files[:len(files)/2], files[len(files)/2:]
|
|
||||||
for src, gen in zip(srcs, gens):
|
|
||||||
py_compile.compile(file=src, cfile=gen, doraise=True)
|
|
||||||
")
|
|
|
@ -1,229 +0,0 @@
|
||||||
# Copyright 2010-2011 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(DEFINED __INCLUDED_GR_SWIG_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_SWIG_CMAKE TRUE)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Builds a swig documentation file to be generated into python docstrings
|
|
||||||
# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)
|
|
||||||
#
|
|
||||||
# Set the following variable to specify extra dependent targets:
|
|
||||||
# - GR_SWIG_DOCS_SOURCE_DEPS
|
|
||||||
# - GR_SWIG_DOCS_TARGET_DEPS
|
|
||||||
########################################################################
|
|
||||||
function(GR_SWIG_MAKE_DOCS output_file)
|
|
||||||
find_package(Doxygen)
|
|
||||||
if(DOXYGEN_FOUND)
|
|
||||||
|
|
||||||
#setup the input files variable list, quote formated
|
|
||||||
set(input_files)
|
|
||||||
unset(INPUT_PATHS)
|
|
||||||
foreach(input_path ${ARGN})
|
|
||||||
if (IS_DIRECTORY ${input_path}) #when input path is a directory
|
|
||||||
file(GLOB input_path_h_files ${input_path}/*.h)
|
|
||||||
else() #otherwise its just a file, no glob
|
|
||||||
set(input_path_h_files ${input_path})
|
|
||||||
endif()
|
|
||||||
list(APPEND input_files ${input_path_h_files})
|
|
||||||
set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")
|
|
||||||
endforeach(input_path)
|
|
||||||
|
|
||||||
#determine the output directory
|
|
||||||
get_filename_component(name ${output_file} NAME_WE)
|
|
||||||
get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)
|
|
||||||
set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)
|
|
||||||
make_directory(${OUTPUT_DIRECTORY})
|
|
||||||
|
|
||||||
#generate the Doxyfile used by doxygen
|
|
||||||
configure_file(
|
|
||||||
${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in
|
|
||||||
${OUTPUT_DIRECTORY}/Doxyfile
|
|
||||||
@ONLY)
|
|
||||||
|
|
||||||
#Create a dummy custom command that depends on other targets
|
|
||||||
include(GrMiscUtils)
|
|
||||||
GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})
|
|
||||||
|
|
||||||
#call doxygen on the Doxyfile + input headers
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml
|
|
||||||
DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}
|
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile
|
|
||||||
COMMENT "Generating doxygen xml for ${name} docs"
|
|
||||||
)
|
|
||||||
|
|
||||||
#call the swig_doc script on the xml files
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${output_file}
|
|
||||||
DEPENDS ${input_files} ${OUTPUT_DIRECTORY}/xml/index.xml
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}
|
|
||||||
${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py
|
|
||||||
${OUTPUT_DIRECTORY}/xml
|
|
||||||
${output_file}
|
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
|
|
||||||
)
|
|
||||||
|
|
||||||
else(DOXYGEN_FOUND)
|
|
||||||
file(WRITE ${output_file} "\n") #no doxygen -> empty file
|
|
||||||
endif(DOXYGEN_FOUND)
|
|
||||||
endfunction(GR_SWIG_MAKE_DOCS)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Build a swig target for the common gnuradio use case. Usage:
|
|
||||||
# GR_SWIG_MAKE(target ifile ifile ifile...)
|
|
||||||
#
|
|
||||||
# Set the following variables before calling:
|
|
||||||
# - GR_SWIG_FLAGS
|
|
||||||
# - GR_SWIG_INCLUDE_DIRS
|
|
||||||
# - GR_SWIG_LIBRARIES
|
|
||||||
# - GR_SWIG_SOURCE_DEPS
|
|
||||||
# - GR_SWIG_TARGET_DEPS
|
|
||||||
# - GR_SWIG_DOC_FILE
|
|
||||||
# - GR_SWIG_DOC_DIRS
|
|
||||||
########################################################################
|
|
||||||
macro(GR_SWIG_MAKE name)
|
|
||||||
set(ifiles ${ARGN})
|
|
||||||
|
|
||||||
#do swig doc generation if specified
|
|
||||||
if (GR_SWIG_DOC_FILE)
|
|
||||||
set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})
|
|
||||||
set(GR_SWIG_DOCS_TAREGT_DEPS ${GR_SWIG_TARGET_DEPS})
|
|
||||||
GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})
|
|
||||||
list(APPEND GR_SWIG_SOURCE_DEPS ${GR_SWIG_DOC_FILE})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#append additional include directories
|
|
||||||
find_package(PythonLibs)
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
#determine include dependencies for swig file
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE}
|
|
||||||
${CMAKE_BINARY_DIR}/get_swig_deps.py
|
|
||||||
"${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
#Create a dummy custom command that depends on other targets
|
|
||||||
include(GrMiscUtils)
|
|
||||||
GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})
|
|
||||||
set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${tag_file}
|
|
||||||
DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}
|
|
||||||
)
|
|
||||||
|
|
||||||
#append the specified include directories
|
|
||||||
include_directories(${GR_SWIG_INCLUDE_DIRS})
|
|
||||||
list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})
|
|
||||||
|
|
||||||
#setup the swig flags with flags and include directories
|
|
||||||
set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})
|
|
||||||
foreach(dir ${GR_SWIG_INCLUDE_DIRS})
|
|
||||||
list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")
|
|
||||||
endforeach(dir)
|
|
||||||
|
|
||||||
#set the C++ property on the swig .i file so it builds
|
|
||||||
set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)
|
|
||||||
|
|
||||||
#setup the actual swig library target to be built
|
|
||||||
include(UseSWIG)
|
|
||||||
SWIG_ADD_MODULE(${name} python ${ifiles})
|
|
||||||
SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES})
|
|
||||||
|
|
||||||
endmacro(GR_SWIG_MAKE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install swig targets generated by GR_SWIG_MAKE. Usage:
|
|
||||||
# GR_SWIG_INSTALL(
|
|
||||||
# TARGETS target target target...
|
|
||||||
# [DESTINATION destination]
|
|
||||||
# [COMPONENT component]
|
|
||||||
# )
|
|
||||||
########################################################################
|
|
||||||
macro(GR_SWIG_INSTALL)
|
|
||||||
|
|
||||||
include(CMakeParseArgumentsCopy)
|
|
||||||
CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})
|
|
||||||
|
|
||||||
foreach(name ${GR_SWIG_INSTALL_TARGETS})
|
|
||||||
install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}
|
|
||||||
DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
include(GrPython)
|
|
||||||
GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py
|
|
||||||
DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
|
|
||||||
COMPONENT ${GR_SWIG_INSTALL_COMPONENT}
|
|
||||||
)
|
|
||||||
|
|
||||||
GR_LIBTOOL(
|
|
||||||
TARGET ${SWIG_MODULE_${name}_REAL_NAME}
|
|
||||||
DESTINATION ${GR_SWIG_INSTALL_DESTINATION}
|
|
||||||
)
|
|
||||||
|
|
||||||
endforeach(name)
|
|
||||||
|
|
||||||
endmacro(GR_SWIG_INSTALL)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Generate a python file that can determine swig dependencies.
|
|
||||||
# Used by the make macro above to determine extra dependencies.
|
|
||||||
# When you build C++, CMake figures out the header dependencies.
|
|
||||||
# This code essentially performs that logic for swig includes.
|
|
||||||
########################################################################
|
|
||||||
file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "
|
|
||||||
|
|
||||||
import os, sys, re
|
|
||||||
|
|
||||||
include_matcher = re.compile('[#|%]include\\s*[<|\"](.*)[>|\"]')
|
|
||||||
include_dirs = sys.argv[2].split(';')
|
|
||||||
|
|
||||||
def get_swig_incs(file_path):
|
|
||||||
file_contents = open(file_path, 'r').read()
|
|
||||||
return include_matcher.findall(file_contents, re.MULTILINE)
|
|
||||||
|
|
||||||
def get_swig_deps(file_path, level):
|
|
||||||
deps = [file_path]
|
|
||||||
if level == 0: return deps
|
|
||||||
for inc_file in get_swig_incs(file_path):
|
|
||||||
for inc_dir in include_dirs:
|
|
||||||
inc_path = os.path.join(inc_dir, inc_file)
|
|
||||||
if not os.path.exists(inc_path): continue
|
|
||||||
deps.extend(get_swig_deps(inc_path, level-1))
|
|
||||||
return deps
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
ifiles = sys.argv[1].split(';')
|
|
||||||
deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])
|
|
||||||
#sys.stderr.write(';'.join(set(deps)) + '\\n\\n')
|
|
||||||
print(';'.join(set(deps)))
|
|
||||||
")
|
|
|
@ -1,133 +0,0 @@
|
||||||
# Copyright 2010-2011 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(DEFINED __INCLUDED_GR_TEST_CMAKE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__INCLUDED_GR_TEST_CMAKE TRUE)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Add a unit test and setup the environment for a unit test.
|
|
||||||
# Takes the same arguments as the ADD_TEST function.
|
|
||||||
#
|
|
||||||
# Before calling set the following variables:
|
|
||||||
# GR_TEST_TARGET_DEPS - built targets for the library path
|
|
||||||
# GR_TEST_LIBRARY_DIRS - directories for the library path
|
|
||||||
# GR_TEST_PYTHON_DIRS - directories for the python path
|
|
||||||
########################################################################
|
|
||||||
function(GR_ADD_TEST test_name)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
#Ensure that the build exe also appears in the PATH.
|
|
||||||
list(APPEND GR_TEST_TARGET_DEPS ${ARGN})
|
|
||||||
|
|
||||||
#In the land of windows, all libraries must be in the PATH.
|
|
||||||
#Since the dependent libraries are not yet installed,
|
|
||||||
#we must manually set them in the PATH to run tests.
|
|
||||||
#The following appends the path of a target dependency.
|
|
||||||
foreach(target ${GR_TEST_TARGET_DEPS})
|
|
||||||
get_target_property(location ${target} LOCATION)
|
|
||||||
if(location)
|
|
||||||
get_filename_component(path ${location} PATH)
|
|
||||||
string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
|
|
||||||
list(APPEND GR_TEST_LIBRARY_DIRS ${path})
|
|
||||||
endif(location)
|
|
||||||
endforeach(target)
|
|
||||||
|
|
||||||
#SWIG generates the python library files into a subdirectory.
|
|
||||||
#Therefore, we must append this subdirectory into PYTHONPATH.
|
|
||||||
#Only do this for the python directories matching the following:
|
|
||||||
foreach(pydir ${GR_TEST_PYTHON_DIRS})
|
|
||||||
get_filename_component(name ${pydir} NAME)
|
|
||||||
if(name MATCHES "^(swig|lib|src)$")
|
|
||||||
list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})
|
|
||||||
endif()
|
|
||||||
endforeach(pydir)
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)
|
|
||||||
file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?
|
|
||||||
file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?
|
|
||||||
|
|
||||||
set(environs "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")
|
|
||||||
|
|
||||||
#http://www.cmake.org/pipermail/cmake/2009-May/029464.html
|
|
||||||
#Replaced this add test + set environs code with the shell script generation.
|
|
||||||
#Its nicer to be able to manually run the shell script to diagnose problems.
|
|
||||||
#ADD_TEST(${ARGV})
|
|
||||||
#SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")
|
|
||||||
|
|
||||||
if(UNIX)
|
|
||||||
set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")
|
|
||||||
#set both LD and DYLD paths to cover multiple UNIX OS library paths
|
|
||||||
list(APPEND libpath "$LD_LIBRARY_PATH" "$DYLD_LIBRARY_PATH")
|
|
||||||
list(APPEND pypath "$PYTHONPATH")
|
|
||||||
|
|
||||||
#replace list separator with the path separator
|
|
||||||
string(REPLACE ";" ":" libpath "${libpath}")
|
|
||||||
string(REPLACE ";" ":" pypath "${pypath}")
|
|
||||||
list(APPEND environs "PATH=${binpath}" "LD_LIBRARY_PATH=${libpath}" "DYLD_LIBRARY_PATH=${libpath}" "PYTHONPATH=${pypath}")
|
|
||||||
|
|
||||||
#generate a bat file that sets the environment and runs the test
|
|
||||||
find_program(SHELL sh)
|
|
||||||
set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)
|
|
||||||
file(WRITE ${sh_file} "#!${SHELL}\n")
|
|
||||||
#each line sets an environment variable
|
|
||||||
foreach(environ ${environs})
|
|
||||||
file(APPEND ${sh_file} "export ${environ}\n")
|
|
||||||
endforeach(environ)
|
|
||||||
#load the command to run with its arguments
|
|
||||||
foreach(arg ${ARGN})
|
|
||||||
file(APPEND ${sh_file} "${arg} ")
|
|
||||||
endforeach(arg)
|
|
||||||
file(APPEND ${sh_file} "\n")
|
|
||||||
|
|
||||||
#make the shell file executable
|
|
||||||
execute_process(COMMAND chmod +x ${sh_file})
|
|
||||||
|
|
||||||
add_test(${test_name} ${SHELL} ${sh_file})
|
|
||||||
|
|
||||||
endif(UNIX)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
list(APPEND libpath ${DLL_PATHS} "%PATH%")
|
|
||||||
list(APPEND pypath "%PYTHONPATH%")
|
|
||||||
|
|
||||||
#replace list separator with the path separator (escaped)
|
|
||||||
string(REPLACE ";" "\\;" libpath "${libpath}")
|
|
||||||
string(REPLACE ";" "\\;" pypath "${pypath}")
|
|
||||||
list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")
|
|
||||||
|
|
||||||
#generate a bat file that sets the environment and runs the test
|
|
||||||
set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)
|
|
||||||
file(WRITE ${bat_file} "@echo off\n")
|
|
||||||
#each line sets an environment variable
|
|
||||||
foreach(environ ${environs})
|
|
||||||
file(APPEND ${bat_file} "SET ${environ}\n")
|
|
||||||
endforeach(environ)
|
|
||||||
#load the command to run with its arguments
|
|
||||||
foreach(arg ${ARGN})
|
|
||||||
file(APPEND ${bat_file} "${arg} ")
|
|
||||||
endforeach(arg)
|
|
||||||
file(APPEND ${bat_file} "\n")
|
|
||||||
|
|
||||||
add_test(${test_name} ${bat_file})
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
endfunction(GR_ADD_TEST)
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is part of gr-iqbalance
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
include(CMakeFindDependencyMacro)
|
||||||
|
|
||||||
|
set(target_deps "@TARGET_DEPENDENCIES@")
|
||||||
|
foreach(dep IN LISTS target_deps)
|
||||||
|
find_dependency(${dep})
|
||||||
|
endforeach()
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")
|
|
@ -1,26 +1,9 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file is part of gr-iqbalance
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup dependencies
|
|
||||||
########################################################################
|
|
||||||
find_package(Doxygen)
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Begin conditional configuration
|
# Begin conditional configuration
|
||||||
|
|
|
@ -1,21 +1,10 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gr-test
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Create the doxygen configuration file
|
# Create the doxygen configuration file
|
||||||
|
@ -28,6 +17,7 @@ file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir)
|
||||||
set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
|
set(HAVE_DOT ${DOXYGEN_DOT_FOUND})
|
||||||
set(enable_html_docs YES)
|
set(enable_html_docs YES)
|
||||||
set(enable_latex_docs NO)
|
set(enable_latex_docs NO)
|
||||||
|
set(enable_mathjax NO)
|
||||||
set(enable_xml_docs YES)
|
set(enable_xml_docs YES)
|
||||||
|
|
||||||
configure_file(
|
configure_file(
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,11 @@
|
||||||
#
|
#
|
||||||
# Copyright 2010 Free Software Foundation, Inc.
|
# Copyright 2010 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gr-test
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
#
|
#
|
||||||
"""
|
"""
|
||||||
Python interface to contents of doxygen xml documentation.
|
Python interface to contents of doxygen xml documentation.
|
||||||
|
@ -64,7 +53,7 @@ u'Outputs the vital aadvark statistics.'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
|
from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
|
||||||
|
|
||||||
def _test():
|
def _test():
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,22 +1,11 @@
|
||||||
#
|
#
|
||||||
# Copyright 2010 Free Software Foundation, Inc.
|
# Copyright 2010 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gr-test
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
#
|
#
|
||||||
"""
|
"""
|
||||||
A base class is created.
|
A base class is created.
|
||||||
|
@ -30,18 +19,18 @@ import pdb
|
||||||
|
|
||||||
from xml.parsers.expat import ExpatError
|
from xml.parsers.expat import ExpatError
|
||||||
|
|
||||||
from generated import compound
|
from .generated import compound
|
||||||
|
|
||||||
|
|
||||||
class Base(object):
|
class Base(object):
|
||||||
|
|
||||||
class Duplicate(StandardError):
|
class Duplicate(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class NoSuchMember(StandardError):
|
class NoSuchMember(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class ParsingError(StandardError):
|
class ParsingError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __init__(self, parse_data, top=None):
|
def __init__(self, parse_data, top=None):
|
||||||
|
@ -94,7 +83,7 @@ class Base(object):
|
||||||
for cls in self.mem_classes:
|
for cls in self.mem_classes:
|
||||||
if cls.can_parse(mem):
|
if cls.can_parse(mem):
|
||||||
return cls
|
return cls
|
||||||
raise StandardError(("Did not find a class for object '%s'." \
|
raise Exception(("Did not find a class for object '%s'." \
|
||||||
% (mem.get_name())))
|
% (mem.get_name())))
|
||||||
|
|
||||||
def convert_mem(self, mem):
|
def convert_mem(self, mem):
|
||||||
|
@ -102,11 +91,11 @@ class Base(object):
|
||||||
cls = self.get_cls(mem)
|
cls = self.get_cls(mem)
|
||||||
converted = cls.from_parse_data(mem, self.top)
|
converted = cls.from_parse_data(mem, self.top)
|
||||||
if converted is None:
|
if converted is None:
|
||||||
raise StandardError('No class matched this object.')
|
raise Exception('No class matched this object.')
|
||||||
self.add_ref(converted)
|
self.add_ref(converted)
|
||||||
return converted
|
return converted
|
||||||
except StandardError, e:
|
except Exception as e:
|
||||||
print e
|
print(e)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def includes(cls, inst):
|
def includes(cls, inst):
|
||||||
|
|
|
@ -1,22 +1,11 @@
|
||||||
#
|
#
|
||||||
# Copyright 2010 Free Software Foundation, Inc.
|
# Copyright 2010 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gr-test
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
#
|
#
|
||||||
"""
|
"""
|
||||||
Classes providing more user-friendly interfaces to the doxygen xml
|
Classes providing more user-friendly interfaces to the doxygen xml
|
||||||
|
@ -25,9 +14,9 @@ docs than the generated classes provide.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from generated import index
|
from .generated import index
|
||||||
from base import Base
|
from .base import Base
|
||||||
from text import description
|
from .text import description
|
||||||
|
|
||||||
class DoxyIndex(Base):
|
class DoxyIndex(Base):
|
||||||
"""
|
"""
|
||||||
|
@ -43,25 +32,20 @@ class DoxyIndex(Base):
|
||||||
self._root = index.parse(os.path.join(self._xml_path, 'index.xml'))
|
self._root = index.parse(os.path.join(self._xml_path, 'index.xml'))
|
||||||
for mem in self._root.compound:
|
for mem in self._root.compound:
|
||||||
converted = self.convert_mem(mem)
|
converted = self.convert_mem(mem)
|
||||||
# For files we want the contents to be accessible directly
|
# For files and namespaces we want the contents to be
|
||||||
# from the parent rather than having to go through the file
|
# accessible directly from the parent rather than having
|
||||||
# object.
|
# to go through the file object.
|
||||||
if self.get_cls(mem) == DoxyFile:
|
if self.get_cls(mem) == DoxyFile:
|
||||||
if mem.name.endswith('.h'):
|
if mem.name.endswith('.h'):
|
||||||
self._members += converted.members()
|
self._members += converted.members()
|
||||||
self._members.append(converted)
|
self._members.append(converted)
|
||||||
|
elif self.get_cls(mem) == DoxyNamespace:
|
||||||
|
self._members += converted.members()
|
||||||
|
self._members.append(converted)
|
||||||
else:
|
else:
|
||||||
self._members.append(converted)
|
self._members.append(converted)
|
||||||
|
|
||||||
|
|
||||||
def generate_swig_doc_i(self):
|
|
||||||
"""
|
|
||||||
%feature("docstring") gr_make_align_on_samplenumbers_ss::align_state "
|
|
||||||
Wraps the C++: gr_align_on_samplenumbers_ss::align_state";
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class DoxyCompMem(Base):
|
class DoxyCompMem(Base):
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,13 +64,29 @@ class DoxyCompMem(Base):
|
||||||
self._data['brief_description'] = bd
|
self._data['brief_description'] = bd
|
||||||
self._data['detailed_description'] = dd
|
self._data['detailed_description'] = dd
|
||||||
|
|
||||||
|
def set_parameters(self, data):
|
||||||
|
vs = [ddc.value for ddc in data.detaileddescription.content_]
|
||||||
|
pls = []
|
||||||
|
for v in vs:
|
||||||
|
if hasattr(v, 'parameterlist'):
|
||||||
|
pls += v.parameterlist
|
||||||
|
pis = []
|
||||||
|
for pl in pls:
|
||||||
|
pis += pl.parameteritem
|
||||||
|
dpis = []
|
||||||
|
for pi in pis:
|
||||||
|
dpi = DoxyParameterItem(pi)
|
||||||
|
dpi._parse()
|
||||||
|
dpis.append(dpi)
|
||||||
|
self._data['params'] = dpis
|
||||||
|
|
||||||
|
|
||||||
class DoxyCompound(DoxyCompMem):
|
class DoxyCompound(DoxyCompMem):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class DoxyMember(DoxyCompMem):
|
class DoxyMember(DoxyCompMem):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DoxyFunction(DoxyMember):
|
class DoxyFunction(DoxyMember):
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
__module__ = "gnuradio.utils.doxyxml"
|
||||||
|
@ -98,6 +98,9 @@ class DoxyFunction(DoxyMember):
|
||||||
return
|
return
|
||||||
super(DoxyFunction, self)._parse()
|
super(DoxyFunction, self)._parse()
|
||||||
self.set_descriptions(self._parse_data)
|
self.set_descriptions(self._parse_data)
|
||||||
|
self.set_parameters(self._parse_data)
|
||||||
|
if not self._data['params']:
|
||||||
|
# If the params weren't set by a comment then just grab the names.
|
||||||
self._data['params'] = []
|
self._data['params'] = []
|
||||||
prms = self._parse_data.param
|
prms = self._parse_data.param
|
||||||
for prm in prms:
|
for prm in prms:
|
||||||
|
@ -121,9 +124,39 @@ class DoxyParam(DoxyMember):
|
||||||
self.set_descriptions(self._parse_data)
|
self.set_descriptions(self._parse_data)
|
||||||
self._data['declname'] = self._parse_data.declname
|
self._data['declname'] = self._parse_data.declname
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self):
|
||||||
|
descriptions = []
|
||||||
|
if self.brief_description:
|
||||||
|
descriptions.append(self.brief_description)
|
||||||
|
if self.detailed_description:
|
||||||
|
descriptions.append(self.detailed_description)
|
||||||
|
return '\n\n'.join(descriptions)
|
||||||
|
|
||||||
brief_description = property(lambda self: self.data()['brief_description'])
|
brief_description = property(lambda self: self.data()['brief_description'])
|
||||||
detailed_description = property(lambda self: self.data()['detailed_description'])
|
detailed_description = property(lambda self: self.data()['detailed_description'])
|
||||||
declname = property(lambda self: self.data()['declname'])
|
name = property(lambda self: self.data()['declname'])
|
||||||
|
|
||||||
|
class DoxyParameterItem(DoxyMember):
|
||||||
|
"""A different representation of a parameter in Doxygen."""
|
||||||
|
|
||||||
|
def _parse(self):
|
||||||
|
if self._parsed:
|
||||||
|
return
|
||||||
|
super(DoxyParameterItem, self)._parse()
|
||||||
|
names = []
|
||||||
|
for nl in self._parse_data.parameternamelist:
|
||||||
|
for pn in nl.parametername:
|
||||||
|
names.append(description(pn))
|
||||||
|
# Just take first name
|
||||||
|
self._data['name'] = names[0]
|
||||||
|
# Get description
|
||||||
|
pd = description(self._parse_data.get_parameterdescription())
|
||||||
|
self._data['description'] = pd
|
||||||
|
|
||||||
|
description = property(lambda self: self.data()['description'])
|
||||||
|
name = property(lambda self: self.data()['name'])
|
||||||
|
|
||||||
|
|
||||||
class DoxyClass(DoxyCompound):
|
class DoxyClass(DoxyCompound):
|
||||||
|
|
||||||
|
@ -139,12 +172,14 @@ class DoxyClass(DoxyCompound):
|
||||||
if self._error:
|
if self._error:
|
||||||
return
|
return
|
||||||
self.set_descriptions(self._retrieved_data.compounddef)
|
self.set_descriptions(self._retrieved_data.compounddef)
|
||||||
|
self.set_parameters(self._retrieved_data.compounddef)
|
||||||
# Sectiondef.kind tells about whether private or public.
|
# Sectiondef.kind tells about whether private or public.
|
||||||
# We just ignore this for now.
|
# We just ignore this for now.
|
||||||
self.process_memberdefs()
|
self.process_memberdefs()
|
||||||
|
|
||||||
brief_description = property(lambda self: self.data()['brief_description'])
|
brief_description = property(lambda self: self.data()['brief_description'])
|
||||||
detailed_description = property(lambda self: self.data()['detailed_description'])
|
detailed_description = property(lambda self: self.data()['detailed_description'])
|
||||||
|
params = property(lambda self: self.data()['params'])
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyClass)
|
Base.mem_classes.append(DoxyClass)
|
||||||
|
|
||||||
|
@ -177,6 +212,16 @@ class DoxyNamespace(DoxyCompound):
|
||||||
|
|
||||||
kind = 'namespace'
|
kind = 'namespace'
|
||||||
|
|
||||||
|
def _parse(self):
|
||||||
|
if self._parsed:
|
||||||
|
return
|
||||||
|
super(DoxyNamespace, self)._parse()
|
||||||
|
self.retrieve_data()
|
||||||
|
self.set_descriptions(self._retrieved_data.compounddef)
|
||||||
|
if self._error:
|
||||||
|
return
|
||||||
|
self.process_memberdefs()
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyNamespace)
|
Base.mem_classes.append(DoxyNamespace)
|
||||||
|
|
||||||
|
|
||||||
|
@ -227,11 +272,11 @@ class DoxyOther(Base):
|
||||||
|
|
||||||
__module__ = "gnuradio.utils.doxyxml"
|
__module__ = "gnuradio.utils.doxyxml"
|
||||||
|
|
||||||
kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page'])
|
kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum',
|
||||||
|
'dir', 'page', 'signal', 'slot', 'property'])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def can_parse(cls, obj):
|
def can_parse(cls, obj):
|
||||||
return obj.kind in cls.kinds
|
return obj.kind in cls.kinds
|
||||||
|
|
||||||
Base.mem_classes.append(DoxyOther)
|
Base.mem_classes.append(DoxyOther)
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,50 +0,0 @@
|
||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2010 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.
|
|
||||||
*/
|
|
||||||
#include <iostream>
|
|
||||||
#include "aadvark.h"
|
|
||||||
|
|
||||||
void Aadvark::print() {
|
|
||||||
std::cout << "aadvark is " << aadvarkness << "/10 aadvarky" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
Aadvark::Aadvark(int aaness): aadvarkness(aaness) {}
|
|
||||||
|
|
||||||
bool aadvarky_enough(Aadvark aad) {
|
|
||||||
if (aad.get_aadvarkness() > 6)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Aadvark::get_aadvarkness() {
|
|
||||||
return aadvarkness;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
Aadvark arold = Aadvark(6);
|
|
||||||
arold.print();
|
|
||||||
if (aadvarky_enough(arold))
|
|
||||||
std::cout << "He is aadvarky enough" << std::endl;
|
|
||||||
else
|
|
||||||
std::cout << "He is not aadvarky enough" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2010 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.
|
|
||||||
*/
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Models the mammal Aadvark.
|
|
||||||
*
|
|
||||||
* Sadly the model is incomplete and cannot capture all aspects of an aadvark yet.
|
|
||||||
*
|
|
||||||
* This line is uninformative and is only to test line breaks in the comments.
|
|
||||||
*/
|
|
||||||
class Aadvark {
|
|
||||||
public:
|
|
||||||
//! \brief Outputs the vital aadvark statistics.
|
|
||||||
void print();
|
|
||||||
//! \param aaness The aadvarkness of an aadvark is a measure of how aadvarky it is.
|
|
||||||
Aadvark(int aaness);
|
|
||||||
int get_aadvarkness();
|
|
||||||
private:
|
|
||||||
int aadvarkness;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool aadvarky_enough(Aadvark aad);
|
|
||||||
|
|
||||||
int main();
|
|
|
@ -1,88 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.6.3">
|
|
||||||
<compounddef id="aadvark_8cc" kind="file">
|
|
||||||
<compoundname>aadvark.cc</compoundname>
|
|
||||||
<includes local="no">iostream</includes>
|
|
||||||
<includes refid="aadvark_8cc" local="yes">aadvark.h</includes>
|
|
||||||
<includedby refid="aadvark_8cc" local="yes">aadvark.cc</includedby>
|
|
||||||
<incdepgraph>
|
|
||||||
<node id="0">
|
|
||||||
<label>aadvark.cc</label>
|
|
||||||
<link refid="aadvark.cc"/>
|
|
||||||
<childnode refid="1" relation="include">
|
|
||||||
</childnode>
|
|
||||||
</node>
|
|
||||||
<node id="1">
|
|
||||||
<label>iostream</label>
|
|
||||||
</node>
|
|
||||||
</incdepgraph>
|
|
||||||
<sectiondef kind="func">
|
|
||||||
<memberdef kind="function" id="aadvark_8cc_1acb52858524210ec6dddc3e16d1e52946" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>bool</type>
|
|
||||||
<definition>bool aadvarky_enough</definition>
|
|
||||||
<argsstring>(Aadvark aad)</argsstring>
|
|
||||||
<name>aadvarky_enough</name>
|
|
||||||
<param>
|
|
||||||
<type><ref refid="classAadvark" kindref="compound">Aadvark</ref></type>
|
|
||||||
<declname>aad</declname>
|
|
||||||
</param>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" line="10" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="10" bodyend="15"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="aadvark_8cc_1ae66f6b31b5ad750f1fe042a706a4e3d4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int main</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>main</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" line="21" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="21" bodyend="28"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<programlisting>
|
|
||||||
<codeline lineno="1"><highlight class="preprocessor">#include<sp/><iostream></highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="2"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"aadvark.h"</highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="3"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kindref="member" tooltip="Outputs the vital aadvark statistics.">Aadvark::print</ref>()<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="5"><highlight class="normal"><sp/><sp/>std::cout<sp/><<<sp/></highlight><highlight class="stringliteral">"aadvark<sp/>is<sp/>"</highlight><highlight class="normal"><sp/><<<sp/>aadvarkness<sp/><<<sp/></highlight><highlight class="stringliteral">"/10<sp/>aadvarky"</highlight><highlight class="normal"><sp/><<<sp/>std::endl;</highlight></codeline>
|
|
||||||
<codeline lineno="6"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="7"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="8"><highlight class="normal"><ref refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" kindref="member">Aadvark::Aadvark</ref>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>aaness):<sp/>aadvarkness(aaness)<sp/>{}</highlight></codeline>
|
|
||||||
<codeline lineno="9"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="10"><highlight class="normal"></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>aadvarky_enough(<ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>aad)<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="11"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(aad.get_aadvarkness()<sp/>><sp/>6)</highlight></codeline>
|
|
||||||
<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
|
|
||||||
<codeline lineno="13"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="14"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
|
|
||||||
<codeline lineno="15"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="16"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="17"><highlight class="normal"></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>Aadvark::get_aadvarkness()<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="18"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>aadvarkness;</highlight></codeline>
|
|
||||||
<codeline lineno="19"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="20"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="21"><highlight class="normal"></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>main()<sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="22"><highlight class="normal"><sp/><sp/><ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>arold<sp/>=<sp/><ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref>(6);</highlight></codeline>
|
|
||||||
<codeline lineno="23"><highlight class="normal"><sp/><sp/>arold.<ref refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kindref="member" tooltip="Outputs the vital aadvark statistics.">print</ref>();</highlight></codeline>
|
|
||||||
<codeline lineno="24"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(aadvarky_enough(arold))</highlight></codeline>
|
|
||||||
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/>std::cout<sp/><<<sp/></highlight><highlight class="stringliteral">"He<sp/>is<sp/>aadvarky<sp/>enough"</highlight><highlight class="normal"><sp/><<<sp/>std::endl;</highlight></codeline>
|
|
||||||
<codeline lineno="26"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/>std::cout<sp/><<<sp/></highlight><highlight class="stringliteral">"He<sp/>is<sp/>not<sp/>aadvarky<sp/>enough"</highlight><highlight class="normal"><sp/><<<sp/>std::endl;</highlight></codeline>
|
|
||||||
<codeline lineno="28"><highlight class="normal">}</highlight></codeline>
|
|
||||||
<codeline lineno="29"><highlight class="normal"></highlight></codeline>
|
|
||||||
</programlisting>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc"/>
|
|
||||||
</compounddef>
|
|
||||||
</doxygen>
|
|
|
@ -1,72 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.6.3">
|
|
||||||
<compounddef id="aadvark_8h" kind="file">
|
|
||||||
<compoundname>aadvark.h</compoundname>
|
|
||||||
<includes local="no">iostream</includes>
|
|
||||||
<incdepgraph>
|
|
||||||
<node id="3">
|
|
||||||
<label>aadvark.h</label>
|
|
||||||
<link refid="aadvark.h"/>
|
|
||||||
<childnode refid="4" relation="include">
|
|
||||||
</childnode>
|
|
||||||
</node>
|
|
||||||
<node id="4">
|
|
||||||
<label>iostream</label>
|
|
||||||
</node>
|
|
||||||
</incdepgraph>
|
|
||||||
<innerclass refid="classAadvark" prot="public">Aadvark</innerclass>
|
|
||||||
<sectiondef kind="func">
|
|
||||||
<memberdef kind="function" id="aadvark_8h_1acb52858524210ec6dddc3e16d1e52946" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>bool</type>
|
|
||||||
<definition>bool aadvarky_enough</definition>
|
|
||||||
<argsstring>(Aadvark aad)</argsstring>
|
|
||||||
<name>aadvarky_enough</name>
|
|
||||||
<param>
|
|
||||||
<type><ref refid="classAadvark" kindref="compound">Aadvark</ref></type>
|
|
||||||
<declname>aad</declname>
|
|
||||||
</param>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="21" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="10" bodyend="15"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="aadvark_8h_1ae66f6b31b5ad750f1fe042a706a4e3d4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int main</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>main</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="23" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="21" bodyend="28"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<programlisting>
|
|
||||||
<codeline lineno="1"><highlight class="preprocessor">#include<sp/><iostream></highlight><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="2"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="10" refid="classAadvark" refkind="compound"><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>{</highlight></codeline>
|
|
||||||
<codeline lineno="11"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
|
|
||||||
<codeline lineno="13"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kindref="member" tooltip="Outputs the vital aadvark statistics.">print</ref>();</highlight></codeline>
|
|
||||||
<codeline lineno="15"><highlight class="normal"><sp/><sp/><ref refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" kindref="member">Aadvark</ref>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>aaness);</highlight></codeline>
|
|
||||||
<codeline lineno="16"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>get_aadvarkness();</highlight></codeline>
|
|
||||||
<codeline lineno="17"><highlight class="normal"></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
|
|
||||||
<codeline lineno="18"><highlight class="normal"><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>aadvarkness;</highlight></codeline>
|
|
||||||
<codeline lineno="19"><highlight class="normal">};</highlight></codeline>
|
|
||||||
<codeline lineno="20"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="21"><highlight class="normal"></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>aadvarky_enough(<ref refid="classAadvark" kindref="compound" tooltip="Models the mammal Aadvark.">Aadvark</ref><sp/>aad);</highlight></codeline>
|
|
||||||
<codeline lineno="22"><highlight class="normal"></highlight></codeline>
|
|
||||||
<codeline lineno="23"><highlight class="normal"></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>main();</highlight></codeline>
|
|
||||||
</programlisting>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h"/>
|
|
||||||
</compounddef>
|
|
||||||
</doxygen>
|
|
|
@ -1,86 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.6.3">
|
|
||||||
<compounddef id="classAadvark" kind="class" prot="public">
|
|
||||||
<compoundname>Aadvark</compoundname>
|
|
||||||
<includes refid="aadvark_8h" local="no">aadvark.h</includes>
|
|
||||||
<sectiondef kind="private-attrib">
|
|
||||||
<memberdef kind="variable" id="classAadvark_1ab79eb58d7bb9d5ddfa5d6f783836cab9" prot="private" static="no" mutable="no">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int Aadvark::aadvarkness</definition>
|
|
||||||
<argsstring></argsstring>
|
|
||||||
<name>aadvarkness</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="18" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" bodystart="18" bodyend="-1"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<sectiondef kind="public-func">
|
|
||||||
<memberdef kind="function" id="classAadvark_1abd061aa5f998002e72080a34f512a059" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>void</type>
|
|
||||||
<definition>void Aadvark::print</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>print</name>
|
|
||||||
<briefdescription>
|
|
||||||
<para>Outputs the vital aadvark statistics. </para> </briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="13" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="4" bodyend="6"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="classAadvark_1adf1a4b97a641411a74a04ab312484462" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type></type>
|
|
||||||
<definition>Aadvark::Aadvark</definition>
|
|
||||||
<argsstring>(int aaness)</argsstring>
|
|
||||||
<name>Aadvark</name>
|
|
||||||
<param>
|
|
||||||
<type>int</type>
|
|
||||||
<declname>aaness</declname>
|
|
||||||
</param>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
<para><parameterlist kind="param"><parameteritem>
|
|
||||||
<parameternamelist>
|
|
||||||
<parametername>aaness</parametername>
|
|
||||||
</parameternamelist>
|
|
||||||
<parameterdescription>
|
|
||||||
<para>The aadvarkness of an aadvark is a measure of how aadvarky it is. </para></parameterdescription>
|
|
||||||
</parameteritem>
|
|
||||||
</parameterlist>
|
|
||||||
</para> </detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="15" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="8" bodyend="8"/>
|
|
||||||
</memberdef>
|
|
||||||
<memberdef kind="function" id="classAadvark_1affd2ada0a85807efcbe26615a848f53e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
|
||||||
<type>int</type>
|
|
||||||
<definition>int Aadvark::get_aadvarkness</definition>
|
|
||||||
<argsstring>()</argsstring>
|
|
||||||
<name>get_aadvarkness</name>
|
|
||||||
<briefdescription>
|
|
||||||
</briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
</detaileddescription>
|
|
||||||
<inbodydescription>
|
|
||||||
</inbodydescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="16" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.cc" bodystart="17" bodyend="19"/>
|
|
||||||
</memberdef>
|
|
||||||
</sectiondef>
|
|
||||||
<briefdescription>
|
|
||||||
<para>Models the mammal <ref refid="classAadvark" kindref="compound">Aadvark</ref>. </para> </briefdescription>
|
|
||||||
<detaileddescription>
|
|
||||||
<para>Sadly the model is incomplete and cannot capture all aspects of an aadvark yet.</para><para>This line is uninformative and is only to test line breaks in the comments. </para> </detaileddescription>
|
|
||||||
<location file="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" line="10" bodyfile="/home/ben/gnuradio/gnuradio-core/src/python/gnuradio/utils/doxyxml/example/aadvark.h" bodystart="10" bodyend="19"/>
|
|
||||||
<listofallmembers>
|
|
||||||
<member refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" prot="public" virt="non-virtual"><scope>Aadvark</scope><name>Aadvark</name></member>
|
|
||||||
<member refid="classAadvark_1ab79eb58d7bb9d5ddfa5d6f783836cab9" prot="private" virt="non-virtual"><scope>Aadvark</scope><name>aadvarkness</name></member>
|
|
||||||
<member refid="classAadvark_1affd2ada0a85807efcbe26615a848f53e" prot="public" virt="non-virtual"><scope>Aadvark</scope><name>get_aadvarkness</name></member>
|
|
||||||
<member refid="classAadvark_1abd061aa5f998002e72080a34f512a059" prot="public" virt="non-virtual"><scope>Aadvark</scope><name>print</name></member>
|
|
||||||
</listofallmembers>
|
|
||||||
</compounddef>
|
|
||||||
</doxygen>
|
|
|
@ -1,15 +0,0 @@
|
||||||
<!-- XSLT script to combine the generated output into a single file.
|
|
||||||
If you have xsltproc you could use:
|
|
||||||
xsltproc combine.xslt index.xml >all.xml
|
|
||||||
-->
|
|
||||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
|
||||||
<xsl:output method="xml" version="1.0" indent="yes" standalone="yes" />
|
|
||||||
<xsl:template match="/">
|
|
||||||
<doxygen version="{doxygenindex/@version}">
|
|
||||||
<!-- Load all doxgen generated xml files -->
|
|
||||||
<xsl:for-each select="doxygenindex/compound">
|
|
||||||
<xsl:copy-of select="document( concat( @refid, '.xml' ) )/doxygen/*" />
|
|
||||||
</xsl:for-each>
|
|
||||||
</doxygen>
|
|
||||||
</xsl:template>
|
|
||||||
</xsl:stylesheet>
|
|
|
@ -1,814 +0,0 @@
|
||||||
<?xml version='1.0' encoding='utf-8' ?>
|
|
||||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
||||||
<xsd:element name="doxygen" type="DoxygenType"/>
|
|
||||||
|
|
||||||
<!-- Complex types -->
|
|
||||||
|
|
||||||
<xsd:complexType name="DoxygenType">
|
|
||||||
<xsd:sequence maxOccurs="unbounded">
|
|
||||||
<xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="version" type="DoxVersionNumber" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="compounddefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="compoundname" type="xsd:string"/>
|
|
||||||
<xsd:element name="title" type="xsd:string" minOccurs="0" />
|
|
||||||
<xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
|
|
||||||
<xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
|
|
||||||
<xsd:element name="programlisting" type="listingType" minOccurs="0" />
|
|
||||||
<xsd:element name="location" type="locationType" minOccurs="0" />
|
|
||||||
<xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
<xsd:attribute name="kind" type="DoxCompoundKind" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="listofallmembersType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="memberRefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="scope" />
|
|
||||||
<xsd:element name="name" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
<xsd:attribute name="virt" type="DoxVirtualKind" />
|
|
||||||
<xsd:attribute name="ambiguityscope" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="compoundRefType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" use="optional" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
<xsd:attribute name="virt" type="DoxVirtualKind" />
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="reimplementType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="incType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="local" type="DoxBool" />
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="refType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="refTextType" mixed="true">
|
|
||||||
<xsd:simpleContent>
|
|
||||||
<xsd:extension base="xsd:string">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="kindref" type="DoxRefKind" />
|
|
||||||
<xsd:attribute name="external" type="xsd:string" use="optional"/>
|
|
||||||
<xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
|
|
||||||
</xsd:extension>
|
|
||||||
</xsd:simpleContent>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="sectiondefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="header" type="xsd:string" minOccurs="0" />
|
|
||||||
<xsd:element name="description" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxSectionKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="memberdefType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
|
|
||||||
<xsd:element name="type" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="definition" minOccurs="0" />
|
|
||||||
<xsd:element name="argsstring" minOccurs="0" />
|
|
||||||
<xsd:element name="name" />
|
|
||||||
<xsd:element name="read" minOccurs="0" />
|
|
||||||
<xsd:element name="write" minOccurs="0" />
|
|
||||||
<xsd:element name="bitfield" minOccurs="0" />
|
|
||||||
<xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="location" type="locationType" />
|
|
||||||
<xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxMemberKind" />
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
<xsd:attribute name="static" type="DoxBool" />
|
|
||||||
<xsd:attribute name="const" type="DoxBool" />
|
|
||||||
<xsd:attribute name="explicit" type="DoxBool" />
|
|
||||||
<xsd:attribute name="inline" type="DoxBool" />
|
|
||||||
<xsd:attribute name="virt" type="DoxVirtualKind" />
|
|
||||||
<xsd:attribute name="volatile" type="DoxBool" />
|
|
||||||
<xsd:attribute name="mutable" type="DoxBool" />
|
|
||||||
<!-- Qt property -->
|
|
||||||
<xsd:attribute name="readable" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="writable" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI variable -->
|
|
||||||
<xsd:attribute name="initonly" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI and C# property -->
|
|
||||||
<xsd:attribute name="settable" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="gettable" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI function -->
|
|
||||||
<xsd:attribute name="final" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="sealed" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="new" type="DoxBool" use="optional"/>
|
|
||||||
<!-- C++/CLI event -->
|
|
||||||
<xsd:attribute name="add" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="remove" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="raise" type="DoxBool" use="optional"/>
|
|
||||||
<!-- Objective-C 2.0 protocol method -->
|
|
||||||
<xsd:attribute name="optional" type="DoxBool" use="optional"/>
|
|
||||||
<xsd:attribute name="required" type="DoxBool" use="optional"/>
|
|
||||||
<!-- Objective-C 2.0 property accessor -->
|
|
||||||
<xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="descriptionType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" minOccurs="0"/>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="enumvalueType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="name" />
|
|
||||||
<xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
<xsd:attribute name="prot" type="DoxProtectionKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="templateparamlistType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="paramType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="type" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="declname" minOccurs="0" />
|
|
||||||
<xsd:element name="defname" minOccurs="0" />
|
|
||||||
<xsd:element name="array" minOccurs="0" />
|
|
||||||
<xsd:element name="defval" type="linkedTextType" minOccurs="0" />
|
|
||||||
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="linkedTextType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="graphType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="nodeType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="label" />
|
|
||||||
<xsd:element name="link" type="linkType" minOccurs="0" />
|
|
||||||
<xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="childnodeType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="relation" type="DoxGraphRelation" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="linkType">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="external" type="xsd:string" use="optional"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="listingType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="codelineType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="lineno" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="refkind" type="DoxRefKind" />
|
|
||||||
<xsd:attribute name="external" type="DoxBool" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="highlightType" mixed="true">
|
|
||||||
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xsd:element name="sp" />
|
|
||||||
<xsd:element name="ref" type="refTextType" />
|
|
||||||
</xsd:choice>
|
|
||||||
<xsd:attribute name="class" type="DoxHighlightClass" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="referenceType" mixed="true">
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="compoundref" type="xsd:string" use="optional" />
|
|
||||||
<xsd:attribute name="startline" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="endline" type="xsd:integer" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="locationType">
|
|
||||||
<xsd:attribute name="file" type="xsd:string" />
|
|
||||||
<xsd:attribute name="line" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="bodyfile" type="xsd:string" />
|
|
||||||
<xsd:attribute name="bodystart" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="bodyend" type="xsd:integer" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect1Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS1Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect2Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect3Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSect4Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="xsd:string" />
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalType" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS1Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS2Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS3Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docInternalS4Type" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:group name="docTitleCmdGroup">
|
|
||||||
<xsd:choice>
|
|
||||||
<xsd:element name="ulink" type="docURLLink" />
|
|
||||||
<xsd:element name="bold" type="docMarkupType" />
|
|
||||||
<xsd:element name="emphasis" type="docMarkupType" />
|
|
||||||
<xsd:element name="computeroutput" type="docMarkupType" />
|
|
||||||
<xsd:element name="subscript" type="docMarkupType" />
|
|
||||||
<xsd:element name="superscript" type="docMarkupType" />
|
|
||||||
<xsd:element name="center" type="docMarkupType" />
|
|
||||||
<xsd:element name="small" type="docMarkupType" />
|
|
||||||
<xsd:element name="htmlonly" type="xsd:string" />
|
|
||||||
<xsd:element name="latexonly" type="xsd:string" />
|
|
||||||
<xsd:element name="dot" type="xsd:string" />
|
|
||||||
<xsd:element name="anchor" type="docAnchorType" />
|
|
||||||
<xsd:element name="formula" type="docFormulaType" />
|
|
||||||
<xsd:element name="ref" type="docRefTextType" />
|
|
||||||
<xsd:element name="copy" type="docEmptyType" />
|
|
||||||
<xsd:element name="trademark" type="docEmptyType" />
|
|
||||||
<xsd:element name="registered" type="docEmptyType" />
|
|
||||||
<xsd:element name="lsquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="rsquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="ldquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="rdquo" type="docEmptyType" />
|
|
||||||
<xsd:element name="ndash" type="docEmptyType" />
|
|
||||||
<xsd:element name="mdash" type="docEmptyType" />
|
|
||||||
<xsd:element name="umlaut" type="docCharType" />
|
|
||||||
<xsd:element name="acute" type="docCharType" />
|
|
||||||
<xsd:element name="grave" type="docCharType" />
|
|
||||||
<xsd:element name="circ" type="docCharType" />
|
|
||||||
<xsd:element name="slash" type="docCharType" />
|
|
||||||
<xsd:element name="tilde" type="docCharType" />
|
|
||||||
<xsd:element name="cedil" type="docCharType" />
|
|
||||||
<xsd:element name="ring" type="docCharType" />
|
|
||||||
<xsd:element name="szlig" type="docEmptyType" />
|
|
||||||
<xsd:element name="nonbreakablespace" type="docEmptyType" />
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:group>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTitleType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:group name="docCmdGroup">
|
|
||||||
<xsd:choice>
|
|
||||||
<xsd:group ref="docTitleCmdGroup"/>
|
|
||||||
<xsd:element name="linebreak" type="docEmptyType" />
|
|
||||||
<xsd:element name="hruler" type="docEmptyType" />
|
|
||||||
<xsd:element name="preformatted" type="docMarkupType" />
|
|
||||||
<xsd:element name="programlisting" type="listingType" />
|
|
||||||
<xsd:element name="verbatim" type="xsd:string" />
|
|
||||||
<xsd:element name="indexentry" type="docIndexEntryType" />
|
|
||||||
<xsd:element name="orderedlist" type="docListType" />
|
|
||||||
<xsd:element name="itemizedlist" type="docListType" />
|
|
||||||
<xsd:element name="simplesect" type="docSimpleSectType" />
|
|
||||||
<xsd:element name="title" type="docTitleType" />
|
|
||||||
<xsd:element name="variablelist" type="docVariableListType" />
|
|
||||||
<xsd:element name="table" type="docTableType" />
|
|
||||||
<xsd:element name="heading" type="docHeadingType" />
|
|
||||||
<xsd:element name="image" type="docImageType" />
|
|
||||||
<xsd:element name="dotfile" type="docDotFileType" />
|
|
||||||
<xsd:element name="toclist" type="docTocListType" />
|
|
||||||
<xsd:element name="language" type="docLanguageType" />
|
|
||||||
<xsd:element name="parameterlist" type="docParamListType" />
|
|
||||||
<xsd:element name="xrefsect" type="docXRefSectType" />
|
|
||||||
<xsd:element name="copydoc" type="docCopyType" />
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:group>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParaType" mixed="true">
|
|
||||||
<xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docMarkupType" mixed="true">
|
|
||||||
<xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docURLLink" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="url" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docAnchorType" mixed="true">
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docFormulaType" mixed="true">
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docIndexEntryType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="primaryie" type="xsd:string" />
|
|
||||||
<xsd:element name="secondaryie" type="xsd:string" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docListItemType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docSimpleSectType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="title" type="docTitleType" minOccurs="0" />
|
|
||||||
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="simplesectsep" type="docEmptyType" minOccurs="0"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxSimpleSectKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docVarListEntryType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="term" type="docTitleType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:group name="docVariableListGroup">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="varlistentry" type="docVarListEntryType" />
|
|
||||||
<xsd:element name="listitem" type="docListItemType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:group>
|
|
||||||
|
|
||||||
<xsd:complexType name="docVariableListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docRefTextType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" />
|
|
||||||
<xsd:attribute name="kindref" type="DoxRefKind" />
|
|
||||||
<xsd:attribute name="external" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTableType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="caption" type="docCaptionType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="rows" type="xsd:integer" />
|
|
||||||
<xsd:attribute name="cols" type="xsd:integer" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docRowType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docEntryType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="thead" type="DoxBool" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docCaptionType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docHeadingType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docImageType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="type" type="DoxImageKind" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
<xsd:attribute name="width" type="xsd:string" />
|
|
||||||
<xsd:attribute name="height" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docDotFileType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTocItemType" mixed="true">
|
|
||||||
<xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docTocListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docLanguageType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="langid" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamListType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="kind" type="DoxParamListKind" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamListItem">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="parameterdescription" type="descriptionType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamNameList">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xsd:sequence>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docParamName" mixed="true">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="direction" type="DoxParamDir" use="optional" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docXRefSectType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="xrefdescription" type="descriptionType" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="id" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docCopyType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xsd:element name="internal" type="docInternalType" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="link" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docCharType">
|
|
||||||
<xsd:attribute name="char" type="DoxCharRange"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="docEmptyType"/>
|
|
||||||
|
|
||||||
<!-- Simple types -->
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxBool">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="yes" />
|
|
||||||
<xsd:enumeration value="no" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxGraphRelation">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="include" />
|
|
||||||
<xsd:enumeration value="usage" />
|
|
||||||
<xsd:enumeration value="template-instance" />
|
|
||||||
<xsd:enumeration value="public-inheritance" />
|
|
||||||
<xsd:enumeration value="protected-inheritance" />
|
|
||||||
<xsd:enumeration value="private-inheritance" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxRefKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="compound" />
|
|
||||||
<xsd:enumeration value="member" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxMemberKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="define" />
|
|
||||||
<xsd:enumeration value="property" />
|
|
||||||
<xsd:enumeration value="event" />
|
|
||||||
<xsd:enumeration value="variable" />
|
|
||||||
<xsd:enumeration value="typedef" />
|
|
||||||
<xsd:enumeration value="enum" />
|
|
||||||
<xsd:enumeration value="function" />
|
|
||||||
<xsd:enumeration value="signal" />
|
|
||||||
<xsd:enumeration value="prototype" />
|
|
||||||
<xsd:enumeration value="friend" />
|
|
||||||
<xsd:enumeration value="dcop" />
|
|
||||||
<xsd:enumeration value="slot" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxProtectionKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="public" />
|
|
||||||
<xsd:enumeration value="protected" />
|
|
||||||
<xsd:enumeration value="private" />
|
|
||||||
<xsd:enumeration value="package" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxVirtualKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="non-virtual" />
|
|
||||||
<xsd:enumeration value="virtual" />
|
|
||||||
<xsd:enumeration value="pure-virtual" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxCompoundKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="class" />
|
|
||||||
<xsd:enumeration value="struct" />
|
|
||||||
<xsd:enumeration value="union" />
|
|
||||||
<xsd:enumeration value="interface" />
|
|
||||||
<xsd:enumeration value="protocol" />
|
|
||||||
<xsd:enumeration value="category" />
|
|
||||||
<xsd:enumeration value="exception" />
|
|
||||||
<xsd:enumeration value="file" />
|
|
||||||
<xsd:enumeration value="namespace" />
|
|
||||||
<xsd:enumeration value="group" />
|
|
||||||
<xsd:enumeration value="page" />
|
|
||||||
<xsd:enumeration value="example" />
|
|
||||||
<xsd:enumeration value="dir" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxSectionKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="user-defined" />
|
|
||||||
<xsd:enumeration value="public-type" />
|
|
||||||
<xsd:enumeration value="public-func" />
|
|
||||||
<xsd:enumeration value="public-attrib" />
|
|
||||||
<xsd:enumeration value="public-slot" />
|
|
||||||
<xsd:enumeration value="signal" />
|
|
||||||
<xsd:enumeration value="dcop-func" />
|
|
||||||
<xsd:enumeration value="property" />
|
|
||||||
<xsd:enumeration value="event" />
|
|
||||||
<xsd:enumeration value="public-static-func" />
|
|
||||||
<xsd:enumeration value="public-static-attrib" />
|
|
||||||
<xsd:enumeration value="protected-type" />
|
|
||||||
<xsd:enumeration value="protected-func" />
|
|
||||||
<xsd:enumeration value="protected-attrib" />
|
|
||||||
<xsd:enumeration value="protected-slot" />
|
|
||||||
<xsd:enumeration value="protected-static-func" />
|
|
||||||
<xsd:enumeration value="protected-static-attrib" />
|
|
||||||
<xsd:enumeration value="package-type" />
|
|
||||||
<xsd:enumeration value="package-func" />
|
|
||||||
<xsd:enumeration value="package-attrib" />
|
|
||||||
<xsd:enumeration value="package-static-func" />
|
|
||||||
<xsd:enumeration value="package-static-attrib" />
|
|
||||||
<xsd:enumeration value="private-type" />
|
|
||||||
<xsd:enumeration value="private-func" />
|
|
||||||
<xsd:enumeration value="private-attrib" />
|
|
||||||
<xsd:enumeration value="private-slot" />
|
|
||||||
<xsd:enumeration value="private-static-func" />
|
|
||||||
<xsd:enumeration value="private-static-attrib" />
|
|
||||||
<xsd:enumeration value="friend" />
|
|
||||||
<xsd:enumeration value="related" />
|
|
||||||
<xsd:enumeration value="define" />
|
|
||||||
<xsd:enumeration value="prototype" />
|
|
||||||
<xsd:enumeration value="typedef" />
|
|
||||||
<xsd:enumeration value="enum" />
|
|
||||||
<xsd:enumeration value="func" />
|
|
||||||
<xsd:enumeration value="var" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxHighlightClass">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="comment" />
|
|
||||||
<xsd:enumeration value="normal" />
|
|
||||||
<xsd:enumeration value="preprocessor" />
|
|
||||||
<xsd:enumeration value="keyword" />
|
|
||||||
<xsd:enumeration value="keywordtype" />
|
|
||||||
<xsd:enumeration value="keywordflow" />
|
|
||||||
<xsd:enumeration value="stringliteral" />
|
|
||||||
<xsd:enumeration value="charliteral" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxSimpleSectKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="see" />
|
|
||||||
<xsd:enumeration value="return" />
|
|
||||||
<xsd:enumeration value="author" />
|
|
||||||
<xsd:enumeration value="authors" />
|
|
||||||
<xsd:enumeration value="version" />
|
|
||||||
<xsd:enumeration value="since" />
|
|
||||||
<xsd:enumeration value="date" />
|
|
||||||
<xsd:enumeration value="note" />
|
|
||||||
<xsd:enumeration value="warning" />
|
|
||||||
<xsd:enumeration value="pre" />
|
|
||||||
<xsd:enumeration value="post" />
|
|
||||||
<xsd:enumeration value="invariant" />
|
|
||||||
<xsd:enumeration value="remark" />
|
|
||||||
<xsd:enumeration value="attention" />
|
|
||||||
<xsd:enumeration value="par" />
|
|
||||||
<xsd:enumeration value="rcs" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxVersionNumber">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:pattern value="\d+\.\d+.*" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxImageKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="html" />
|
|
||||||
<xsd:enumeration value="latex" />
|
|
||||||
<xsd:enumeration value="rtf" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxParamListKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="param" />
|
|
||||||
<xsd:enumeration value="retval" />
|
|
||||||
<xsd:enumeration value="exception" />
|
|
||||||
<xsd:enumeration value="templateparam" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxCharRange">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:pattern value="[aeiouncAEIOUNC]" />
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxParamDir">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="in"/>
|
|
||||||
<xsd:enumeration value="out"/>
|
|
||||||
<xsd:enumeration value="inout"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="DoxAccessor">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="retain"/>
|
|
||||||
<xsd:enumeration value="copy"/>
|
|
||||||
<xsd:enumeration value="assign"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
</xsd:schema>
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
|
||||||
<doxygenindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="index.xsd" version="1.6.3">
|
|
||||||
<compound refid="classAadvark" kind="class"><name>Aadvark</name>
|
|
||||||
<member refid="classAadvark_1ab79eb58d7bb9d5ddfa5d6f783836cab9" kind="variable"><name>aadvarkness</name></member>
|
|
||||||
<member refid="classAadvark_1abd061aa5f998002e72080a34f512a059" kind="function"><name>print</name></member>
|
|
||||||
<member refid="classAadvark_1adf1a4b97a641411a74a04ab312484462" kind="function"><name>Aadvark</name></member>
|
|
||||||
<member refid="classAadvark_1affd2ada0a85807efcbe26615a848f53e" kind="function"><name>get_aadvarkness</name></member>
|
|
||||||
</compound>
|
|
||||||
<compound refid="aadvark_8cc" kind="file"><name>aadvark.cc</name>
|
|
||||||
<member refid="aadvark_8cc_1acb52858524210ec6dddc3e16d1e52946" kind="function"><name>aadvarky_enough</name></member>
|
|
||||||
<member refid="aadvark_8cc_1ae66f6b31b5ad750f1fe042a706a4e3d4" kind="function"><name>main</name></member>
|
|
||||||
</compound>
|
|
||||||
<compound refid="aadvark_8h" kind="file"><name>aadvark.h</name>
|
|
||||||
<member refid="aadvark_8h_1acb52858524210ec6dddc3e16d1e52946" kind="function"><name>aadvarky_enough</name></member>
|
|
||||||
<member refid="aadvark_8h_1ae66f6b31b5ad750f1fe042a706a4e3d4" kind="function"><name>main</name></member>
|
|
||||||
</compound>
|
|
||||||
</doxygenindex>
|
|
|
@ -1,66 +0,0 @@
|
||||||
<?xml version='1.0' encoding='utf-8' ?>
|
|
||||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
||||||
<xsd:element name="doxygenindex" type="DoxygenType"/>
|
|
||||||
|
|
||||||
<xsd:complexType name="DoxygenType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="version" type="xsd:string" use="required"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="CompoundType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="name" type="xsd:string"/>
|
|
||||||
<xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" use="required"/>
|
|
||||||
<xsd:attribute name="kind" type="CompoundKind" use="required"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:complexType name="MemberType">
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="name" type="xsd:string"/>
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="refid" type="xsd:string" use="required"/>
|
|
||||||
<xsd:attribute name="kind" type="MemberKind" use="required"/>
|
|
||||||
</xsd:complexType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="CompoundKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="class"/>
|
|
||||||
<xsd:enumeration value="struct"/>
|
|
||||||
<xsd:enumeration value="union"/>
|
|
||||||
<xsd:enumeration value="interface"/>
|
|
||||||
<xsd:enumeration value="protocol"/>
|
|
||||||
<xsd:enumeration value="category"/>
|
|
||||||
<xsd:enumeration value="exception"/>
|
|
||||||
<xsd:enumeration value="file"/>
|
|
||||||
<xsd:enumeration value="namespace"/>
|
|
||||||
<xsd:enumeration value="group"/>
|
|
||||||
<xsd:enumeration value="page"/>
|
|
||||||
<xsd:enumeration value="example"/>
|
|
||||||
<xsd:enumeration value="dir"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
<xsd:simpleType name="MemberKind">
|
|
||||||
<xsd:restriction base="xsd:string">
|
|
||||||
<xsd:enumeration value="define"/>
|
|
||||||
<xsd:enumeration value="property"/>
|
|
||||||
<xsd:enumeration value="event"/>
|
|
||||||
<xsd:enumeration value="variable"/>
|
|
||||||
<xsd:enumeration value="typedef"/>
|
|
||||||
<xsd:enumeration value="enum"/>
|
|
||||||
<xsd:enumeration value="enumvalue"/>
|
|
||||||
<xsd:enumeration value="function"/>
|
|
||||||
<xsd:enumeration value="signal"/>
|
|
||||||
<xsd:enumeration value="prototype"/>
|
|
||||||
<xsd:enumeration value="friend"/>
|
|
||||||
<xsd:enumeration value="dcop"/>
|
|
||||||
<xsd:enumeration value="slot"/>
|
|
||||||
</xsd:restriction>
|
|
||||||
</xsd:simpleType>
|
|
||||||
|
|
||||||
</xsd:schema>
|
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
Generated Mon Feb 9 19:08:05 2009 by generateDS.py.
|
Generated Mon Feb 9 19:08:05 2009 by generateDS.py.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from string import lower as str_lower
|
|
||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
from xml.dom import Node
|
from xml.dom import Node
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import compoundsuper as supermod
|
from . import compoundsuper as supermod
|
||||||
from compoundsuper import MixedContainer
|
from .compoundsuper import MixedContainer
|
||||||
|
|
||||||
|
|
||||||
class DoxygenTypeSub(supermod.DoxygenType):
|
class DoxygenTypeSub(supermod.DoxygenType):
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
# Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
|
# Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import getopt
|
|
||||||
from string import lower as str_lower
|
|
||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
from xml.dom import Node
|
from xml.dom import Node
|
||||||
|
|
||||||
|
@ -19,9 +19,9 @@ from xml.dom import Node
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from generatedssuper import GeneratedsSuper
|
from generatedssuper import GeneratedsSuper
|
||||||
except ImportError, exp:
|
except ImportError as exp:
|
||||||
|
|
||||||
class GeneratedsSuper:
|
class GeneratedsSuper(object):
|
||||||
def format_string(self, input_data, input_name=''):
|
def format_string(self, input_data, input_name=''):
|
||||||
return input_data
|
return input_data
|
||||||
def format_integer(self, input_data, input_name=''):
|
def format_integer(self, input_data, input_name=''):
|
||||||
|
@ -64,7 +64,7 @@ def showIndent(outfile, level):
|
||||||
outfile.write(' ')
|
outfile.write(' ')
|
||||||
|
|
||||||
def quote_xml(inStr):
|
def quote_xml(inStr):
|
||||||
s1 = (isinstance(inStr, basestring) and inStr or
|
s1 = (isinstance(inStr, str) and inStr or
|
||||||
'%s' % inStr)
|
'%s' % inStr)
|
||||||
s1 = s1.replace('&', '&')
|
s1 = s1.replace('&', '&')
|
||||||
s1 = s1.replace('<', '<')
|
s1 = s1.replace('<', '<')
|
||||||
|
@ -72,7 +72,7 @@ def quote_xml(inStr):
|
||||||
return s1
|
return s1
|
||||||
|
|
||||||
def quote_attrib(inStr):
|
def quote_attrib(inStr):
|
||||||
s1 = (isinstance(inStr, basestring) and inStr or
|
s1 = (isinstance(inStr, str) and inStr or
|
||||||
'%s' % inStr)
|
'%s' % inStr)
|
||||||
s1 = s1.replace('&', '&')
|
s1 = s1.replace('&', '&')
|
||||||
s1 = s1.replace('<', '<')
|
s1 = s1.replace('<', '<')
|
||||||
|
@ -102,7 +102,7 @@ def quote_python(inStr):
|
||||||
return '"""%s"""' % s1
|
return '"""%s"""' % s1
|
||||||
|
|
||||||
|
|
||||||
class MixedContainer:
|
class MixedContainer(object):
|
||||||
# Constants for category:
|
# Constants for category:
|
||||||
CategoryNone = 0
|
CategoryNone = 0
|
||||||
CategoryText = 1
|
CategoryText = 1
|
||||||
|
@ -4221,7 +4221,7 @@ class codelineType(GeneratedsSuper):
|
||||||
if attrs.get('lineno'):
|
if attrs.get('lineno'):
|
||||||
try:
|
try:
|
||||||
self.lineno = int(attrs.get('lineno').value)
|
self.lineno = int(attrs.get('lineno').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (lineno): %s' % exp)
|
raise ValueError('Bad integer attribute (lineno): %s' % exp)
|
||||||
if attrs.get('refkind'):
|
if attrs.get('refkind'):
|
||||||
self.refkind = attrs.get('refkind').value
|
self.refkind = attrs.get('refkind').value
|
||||||
|
@ -4504,12 +4504,12 @@ class referenceType(GeneratedsSuper):
|
||||||
if attrs.get('endline'):
|
if attrs.get('endline'):
|
||||||
try:
|
try:
|
||||||
self.endline = int(attrs.get('endline').value)
|
self.endline = int(attrs.get('endline').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (endline): %s' % exp)
|
raise ValueError('Bad integer attribute (endline): %s' % exp)
|
||||||
if attrs.get('startline'):
|
if attrs.get('startline'):
|
||||||
try:
|
try:
|
||||||
self.startline = int(attrs.get('startline').value)
|
self.startline = int(attrs.get('startline').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (startline): %s' % exp)
|
raise ValueError('Bad integer attribute (startline): %s' % exp)
|
||||||
if attrs.get('refid'):
|
if attrs.get('refid'):
|
||||||
self.refid = attrs.get('refid').value
|
self.refid = attrs.get('refid').value
|
||||||
|
@ -4627,17 +4627,17 @@ class locationType(GeneratedsSuper):
|
||||||
if attrs.get('bodystart'):
|
if attrs.get('bodystart'):
|
||||||
try:
|
try:
|
||||||
self.bodystart = int(attrs.get('bodystart').value)
|
self.bodystart = int(attrs.get('bodystart').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (bodystart): %s' % exp)
|
raise ValueError('Bad integer attribute (bodystart): %s' % exp)
|
||||||
if attrs.get('line'):
|
if attrs.get('line'):
|
||||||
try:
|
try:
|
||||||
self.line = int(attrs.get('line').value)
|
self.line = int(attrs.get('line').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (line): %s' % exp)
|
raise ValueError('Bad integer attribute (line): %s' % exp)
|
||||||
if attrs.get('bodyend'):
|
if attrs.get('bodyend'):
|
||||||
try:
|
try:
|
||||||
self.bodyend = int(attrs.get('bodyend').value)
|
self.bodyend = int(attrs.get('bodyend').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (bodyend): %s' % exp)
|
raise ValueError('Bad integer attribute (bodyend): %s' % exp)
|
||||||
if attrs.get('bodyfile'):
|
if attrs.get('bodyfile'):
|
||||||
self.bodyfile = attrs.get('bodyfile').value
|
self.bodyfile = attrs.get('bodyfile').value
|
||||||
|
@ -6778,12 +6778,12 @@ class docTableType(GeneratedsSuper):
|
||||||
if attrs.get('rows'):
|
if attrs.get('rows'):
|
||||||
try:
|
try:
|
||||||
self.rows = int(attrs.get('rows').value)
|
self.rows = int(attrs.get('rows').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (rows): %s' % exp)
|
raise ValueError('Bad integer attribute (rows): %s' % exp)
|
||||||
if attrs.get('cols'):
|
if attrs.get('cols'):
|
||||||
try:
|
try:
|
||||||
self.cols = int(attrs.get('cols').value)
|
self.cols = int(attrs.get('cols').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (cols): %s' % exp)
|
raise ValueError('Bad integer attribute (cols): %s' % exp)
|
||||||
def buildChildren(self, child_, nodeName_):
|
def buildChildren(self, child_, nodeName_):
|
||||||
if child_.nodeType == Node.ELEMENT_NODE and \
|
if child_.nodeType == Node.ELEMENT_NODE and \
|
||||||
|
@ -7108,7 +7108,7 @@ class docHeadingType(GeneratedsSuper):
|
||||||
if attrs.get('level'):
|
if attrs.get('level'):
|
||||||
try:
|
try:
|
||||||
self.level = int(attrs.get('level').value)
|
self.level = int(attrs.get('level').value)
|
||||||
except ValueError, exp:
|
except ValueError as exp:
|
||||||
raise ValueError('Bad integer attribute (level): %s' % exp)
|
raise ValueError('Bad integer attribute (level): %s' % exp)
|
||||||
def buildChildren(self, child_, nodeName_):
|
def buildChildren(self, child_, nodeName_):
|
||||||
if child_.nodeType == Node.TEXT_NODE:
|
if child_.nodeType == Node.TEXT_NODE:
|
||||||
|
@ -8283,7 +8283,7 @@ Options:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
print USAGE_TEXT
|
print(USAGE_TEXT)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
@ -8339,4 +8339,3 @@ if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
#import pdb
|
#import pdb
|
||||||
#pdb.run('main()')
|
#pdb.run('main()')
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,9 @@ from xml.dom import minidom
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import compound
|
from . import compound
|
||||||
|
|
||||||
import indexsuper as supermod
|
from . import indexsuper as supermod
|
||||||
|
|
||||||
class DoxygenTypeSub(supermod.DoxygenType):
|
class DoxygenTypeSub(supermod.DoxygenType):
|
||||||
def __init__(self, version=None, compound=None):
|
def __init__(self, version=None, compound=None):
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
# Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
|
# Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import getopt
|
|
||||||
from string import lower as str_lower
|
|
||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
from xml.dom import Node
|
from xml.dom import Node
|
||||||
|
|
||||||
|
@ -19,9 +19,9 @@ from xml.dom import Node
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from generatedssuper import GeneratedsSuper
|
from generatedssuper import GeneratedsSuper
|
||||||
except ImportError, exp:
|
except ImportError as exp:
|
||||||
|
|
||||||
class GeneratedsSuper:
|
class GeneratedsSuper(object):
|
||||||
def format_string(self, input_data, input_name=''):
|
def format_string(self, input_data, input_name=''):
|
||||||
return input_data
|
return input_data
|
||||||
def format_integer(self, input_data, input_name=''):
|
def format_integer(self, input_data, input_name=''):
|
||||||
|
@ -64,7 +64,7 @@ def showIndent(outfile, level):
|
||||||
outfile.write(' ')
|
outfile.write(' ')
|
||||||
|
|
||||||
def quote_xml(inStr):
|
def quote_xml(inStr):
|
||||||
s1 = (isinstance(inStr, basestring) and inStr or
|
s1 = (isinstance(inStr, str) and inStr or
|
||||||
'%s' % inStr)
|
'%s' % inStr)
|
||||||
s1 = s1.replace('&', '&')
|
s1 = s1.replace('&', '&')
|
||||||
s1 = s1.replace('<', '<')
|
s1 = s1.replace('<', '<')
|
||||||
|
@ -72,7 +72,7 @@ def quote_xml(inStr):
|
||||||
return s1
|
return s1
|
||||||
|
|
||||||
def quote_attrib(inStr):
|
def quote_attrib(inStr):
|
||||||
s1 = (isinstance(inStr, basestring) and inStr or
|
s1 = (isinstance(inStr, str) and inStr or
|
||||||
'%s' % inStr)
|
'%s' % inStr)
|
||||||
s1 = s1.replace('&', '&')
|
s1 = s1.replace('&', '&')
|
||||||
s1 = s1.replace('<', '<')
|
s1 = s1.replace('<', '<')
|
||||||
|
@ -102,7 +102,7 @@ def quote_python(inStr):
|
||||||
return '"""%s"""' % s1
|
return '"""%s"""' % s1
|
||||||
|
|
||||||
|
|
||||||
class MixedContainer:
|
class MixedContainer(object):
|
||||||
# Constants for category:
|
# Constants for category:
|
||||||
CategoryNone = 0
|
CategoryNone = 0
|
||||||
CategoryText = 1
|
CategoryText = 1
|
||||||
|
@ -462,7 +462,7 @@ Options:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
print USAGE_TEXT
|
print(USAGE_TEXT)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
@ -520,4 +520,3 @@ if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
#import pdb
|
#import pdb
|
||||||
#pdb.run('main()')
|
#pdb.run('main()')
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,11 @@
|
||||||
#
|
#
|
||||||
# Copyright 2010 Free Software Foundation, Inc.
|
# Copyright 2010 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gr-test
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
#
|
#
|
||||||
"""
|
"""
|
||||||
Utilities for extracting text from generated classes.
|
Utilities for extracting text from generated classes.
|
||||||
|
@ -26,7 +15,7 @@ def is_string(txt):
|
||||||
if isinstance(txt, str):
|
if isinstance(txt, str):
|
||||||
return True
|
return True
|
||||||
try:
|
try:
|
||||||
if isinstance(txt, unicode):
|
if isinstance(txt, str):
|
||||||
return True
|
return True
|
||||||
except NameError:
|
except NameError:
|
||||||
pass
|
pass
|
||||||
|
@ -49,7 +38,7 @@ def description_bit(obj):
|
||||||
elif is_string(obj):
|
elif is_string(obj):
|
||||||
return obj
|
return obj
|
||||||
else:
|
else:
|
||||||
raise StandardError('Expecting a string or something with content, content_ or value attribute')
|
raise Exception('Expecting a string or something with content, content_ or value attribute')
|
||||||
# If this bit is a paragraph then add one some line breaks.
|
# If this bit is a paragraph then add one some line breaks.
|
||||||
if hasattr(obj, 'name') and obj.name == 'para':
|
if hasattr(obj, 'name') and obj.name == 'para':
|
||||||
result += "\n\n"
|
result += "\n\n"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*!
|
/*!
|
||||||
* \defgroup block GNU Radio IQBALANCE C++ Signal Processing Blocks
|
* \defgroup block GNU Radio TEST C++ Signal Processing Blocks
|
||||||
* \brief All C++ blocks that can be used from the IQBALANCE GNU Radio
|
* \brief All C++ blocks that can be used from the TEST GNU Radio
|
||||||
* module are listed here or in the subcategories below.
|
* module are listed here or in the subcategories below.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*! \mainpage
|
/*! \mainpage
|
||||||
|
|
||||||
Welcome to the GNU Radio IQBALANCE Block
|
Welcome to the GNU Radio TEST Block
|
||||||
|
|
||||||
This is the intro page for the Doxygen manual generated for the IQBALANCE
|
This is the intro page for the Doxygen manual generated for the TEST
|
||||||
block (docs/doxygen/other/main_page.dox). Edit it to add more detailed
|
block (docs/doxygen/other/main_page.dox). Edit it to add more detailed
|
||||||
documentation about the new GNU Radio modules contained in this
|
documentation about the new GNU Radio modules contained in this
|
||||||
project.
|
project.
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef PYDOC_MACROS_H
|
||||||
|
#define PYDOC_MACROS_H
|
||||||
|
|
||||||
|
#define __EXPAND(x) x
|
||||||
|
#define __COUNT(_1, _2, _3, _4, _5, _6, _7, COUNT, ...) COUNT
|
||||||
|
#define __VA_SIZE(...) __EXPAND(__COUNT(__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1))
|
||||||
|
#define __CAT1(a, b) a##b
|
||||||
|
#define __CAT2(a, b) __CAT1(a, b)
|
||||||
|
#define __DOC1(n1) __doc_##n1
|
||||||
|
#define __DOC2(n1, n2) __doc_##n1##_##n2
|
||||||
|
#define __DOC3(n1, n2, n3) __doc_##n1##_##n2##_##n3
|
||||||
|
#define __DOC4(n1, n2, n3, n4) __doc_##n1##_##n2##_##n3##_##n4
|
||||||
|
#define __DOC5(n1, n2, n3, n4, n5) __doc_##n1##_##n2##_##n3##_##n4##_##n5
|
||||||
|
#define __DOC6(n1, n2, n3, n4, n5, n6) __doc_##n1##_##n2##_##n3##_##n4##_##n5##_##n6
|
||||||
|
#define __DOC7(n1, n2, n3, n4, n5, n6, n7) \
|
||||||
|
__doc_##n1##_##n2##_##n3##_##n4##_##n5##_##n6##_##n7
|
||||||
|
#define DOC(...) __EXPAND(__EXPAND(__CAT2(__DOC, __VA_SIZE(__VA_ARGS__)))(__VA_ARGS__))
|
||||||
|
|
||||||
|
#endif // PYDOC_MACROS_H
|
|
@ -1,255 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright 2010,2011 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.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
Creates the swig_doc.i SWIG interface file.
|
|
||||||
Execute using: python swig_doc.py xml_path outputfilename
|
|
||||||
|
|
||||||
The file instructs SWIG to transfer the doxygen comments into the
|
|
||||||
python docstrings.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
try:
|
|
||||||
from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
|
|
||||||
except ImportError:
|
|
||||||
from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
|
|
||||||
|
|
||||||
|
|
||||||
def py_name(name):
|
|
||||||
bits = name.split('_')
|
|
||||||
return '_'.join(bits[1:])
|
|
||||||
|
|
||||||
def make_name(name):
|
|
||||||
bits = name.split('_')
|
|
||||||
return bits[0] + '_make_' + '_'.join(bits[1:])
|
|
||||||
|
|
||||||
|
|
||||||
class Block(object):
|
|
||||||
"""
|
|
||||||
Checks if doxyxml produced objects correspond to a gnuradio block.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def includes(cls, item):
|
|
||||||
if not isinstance(item, DoxyClass):
|
|
||||||
return False
|
|
||||||
# Check for a parsing error.
|
|
||||||
if item.error():
|
|
||||||
return False
|
|
||||||
return item.has_member(make_name(item.name()), DoxyFriend)
|
|
||||||
|
|
||||||
|
|
||||||
def utoascii(text):
|
|
||||||
"""
|
|
||||||
Convert unicode text into ascii and escape quotes.
|
|
||||||
"""
|
|
||||||
if text is None:
|
|
||||||
return ''
|
|
||||||
out = text.encode('ascii', 'replace')
|
|
||||||
out = out.replace('"', '\\"')
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
def combine_descriptions(obj):
|
|
||||||
"""
|
|
||||||
Combines the brief and detailed descriptions of an object together.
|
|
||||||
"""
|
|
||||||
description = []
|
|
||||||
bd = obj.brief_description.strip()
|
|
||||||
dd = obj.detailed_description.strip()
|
|
||||||
if bd:
|
|
||||||
description.append(bd)
|
|
||||||
if dd:
|
|
||||||
description.append(dd)
|
|
||||||
return utoascii('\n\n'.join(description)).strip()
|
|
||||||
|
|
||||||
|
|
||||||
entry_templ = '%feature("docstring") {name} "{docstring}"'
|
|
||||||
def make_entry(obj, name=None, templ="{description}", description=None):
|
|
||||||
"""
|
|
||||||
Create a docstring entry for a swig interface file.
|
|
||||||
|
|
||||||
obj - a doxyxml object from which documentation will be extracted.
|
|
||||||
name - the name of the C object (defaults to obj.name())
|
|
||||||
templ - an optional template for the docstring containing only one
|
|
||||||
variable named 'description'.
|
|
||||||
description - if this optional variable is set then it's value is
|
|
||||||
used as the description instead of extracting it from obj.
|
|
||||||
"""
|
|
||||||
if name is None:
|
|
||||||
name=obj.name()
|
|
||||||
if "operator " in name:
|
|
||||||
return ''
|
|
||||||
if description is None:
|
|
||||||
description = combine_descriptions(obj)
|
|
||||||
docstring = templ.format(description=description)
|
|
||||||
if not docstring:
|
|
||||||
return ''
|
|
||||||
return entry_templ.format(
|
|
||||||
name=name,
|
|
||||||
docstring=docstring,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def make_func_entry(func, name=None, description=None, params=None):
|
|
||||||
"""
|
|
||||||
Create a function docstring entry for a swig interface file.
|
|
||||||
|
|
||||||
func - a doxyxml object from which documentation will be extracted.
|
|
||||||
name - the name of the C object (defaults to func.name())
|
|
||||||
description - if this optional variable is set then it's value is
|
|
||||||
used as the description instead of extracting it from func.
|
|
||||||
params - a parameter list that overrides using func.params.
|
|
||||||
"""
|
|
||||||
if params is None:
|
|
||||||
params = func.params
|
|
||||||
params = [prm.declname for prm in params]
|
|
||||||
if params:
|
|
||||||
sig = "Params: (%s)" % ", ".join(params)
|
|
||||||
else:
|
|
||||||
sig = "Params: (NONE)"
|
|
||||||
templ = "{description}\n\n" + sig
|
|
||||||
return make_entry(func, name=name, templ=utoascii(templ),
|
|
||||||
description=description)
|
|
||||||
|
|
||||||
|
|
||||||
def make_class_entry(klass, description=None):
|
|
||||||
"""
|
|
||||||
Create a class docstring for a swig interface file.
|
|
||||||
"""
|
|
||||||
output = []
|
|
||||||
output.append(make_entry(klass, description=description))
|
|
||||||
for func in klass.in_category(DoxyFunction):
|
|
||||||
name = klass.name() + '::' + func.name()
|
|
||||||
output.append(make_func_entry(func, name=name))
|
|
||||||
return "\n\n".join(output)
|
|
||||||
|
|
||||||
|
|
||||||
def make_block_entry(di, block):
|
|
||||||
"""
|
|
||||||
Create class and function docstrings of a gnuradio block for a
|
|
||||||
swig interface file.
|
|
||||||
"""
|
|
||||||
descriptions = []
|
|
||||||
# Get the documentation associated with the class.
|
|
||||||
class_desc = combine_descriptions(block)
|
|
||||||
if class_desc:
|
|
||||||
descriptions.append(class_desc)
|
|
||||||
# Get the documentation associated with the make function
|
|
||||||
make_func = di.get_member(make_name(block.name()), DoxyFunction)
|
|
||||||
make_func_desc = combine_descriptions(make_func)
|
|
||||||
if make_func_desc:
|
|
||||||
descriptions.append(make_func_desc)
|
|
||||||
# Get the documentation associated with the file
|
|
||||||
try:
|
|
||||||
block_file = di.get_member(block.name() + ".h", DoxyFile)
|
|
||||||
file_desc = combine_descriptions(block_file)
|
|
||||||
if file_desc:
|
|
||||||
descriptions.append(file_desc)
|
|
||||||
except base.Base.NoSuchMember:
|
|
||||||
# Don't worry if we can't find a matching file.
|
|
||||||
pass
|
|
||||||
# And join them all together to make a super duper description.
|
|
||||||
super_description = "\n\n".join(descriptions)
|
|
||||||
# Associate the combined description with the class and
|
|
||||||
# the make function.
|
|
||||||
output = []
|
|
||||||
output.append(make_class_entry(block, description=super_description))
|
|
||||||
creator = block.get_member(block.name(), DoxyFunction)
|
|
||||||
output.append(make_func_entry(make_func, description=super_description,
|
|
||||||
params=creator.params))
|
|
||||||
return "\n\n".join(output)
|
|
||||||
|
|
||||||
|
|
||||||
def make_swig_interface_file(di, swigdocfilename, custom_output=None):
|
|
||||||
|
|
||||||
output = ["""
|
|
||||||
/*
|
|
||||||
* This file was automatically generated using swig_doc.py.
|
|
||||||
*
|
|
||||||
* Any changes to it will be lost next time it is regenerated.
|
|
||||||
*/
|
|
||||||
"""]
|
|
||||||
|
|
||||||
if custom_output is not None:
|
|
||||||
output.append(custom_output)
|
|
||||||
|
|
||||||
# Create docstrings for the blocks.
|
|
||||||
blocks = di.in_category(Block)
|
|
||||||
make_funcs = set([])
|
|
||||||
for block in blocks:
|
|
||||||
try:
|
|
||||||
make_func = di.get_member(make_name(block.name()), DoxyFunction)
|
|
||||||
make_funcs.add(make_func.name())
|
|
||||||
output.append(make_block_entry(di, block))
|
|
||||||
except block.ParsingError:
|
|
||||||
print('Parsing error for block %s' % block.name())
|
|
||||||
|
|
||||||
# Create docstrings for functions
|
|
||||||
# Don't include the make functions since they have already been dealt with.
|
|
||||||
funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs]
|
|
||||||
for f in funcs:
|
|
||||||
try:
|
|
||||||
output.append(make_func_entry(f))
|
|
||||||
except f.ParsingError:
|
|
||||||
print('Parsing error for function %s' % f.name())
|
|
||||||
|
|
||||||
# Create docstrings for classes
|
|
||||||
block_names = [block.name() for block in blocks]
|
|
||||||
klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names]
|
|
||||||
for k in klasses:
|
|
||||||
try:
|
|
||||||
output.append(make_class_entry(k))
|
|
||||||
except k.ParsingError:
|
|
||||||
print('Parsing error for class %s' % k.name())
|
|
||||||
|
|
||||||
# Docstrings are not created for anything that is not a function or a class.
|
|
||||||
# If this excludes anything important please add it here.
|
|
||||||
|
|
||||||
output = "\n\n".join(output)
|
|
||||||
|
|
||||||
swig_doc = file(swigdocfilename, 'w')
|
|
||||||
swig_doc.write(output)
|
|
||||||
swig_doc.close()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
# Parse command line options and set up doxyxml.
|
|
||||||
err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
|
|
||||||
if len(sys.argv) != 3:
|
|
||||||
raise StandardError(err_msg)
|
|
||||||
xml_path = sys.argv[1]
|
|
||||||
swigdocfilename = sys.argv[2]
|
|
||||||
di = DoxyIndex(xml_path)
|
|
||||||
|
|
||||||
# gnuradio.gr.msq_queue.insert_tail and delete_head create errors unless docstrings are defined!
|
|
||||||
# This is presumably a bug in SWIG.
|
|
||||||
#msg_q = di.get_member(u'gr_msg_queue', DoxyClass)
|
|
||||||
#insert_tail = msg_q.get_member(u'insert_tail', DoxyFunction)
|
|
||||||
#delete_head = msg_q.get_member(u'delete_head', DoxyFunction)
|
|
||||||
output = []
|
|
||||||
#output.append(make_func_entry(insert_tail, name='gr_py_msg_queue__insert_tail'))
|
|
||||||
#output.append(make_func_entry(delete_head, name='gr_py_msg_queue__delete_head'))
|
|
||||||
custom_output = "\n\n".join(output)
|
|
||||||
|
|
||||||
# Generate the docstrings interface file.
|
|
||||||
make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
|
|
|
@ -0,0 +1,346 @@
|
||||||
|
#
|
||||||
|
# Copyright 2010-2012 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file was generated by gr_modtool, a tool from the GNU Radio framework
|
||||||
|
# This file is a part of gnuradio
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#
|
||||||
|
#
|
||||||
|
"""
|
||||||
|
Updates the *pydoc_h files for a module
|
||||||
|
Execute using: python update_pydoc.py xml_path outputfilename
|
||||||
|
|
||||||
|
The file instructs Pybind11 to transfer the doxygen comments into the
|
||||||
|
python docstrings.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os, sys, time, glob, re, json
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile
|
||||||
|
from doxyxml import DoxyOther, base
|
||||||
|
|
||||||
|
def py_name(name):
|
||||||
|
bits = name.split('_')
|
||||||
|
return '_'.join(bits[1:])
|
||||||
|
|
||||||
|
def make_name(name):
|
||||||
|
bits = name.split('_')
|
||||||
|
return bits[0] + '_make_' + '_'.join(bits[1:])
|
||||||
|
|
||||||
|
|
||||||
|
class Block(object):
|
||||||
|
"""
|
||||||
|
Checks if doxyxml produced objects correspond to a gnuradio block.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def includes(cls, item):
|
||||||
|
if not isinstance(item, DoxyClass):
|
||||||
|
return False
|
||||||
|
# Check for a parsing error.
|
||||||
|
if item.error():
|
||||||
|
return False
|
||||||
|
friendname = make_name(item.name())
|
||||||
|
is_a_block = item.has_member(friendname, DoxyFriend)
|
||||||
|
# But now sometimes the make function isn't a friend so check again.
|
||||||
|
if not is_a_block:
|
||||||
|
is_a_block = di.has_member(friendname, DoxyFunction)
|
||||||
|
return is_a_block
|
||||||
|
|
||||||
|
class Block2(object):
|
||||||
|
"""
|
||||||
|
Checks if doxyxml produced objects correspond to a new style
|
||||||
|
gnuradio block.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def includes(cls, item):
|
||||||
|
if not isinstance(item, DoxyClass):
|
||||||
|
return False
|
||||||
|
# Check for a parsing error.
|
||||||
|
if item.error():
|
||||||
|
return False
|
||||||
|
is_a_block2 = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther)
|
||||||
|
return is_a_block2
|
||||||
|
|
||||||
|
|
||||||
|
def utoascii(text):
|
||||||
|
"""
|
||||||
|
Convert unicode text into ascii and escape quotes and backslashes.
|
||||||
|
"""
|
||||||
|
if text is None:
|
||||||
|
return ''
|
||||||
|
out = text.encode('ascii', 'replace')
|
||||||
|
# swig will require us to replace blackslash with 4 backslashes
|
||||||
|
# TODO: evaluate what this should be for pybind11
|
||||||
|
out = out.replace(b'\\', b'\\\\\\\\')
|
||||||
|
out = out.replace(b'"', b'\\"').decode('ascii')
|
||||||
|
return str(out)
|
||||||
|
|
||||||
|
|
||||||
|
def combine_descriptions(obj):
|
||||||
|
"""
|
||||||
|
Combines the brief and detailed descriptions of an object together.
|
||||||
|
"""
|
||||||
|
description = []
|
||||||
|
bd = obj.brief_description.strip()
|
||||||
|
dd = obj.detailed_description.strip()
|
||||||
|
if bd:
|
||||||
|
description.append(bd)
|
||||||
|
if dd:
|
||||||
|
description.append(dd)
|
||||||
|
return utoascii('\n\n'.join(description)).strip()
|
||||||
|
|
||||||
|
def format_params(parameteritems):
|
||||||
|
output = ['Args:']
|
||||||
|
template = ' {0} : {1}'
|
||||||
|
for pi in parameteritems:
|
||||||
|
output.append(template.format(pi.name, pi.description))
|
||||||
|
return '\n'.join(output)
|
||||||
|
|
||||||
|
entry_templ = '%feature("docstring") {name} "{docstring}"'
|
||||||
|
def make_entry(obj, name=None, templ="{description}", description=None, params=[]):
|
||||||
|
"""
|
||||||
|
Create a docstring key/value pair, where the key is the object name.
|
||||||
|
|
||||||
|
obj - a doxyxml object from which documentation will be extracted.
|
||||||
|
name - the name of the C object (defaults to obj.name())
|
||||||
|
templ - an optional template for the docstring containing only one
|
||||||
|
variable named 'description'.
|
||||||
|
description - if this optional variable is set then it's value is
|
||||||
|
used as the description instead of extracting it from obj.
|
||||||
|
"""
|
||||||
|
if name is None:
|
||||||
|
name=obj.name()
|
||||||
|
if hasattr(obj,'_parse_data') and hasattr(obj._parse_data,'definition'):
|
||||||
|
name=obj._parse_data.definition.split(' ')[-1]
|
||||||
|
if "operator " in name:
|
||||||
|
return ''
|
||||||
|
if description is None:
|
||||||
|
description = combine_descriptions(obj)
|
||||||
|
if params:
|
||||||
|
description += '\n\n'
|
||||||
|
description += utoascii(format_params(params))
|
||||||
|
docstring = templ.format(description=description)
|
||||||
|
|
||||||
|
return {name: docstring}
|
||||||
|
|
||||||
|
|
||||||
|
def make_class_entry(klass, description=None, ignored_methods=[], params=None):
|
||||||
|
"""
|
||||||
|
Create a class docstring key/value pair.
|
||||||
|
"""
|
||||||
|
if params is None:
|
||||||
|
params = klass.params
|
||||||
|
output = {}
|
||||||
|
output.update(make_entry(klass, description=description, params=params))
|
||||||
|
for func in klass.in_category(DoxyFunction):
|
||||||
|
if func.name() not in ignored_methods:
|
||||||
|
name = klass.name() + '::' + func.name()
|
||||||
|
output.update(make_entry(func, name=name))
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def make_block_entry(di, block):
|
||||||
|
"""
|
||||||
|
Create class and function docstrings of a gnuradio block
|
||||||
|
"""
|
||||||
|
descriptions = []
|
||||||
|
# Get the documentation associated with the class.
|
||||||
|
class_desc = combine_descriptions(block)
|
||||||
|
if class_desc:
|
||||||
|
descriptions.append(class_desc)
|
||||||
|
# Get the documentation associated with the make function
|
||||||
|
make_func = di.get_member(make_name(block.name()), DoxyFunction)
|
||||||
|
make_func_desc = combine_descriptions(make_func)
|
||||||
|
if make_func_desc:
|
||||||
|
descriptions.append(make_func_desc)
|
||||||
|
# Get the documentation associated with the file
|
||||||
|
try:
|
||||||
|
block_file = di.get_member(block.name() + ".h", DoxyFile)
|
||||||
|
file_desc = combine_descriptions(block_file)
|
||||||
|
if file_desc:
|
||||||
|
descriptions.append(file_desc)
|
||||||
|
except base.Base.NoSuchMember:
|
||||||
|
# Don't worry if we can't find a matching file.
|
||||||
|
pass
|
||||||
|
# And join them all together to make a super duper description.
|
||||||
|
super_description = "\n\n".join(descriptions)
|
||||||
|
# Associate the combined description with the class and
|
||||||
|
# the make function.
|
||||||
|
output = {}
|
||||||
|
output.update(make_class_entry(block, description=super_description))
|
||||||
|
output.update(make_entry(make_func, description=super_description,
|
||||||
|
params=block.params))
|
||||||
|
return output
|
||||||
|
|
||||||
|
def make_block2_entry(di, block):
|
||||||
|
"""
|
||||||
|
Create class and function docstrings of a new style gnuradio block
|
||||||
|
"""
|
||||||
|
# For new style blocks all the relevant documentation should be
|
||||||
|
# associated with the 'make' method.
|
||||||
|
class_description = combine_descriptions(block)
|
||||||
|
make_func = block.get_member('make', DoxyFunction)
|
||||||
|
make_description = combine_descriptions(make_func)
|
||||||
|
description = class_description + "\n\nConstructor Specific Documentation:\n\n" + make_description
|
||||||
|
# Associate the combined description with the class and
|
||||||
|
# the make function.
|
||||||
|
output = {}
|
||||||
|
output.update(make_class_entry(
|
||||||
|
block, description=description,
|
||||||
|
ignored_methods=['make'], params=make_func.params))
|
||||||
|
makename = block.name() + '::make'
|
||||||
|
output.update(make_entry(
|
||||||
|
make_func, name=makename, description=description,
|
||||||
|
params=make_func.params))
|
||||||
|
return output
|
||||||
|
|
||||||
|
def get_docstrings_dict(di, custom_output=None):
|
||||||
|
|
||||||
|
output = {}
|
||||||
|
if custom_output:
|
||||||
|
output.update(custom_output)
|
||||||
|
|
||||||
|
# Create docstrings for the blocks.
|
||||||
|
blocks = di.in_category(Block)
|
||||||
|
blocks2 = di.in_category(Block2)
|
||||||
|
|
||||||
|
make_funcs = set([])
|
||||||
|
for block in blocks:
|
||||||
|
try:
|
||||||
|
make_func = di.get_member(make_name(block.name()), DoxyFunction)
|
||||||
|
# Don't want to risk writing to output twice.
|
||||||
|
if make_func.name() not in make_funcs:
|
||||||
|
make_funcs.add(make_func.name())
|
||||||
|
output.update(make_block_entry(di, block))
|
||||||
|
except block.ParsingError:
|
||||||
|
sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
|
||||||
|
raise
|
||||||
|
|
||||||
|
for block in blocks2:
|
||||||
|
try:
|
||||||
|
make_func = block.get_member('make', DoxyFunction)
|
||||||
|
make_func_name = block.name() +'::make'
|
||||||
|
# Don't want to risk writing to output twice.
|
||||||
|
if make_func_name not in make_funcs:
|
||||||
|
make_funcs.add(make_func_name)
|
||||||
|
output.update(make_block2_entry(di, block))
|
||||||
|
except block.ParsingError:
|
||||||
|
sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
|
||||||
|
raise
|
||||||
|
|
||||||
|
# Create docstrings for functions
|
||||||
|
# Don't include the make functions since they have already been dealt with.
|
||||||
|
funcs = [f for f in di.in_category(DoxyFunction)
|
||||||
|
if f.name() not in make_funcs and not f.name().startswith('std::')]
|
||||||
|
for f in funcs:
|
||||||
|
try:
|
||||||
|
output.update(make_entry(f))
|
||||||
|
except f.ParsingError:
|
||||||
|
sys.stderr.write('Parsing error for function {0}\n'.format(f.name()))
|
||||||
|
|
||||||
|
# Create docstrings for classes
|
||||||
|
block_names = [block.name() for block in blocks]
|
||||||
|
block_names += [block.name() for block in blocks2]
|
||||||
|
klasses = [k for k in di.in_category(DoxyClass)
|
||||||
|
if k.name() not in block_names and not k.name().startswith('std::')]
|
||||||
|
for k in klasses:
|
||||||
|
try:
|
||||||
|
output.update(make_class_entry(k))
|
||||||
|
except k.ParsingError:
|
||||||
|
sys.stderr.write('Parsing error for class {0}\n'.format(k.name()))
|
||||||
|
|
||||||
|
# Docstrings are not created for anything that is not a function or a class.
|
||||||
|
# If this excludes anything important please add it here.
|
||||||
|
|
||||||
|
return output
|
||||||
|
|
||||||
|
def sub_docstring_in_pydoc_h(pydoc_files, docstrings_dict, output_dir, filter_str=None):
|
||||||
|
if filter_str:
|
||||||
|
docstrings_dict = {k: v for k, v in docstrings_dict.items() if k.startswith(filter_str)}
|
||||||
|
|
||||||
|
with open(os.path.join(output_dir,'docstring_status'),'w') as status_file:
|
||||||
|
|
||||||
|
for pydoc_file in pydoc_files:
|
||||||
|
if filter_str:
|
||||||
|
filter_str2 = "::".join((filter_str,os.path.split(pydoc_file)[-1].split('_pydoc_template.h')[0]))
|
||||||
|
docstrings_dict2 = {k: v for k, v in docstrings_dict.items() if k.startswith(filter_str2)}
|
||||||
|
else:
|
||||||
|
docstrings_dict2 = docstrings_dict
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
file_in = open(pydoc_file,'r').read()
|
||||||
|
for key, value in docstrings_dict2.items():
|
||||||
|
file_in_tmp = file_in
|
||||||
|
try:
|
||||||
|
doc_key = key.split("::")
|
||||||
|
# if 'gr' in doc_key:
|
||||||
|
# doc_key.remove('gr')
|
||||||
|
doc_key = '_'.join(doc_key)
|
||||||
|
regexp = r'(__doc_{} =\sR\"doc\()[^)]*(\)doc\")'.format(doc_key)
|
||||||
|
regexp = re.compile(regexp, re.MULTILINE)
|
||||||
|
|
||||||
|
(file_in, nsubs) = regexp.subn(r'\1'+value+r'\2', file_in, count=1)
|
||||||
|
if nsubs == 1:
|
||||||
|
status_file.write("PASS: " + pydoc_file + "\n")
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
raise KeyboardInterrupt
|
||||||
|
except: # be permissive, TODO log, but just leave the docstring blank
|
||||||
|
status_file.write("FAIL: " + pydoc_file + "\n")
|
||||||
|
file_in = file_in_tmp
|
||||||
|
|
||||||
|
output_pathname = os.path.join(output_dir, os.path.basename(pydoc_file).replace('_template.h','.h'))
|
||||||
|
# FIXME: Remove this debug print
|
||||||
|
print('output docstrings to {}'.format(output_pathname))
|
||||||
|
with open(output_pathname,'w') as file_out:
|
||||||
|
file_out.write(file_in)
|
||||||
|
|
||||||
|
def copy_docstring_templates(pydoc_files, output_dir):
|
||||||
|
with open(os.path.join(output_dir,'docstring_status'),'w') as status_file:
|
||||||
|
for pydoc_file in pydoc_files:
|
||||||
|
file_in = open(pydoc_file,'r').read()
|
||||||
|
output_pathname = os.path.join(output_dir, os.path.basename(pydoc_file).replace('_template.h','.h'))
|
||||||
|
# FIXME: Remove this debug print
|
||||||
|
print('copy docstrings to {}'.format(output_pathname))
|
||||||
|
with open(output_pathname,'w') as file_out:
|
||||||
|
file_out.write(file_in)
|
||||||
|
status_file.write("DONE")
|
||||||
|
|
||||||
|
def argParse():
|
||||||
|
"""Parses commandline args."""
|
||||||
|
desc='Scrape the doxygen generated xml for docstrings to insert into python bindings'
|
||||||
|
parser = ArgumentParser(description=desc)
|
||||||
|
|
||||||
|
parser.add_argument("function", help="Operation to perform on docstrings", choices=["scrape","sub","copy"])
|
||||||
|
|
||||||
|
parser.add_argument("--xml_path")
|
||||||
|
parser.add_argument("--bindings_dir")
|
||||||
|
parser.add_argument("--output_dir")
|
||||||
|
parser.add_argument("--json_path")
|
||||||
|
parser.add_argument("--filter", default=None)
|
||||||
|
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Parse command line options and set up doxyxml.
|
||||||
|
args = argParse()
|
||||||
|
if args.function.lower() == 'scrape':
|
||||||
|
di = DoxyIndex(args.xml_path)
|
||||||
|
docstrings_dict = get_docstrings_dict(di)
|
||||||
|
with open(args.json_path, 'w') as fp:
|
||||||
|
json.dump(docstrings_dict, fp)
|
||||||
|
elif args.function.lower() == 'sub':
|
||||||
|
with open(args.json_path, 'r') as fp:
|
||||||
|
docstrings_dict = json.load(fp)
|
||||||
|
pydoc_files = glob.glob(os.path.join(args.bindings_dir,'*_pydoc_template.h'))
|
||||||
|
sub_docstring_in_pydoc_h(pydoc_files, docstrings_dict, args.output_dir, args.filter)
|
||||||
|
elif args.function.lower() == 'copy':
|
||||||
|
pydoc_files = glob.glob(os.path.join(args.bindings_dir,'*_pydoc_template.h'))
|
||||||
|
copy_docstring_templates(pydoc_files, args.output_dir)
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,13 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file is part of gr-iqbalance
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
install(FILES
|
install(FILES
|
||||||
iqbalance_fix_cc.xml
|
iqbalance_fix_cc.block.yml
|
||||||
iqbalance_optimize_c.xml DESTINATION share/gnuradio/grc/blocks
|
iqbalance_optimize_c.block.yml
|
||||||
|
iqbalance.tree.yml
|
||||||
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
'[Core]':
|
||||||
|
- IQ Balance:
|
||||||
|
- iqbalance_fix_cc
|
||||||
|
- iqbalance_optimize_c
|
|
@ -0,0 +1,43 @@
|
||||||
|
id: iqbalance_fix_cc
|
||||||
|
label: IQ Bal Fix
|
||||||
|
flags: [ python, cpp ]
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: mag
|
||||||
|
label: Magnitude
|
||||||
|
dtype: real
|
||||||
|
default: 0
|
||||||
|
- id: phase
|
||||||
|
label: Phase
|
||||||
|
dtype: real
|
||||||
|
default: 0
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
- domain: message
|
||||||
|
id: iqbal_corr
|
||||||
|
dtype: complex
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: from gnuradio import iqbalance
|
||||||
|
make: iqbalance.fix_cc(${mag}, ${phase})
|
||||||
|
callbacks:
|
||||||
|
- set_mag(${mag})
|
||||||
|
- set_phase(${phase})
|
||||||
|
|
||||||
|
cpp_templates:
|
||||||
|
includes: ['#include <gnuradio/iqbalance.h>']
|
||||||
|
declarations: 'iqbalance::fix_cc::sptr ${id};'
|
||||||
|
make: 'this->${id} = iqbalance::fix_cc::make(${mag}, ${phase});'
|
||||||
|
callbacks:
|
||||||
|
- set_mag(${mag})
|
||||||
|
- set_phase(${phase})
|
||||||
|
link: ['gnuradio-iqbalance']
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,33 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>IQ Bal Fix</name>
|
|
||||||
<key>iqbalance_fix_cc</key>
|
|
||||||
<category>IQ Balance</category>
|
|
||||||
<import>import iqbalance</import>
|
|
||||||
<make>iqbalance.fix_cc($mag, $phase)</make>
|
|
||||||
<callback>set_mag($mag)</callback>
|
|
||||||
<callback>set_phase($phase)</callback>
|
|
||||||
<param>
|
|
||||||
<name>Magnitude</name>
|
|
||||||
<key>mag</key>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Phase</name>
|
|
||||||
<key>phase</key>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</sink>
|
|
||||||
<sink>
|
|
||||||
<name>iqbal_corr</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
id: iqbalance_optimize_c
|
||||||
|
label: IQ Bal Optimize
|
||||||
|
flags: [ python, cpp ]
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: period
|
||||||
|
label: Period
|
||||||
|
dtype: int
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: iqbal_corr
|
||||||
|
dtype: complex
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: from gnuradio import iqbalance
|
||||||
|
make: iqbalance.optimize_c(${period})
|
||||||
|
callbacks:
|
||||||
|
- set_period(${period})
|
||||||
|
cpp_templates:
|
||||||
|
includes: ['#include <gnuradio/iqbalance.h>']
|
||||||
|
declarations: 'iqbalance::optimize_c::sptr ${id};'
|
||||||
|
make: 'this->${id} = iqbalance::optimize_c::make(${period});'
|
||||||
|
callbacks:
|
||||||
|
- set_period(${period})
|
||||||
|
link: ['gnuradio-iqbalance']
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>IQ Bal Optimize</name>
|
|
||||||
<key>iqbalance_optimize_c</key>
|
|
||||||
<category>IQ Balance</category>
|
|
||||||
<import>import iqbalance</import>
|
|
||||||
<make>iqbalance.optimize_c($period)</make>
|
|
||||||
<callback>set_period($period)</callback>
|
|
||||||
<param>
|
|
||||||
<name>Period</name>
|
|
||||||
<key>period</key>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>iqbal_corr</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -1,27 +0,0 @@
|
||||||
# Copyright 2011 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.
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install public header files
|
|
||||||
########################################################################
|
|
||||||
install(FILES
|
|
||||||
iqbalance_api.h
|
|
||||||
iqbalance_fix_cc.h
|
|
||||||
iqbalance_optimize_c.h DESTINATION include/iqbalance
|
|
||||||
)
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
#
|
||||||
|
# This file is part of gr-iqbalance
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Install public header files
|
||||||
|
########################################################################
|
||||||
|
install(FILES
|
||||||
|
api.h
|
||||||
|
fix_cc.h
|
||||||
|
optimize_c.h
|
||||||
|
DESTINATION include/gnuradio/iqbalance
|
||||||
|
)
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gnuradio/attributes.h>
|
||||||
|
|
||||||
|
#ifdef gnuradio_iqbalance_EXPORTS
|
||||||
|
# define IQBALANCE_API __GR_ATTR_EXPORT
|
||||||
|
#else
|
||||||
|
# define IQBALANCE_API __GR_ATTR_IMPORT
|
||||||
|
#endif
|
|
@ -0,0 +1,47 @@
|
||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gnuradio/iqbalance/api.h>
|
||||||
|
#include <gnuradio/sync_block.h>
|
||||||
|
|
||||||
|
namespace gr {
|
||||||
|
namespace iqbalance {
|
||||||
|
|
||||||
|
class IQBALANCE_API fix_cc : public gr::sync_block
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
fix_cc(float mag, float phase);
|
||||||
|
|
||||||
|
float d_mag, d_phase;
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef std::shared_ptr<fix_cc> sptr;
|
||||||
|
|
||||||
|
static sptr make(float mag=0.0f, float phase=0.0f);
|
||||||
|
|
||||||
|
~fix_cc();
|
||||||
|
|
||||||
|
void set_mag(float mag) { this->d_mag = mag; }
|
||||||
|
void set_phase(float phase) { this->d_phase = phase; }
|
||||||
|
|
||||||
|
float mag() const { return this->d_mag; }
|
||||||
|
float phase() const { return this->d_phase; }
|
||||||
|
|
||||||
|
void apply_new_corrections (pmt::pmt_t msg);
|
||||||
|
|
||||||
|
int work (int noutput_items,
|
||||||
|
gr_vector_const_void_star &input_items,
|
||||||
|
gr_vector_void_star &output_items);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace iqbalance
|
||||||
|
} // namespace gr
|
|
@ -0,0 +1,55 @@
|
||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gnuradio/iqbalance/api.h>
|
||||||
|
#include <gnuradio/sync_block.h>
|
||||||
|
|
||||||
|
namespace gr {
|
||||||
|
namespace iqbalance {
|
||||||
|
|
||||||
|
class IQBALANCE_API optimize_c : public gr::sync_block
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
optimize_c(int period);
|
||||||
|
|
||||||
|
int d_period, d_count;
|
||||||
|
bool d_first;
|
||||||
|
float d_mag, d_phase;
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef std::shared_ptr<optimize_c> sptr;
|
||||||
|
|
||||||
|
static sptr make(int period=0);
|
||||||
|
|
||||||
|
~optimize_c();
|
||||||
|
|
||||||
|
void set_period(int period) { this->d_period = period; }
|
||||||
|
int period() const { return this->d_period; }
|
||||||
|
|
||||||
|
float mag() const { return this->d_mag; }
|
||||||
|
float phase() const { return this->d_phase; }
|
||||||
|
|
||||||
|
void reset(void) {
|
||||||
|
this->d_first = true;
|
||||||
|
this->d_count = 0;
|
||||||
|
this->d_mag = this->d_phase = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
||||||
|
|
||||||
|
int work (int noutput_items,
|
||||||
|
gr_vector_const_void_star &input_items,
|
||||||
|
gr_vector_void_star &output_items);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace iqbalance
|
||||||
|
} // namespace gr
|
|
@ -1,33 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2011 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef INCLUDED_IQBALANCE_API_H
|
|
||||||
#define INCLUDED_IQBALANCE_API_H
|
|
||||||
|
|
||||||
#include <gruel/attributes.h>
|
|
||||||
|
|
||||||
#ifdef gnuradio_iqbalance_EXPORTS
|
|
||||||
# define IQBALANCE_API __GR_ATTR_EXPORT
|
|
||||||
#else
|
|
||||||
# define IQBALANCE_API __GR_ATTR_IMPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* INCLUDED_IQBALANCE_API_H */
|
|
|
@ -1,65 +0,0 @@
|
||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2013 Sylvain Munaut <tnt@246tNt.com>
|
|
||||||
*
|
|
||||||
* This 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.
|
|
||||||
*
|
|
||||||
* This software is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this software; see the file COPYING. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef INCLUDED_IQBALANCE_FIX_CC_H
|
|
||||||
#define INCLUDED_IQBALANCE_FIX_CC_H
|
|
||||||
|
|
||||||
#include <iqbalance_api.h>
|
|
||||||
#include <gr_sync_block.h>
|
|
||||||
|
|
||||||
class iqbalance_fix_cc;
|
|
||||||
|
|
||||||
typedef boost::shared_ptr<iqbalance_fix_cc> iqbalance_fix_cc_sptr;
|
|
||||||
|
|
||||||
IQBALANCE_API iqbalance_fix_cc_sptr iqbalance_make_fix_cc (float mag=0.0f, float phase=0.0f);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief <+description+>
|
|
||||||
* \ingroup block
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class IQBALANCE_API iqbalance_fix_cc : public gr_sync_block
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
friend IQBALANCE_API iqbalance_fix_cc_sptr iqbalance_make_fix_cc (float mag, float phase);
|
|
||||||
|
|
||||||
iqbalance_fix_cc(float mag, float phase);
|
|
||||||
|
|
||||||
float d_mag, d_phase;
|
|
||||||
|
|
||||||
public:
|
|
||||||
~iqbalance_fix_cc();
|
|
||||||
|
|
||||||
void set_mag(float mag) { this->d_mag = mag; }
|
|
||||||
void set_phase(float phase) { this->d_phase = phase; }
|
|
||||||
|
|
||||||
float mag() const { return this->d_mag; }
|
|
||||||
float phase() const { return this->d_phase; }
|
|
||||||
|
|
||||||
void apply_new_corrections (pmt::pmt_t msg);
|
|
||||||
|
|
||||||
int work (int noutput_items,
|
|
||||||
gr_vector_const_void_star &input_items,
|
|
||||||
gr_vector_void_star &output_items);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* INCLUDED_IQBALANCE_FIX_CC_H */
|
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2013 Sylvain Munaut <tnt@246tNt.com>
|
|
||||||
*
|
|
||||||
* This 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.
|
|
||||||
*
|
|
||||||
* This software is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this software; see the file COPYING. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef INCLUDED_IQBALANCE_OPTIMIZE_C_H
|
|
||||||
#define INCLUDED_IQBALANCE_OPTIMIZE_C_H
|
|
||||||
|
|
||||||
#include <iqbalance_api.h>
|
|
||||||
#include <gr_sync_block.h>
|
|
||||||
|
|
||||||
class iqbalance_optimize_c;
|
|
||||||
|
|
||||||
typedef boost::shared_ptr<iqbalance_optimize_c> iqbalance_optimize_c_sptr;
|
|
||||||
|
|
||||||
IQBALANCE_API iqbalance_optimize_c_sptr iqbalance_make_optimize_c (int period=0);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief <+description+>
|
|
||||||
* \ingroup block
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class IQBALANCE_API iqbalance_optimize_c : public gr_sync_block
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
friend IQBALANCE_API iqbalance_optimize_c_sptr iqbalance_make_optimize_c (int period);
|
|
||||||
|
|
||||||
iqbalance_optimize_c(int period);
|
|
||||||
|
|
||||||
int d_period, d_count;
|
|
||||||
bool d_first;
|
|
||||||
float d_mag, d_phase;
|
|
||||||
|
|
||||||
public:
|
|
||||||
~iqbalance_optimize_c();
|
|
||||||
|
|
||||||
void set_period(int period) { this->d_period = period; }
|
|
||||||
int period() const { return this->d_period; }
|
|
||||||
|
|
||||||
float mag() const { return this->d_mag; }
|
|
||||||
float phase() const { return this->d_phase; }
|
|
||||||
|
|
||||||
void reset(void) {
|
|
||||||
this->d_first = true;
|
|
||||||
this->d_count = 0;
|
|
||||||
this->d_mag = this->d_phase = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
|
||||||
|
|
||||||
int work (int noutput_items,
|
|
||||||
gr_vector_const_void_star &input_items,
|
|
||||||
gr_vector_void_star &output_items);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* INCLUDED_IQBALANCE_OPTIMIZE_C_H */
|
|
||||||
|
|
|
@ -1,44 +1,68 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# This file is part of gr-iqbalance
|
||||||
# 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,
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Setup library
|
# Setup library
|
||||||
########################################################################
|
########################################################################
|
||||||
include(GrPlatform) #define LIB_SUFFIX
|
include(GrPlatform) #define LIB_SUFFIX
|
||||||
add_library(gnuradio-iqbalance SHARED iqbalance_fix_cc.cc iqbalance_optimize_c.cc ${LIBOSMODSP_SOURCES})
|
|
||||||
target_link_libraries(gnuradio-iqbalance ${Boost_LIBRARIES} ${GRUEL_LIBRARIES} ${GNURADIO_CORE_LIBRARIES} ${LIBOSMODSP_LIBRARIES})
|
list(APPEND iqbalance_sources
|
||||||
|
fix_cc.cc
|
||||||
|
optimize_c.cc
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(gnuradio-iqbalance SHARED ${iqbalance_sources} ${LIBOSMODSP_SEL_SOURCES})
|
||||||
|
target_link_libraries(gnuradio-iqbalance gnuradio::gnuradio-runtime ${LIBOSMODSP_SEL_LIBRARIES})
|
||||||
|
target_include_directories(gnuradio-iqbalance
|
||||||
|
PRIVATE ${LIBOSMODSP_SEL_INCLUDE_DIRS}
|
||||||
|
PUBLIC ${Boost_INCLUDE_DIRS}
|
||||||
|
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
|
||||||
|
PUBLIC $<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
set_target_properties(gnuradio-iqbalance PROPERTIES DEFINE_SYMBOL "gnuradio_iqbalance_EXPORTS")
|
set_target_properties(gnuradio-iqbalance PROPERTIES DEFINE_SYMBOL "gnuradio_iqbalance_EXPORTS")
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set_target_properties(gnuradio-iqbalance PROPERTIES
|
||||||
|
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
endif(APPLE)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Install built library files
|
# Install built library files
|
||||||
########################################################################
|
########################################################################
|
||||||
install(TARGETS gnuradio-iqbalance
|
include(GrMiscUtils)
|
||||||
LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file
|
GR_LIBRARY_FOO(gnuradio-iqbalance)
|
||||||
ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
|
|
||||||
RUNTIME DESTINATION bin # .dll file
|
########################################################################
|
||||||
)
|
# Print summary
|
||||||
|
########################################################################
|
||||||
|
message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||||
|
message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Build and register unit test
|
# Build and register unit test
|
||||||
########################################################################
|
########################################################################
|
||||||
find_package(Boost COMPONENTS unit_test_framework)
|
|
||||||
|
|
||||||
include(GrTest)
|
include(GrTest)
|
||||||
set(GR_TEST_TARGET_DEPS gnuradio-iqbalance)
|
|
||||||
#turn each test cpp file into an executable with an int main() function
|
|
||||||
add_definitions(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN)
|
|
||||||
|
|
||||||
|
# If your unit tests require special include paths, add them here
|
||||||
|
#include_directories()
|
||||||
|
# List all files that contain Boost.UTF unit tests here
|
||||||
|
list(APPEND iqbalance_test_sources
|
||||||
|
)
|
||||||
|
# Anything we need to link to for the unit tests go here
|
||||||
|
list(APPEND GR_TEST_TARGET_DEPS gnuradio-test)
|
||||||
|
|
||||||
|
if(NOT iqbalance_test_sources)
|
||||||
|
MESSAGE(STATUS "No C++ unit tests... skipping")
|
||||||
|
return()
|
||||||
|
endif(NOT iqbalance_test_sources)
|
||||||
|
|
||||||
|
foreach(qa_file ${iqbalance_test_sources})
|
||||||
|
GR_ADD_CPP_TEST("test_${qa_file}"
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
|
||||||
|
)
|
||||||
|
endforeach(qa_file)
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <gnuradio/iqbalance/fix_cc.h>
|
||||||
|
|
||||||
|
namespace gr {
|
||||||
|
|
||||||
|
iqbalance::fix_cc::sptr
|
||||||
|
iqbalance::fix_cc::make(float mag, float phase)
|
||||||
|
{
|
||||||
|
return gnuradio::get_initial_sptr(new iqbalance::fix_cc(mag, phase));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
iqbalance::fix_cc::fix_cc(float mag, float phase)
|
||||||
|
: gr::sync_block ("fix_cc",
|
||||||
|
gr::io_signature::make(1, 1, sizeof (gr_complex)),
|
||||||
|
gr::io_signature::make(1, 1, sizeof (gr_complex))),
|
||||||
|
d_mag(mag),
|
||||||
|
d_phase(phase)
|
||||||
|
{
|
||||||
|
message_port_register_in(pmt::mp("iqbal_corr"));
|
||||||
|
set_msg_handler(pmt::mp("iqbal_corr"),
|
||||||
|
boost::bind(&iqbalance::fix_cc::apply_new_corrections, this, boost::placeholders::_1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
iqbalance::fix_cc::~fix_cc()
|
||||||
|
{
|
||||||
|
/* Nothing to do */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
iqbalance::fix_cc::apply_new_corrections(pmt::pmt_t msg)
|
||||||
|
{
|
||||||
|
if (!pmt::is_f32vector(msg))
|
||||||
|
return;
|
||||||
|
|
||||||
|
this->set_mag(pmt::f32vector_ref(msg, 0));
|
||||||
|
this->set_phase(pmt::f32vector_ref(msg, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
iqbalance::fix_cc::work(int noutput_items,
|
||||||
|
gr_vector_const_void_star &input_items,
|
||||||
|
gr_vector_void_star &output_items)
|
||||||
|
{
|
||||||
|
const gr_complex *in = (const gr_complex *) input_items[0];
|
||||||
|
gr_complex *out = (gr_complex *) output_items[0];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (this->d_mag == 0.0f && this->d_phase == 0.0f) {
|
||||||
|
memcpy(out, in, noutput_items * sizeof(gr_complex));
|
||||||
|
return noutput_items;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float magp1 = 1.0f + this->d_mag;
|
||||||
|
const float phase = this->d_phase;
|
||||||
|
|
||||||
|
for (i=0; i<noutput_items; i++) {
|
||||||
|
gr_complex v = in[i];
|
||||||
|
out[i] = gr_complex(
|
||||||
|
v.real() * magp1,
|
||||||
|
v.imag() + phase * v.real()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return noutput_items;
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace gr */
|
||||||
|
|
|
@ -1,92 +0,0 @@
|
||||||
/* -*- c++ -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2013 Sylvain Munaut <tnt@246tNt.com>
|
|
||||||
*
|
|
||||||
* This 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.
|
|
||||||
*
|
|
||||||
* This software is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this software; see the file COPYING. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gr_io_signature.h>
|
|
||||||
#include "iqbalance_fix_cc.h"
|
|
||||||
|
|
||||||
|
|
||||||
iqbalance_fix_cc_sptr
|
|
||||||
iqbalance_make_fix_cc (float mag, float phase)
|
|
||||||
{
|
|
||||||
return gnuradio::get_initial_sptr (new iqbalance_fix_cc(mag, phase));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
iqbalance_fix_cc::iqbalance_fix_cc (float mag, float phase)
|
|
||||||
: gr_sync_block ("fix_cc",
|
|
||||||
gr_make_io_signature(1, 1, sizeof (gr_complex)),
|
|
||||||
gr_make_io_signature(1, 1, sizeof (gr_complex))),
|
|
||||||
d_mag(mag),
|
|
||||||
d_phase(phase)
|
|
||||||
{
|
|
||||||
message_port_register_in(pmt::mp("iqbal_corr"));
|
|
||||||
set_msg_handler(pmt::mp("iqbal_corr"),
|
|
||||||
boost::bind(&iqbalance_fix_cc::apply_new_corrections, this, _1));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
iqbalance_fix_cc::~iqbalance_fix_cc()
|
|
||||||
{
|
|
||||||
/* Nothing to do */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
iqbalance_fix_cc::apply_new_corrections (pmt::pmt_t msg)
|
|
||||||
{
|
|
||||||
if (!pmt_is_f32vector(msg))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this->set_mag(pmt_f32vector_ref(msg, 0));
|
|
||||||
this->set_phase(pmt_f32vector_ref(msg, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
iqbalance_fix_cc::work (int noutput_items,
|
|
||||||
gr_vector_const_void_star &input_items,
|
|
||||||
gr_vector_void_star &output_items)
|
|
||||||
{
|
|
||||||
const gr_complex *in = (const gr_complex *) input_items[0];
|
|
||||||
gr_complex *out = (gr_complex *) output_items[0];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (this->d_mag == 0.0f && this->d_phase == 0.0f) {
|
|
||||||
memcpy(out, in, noutput_items * sizeof(gr_complex));
|
|
||||||
return noutput_items;
|
|
||||||
}
|
|
||||||
|
|
||||||
const float magp1 = 1.0f + this->d_mag;
|
|
||||||
const float phase = this->d_phase;
|
|
||||||
|
|
||||||
for (i=0; i<noutput_items; i++) {
|
|
||||||
gr_complex v = in[i];
|
|
||||||
out[i] = gr_complex(
|
|
||||||
v.real() * magp1,
|
|
||||||
v.imag() + phase * v.real()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return noutput_items;
|
|
||||||
}
|
|
|
@ -1,29 +1,29 @@
|
||||||
/* -*- c++ -*- */
|
/* -*- c++ -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright 2013 Sylvain Munaut <tnt@246tNt.com>
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
*
|
*
|
||||||
* This is free software; you can redistribute it and/or modify
|
* This file is part of gr-iqbalance
|
||||||
* 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.
|
|
||||||
*
|
*
|
||||||
* This software is distributed in the hope that it will be useful,
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this software; see the file COPYING. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gr_io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include "iqbalance_optimize_c.h"
|
#include <gnuradio/iqbalance/optimize_c.h>
|
||||||
|
|
||||||
|
#define GCC_VERSION ( \
|
||||||
|
__GNUC__ * 10000 + \
|
||||||
|
__GNUC_MINOR__ * 100 + \
|
||||||
|
__GNUC_PATCHLEVEL__ \
|
||||||
|
)
|
||||||
|
|
||||||
|
#if GCC_VERSION >= 40800 || defined(__clang__)
|
||||||
|
# define complex _Complex
|
||||||
|
# undef _GLIBCXX_HAVE_COMPLEX_H
|
||||||
|
#endif
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <osmocom/dsp/cxvec.h>
|
#include <osmocom/dsp/cxvec.h>
|
||||||
|
@ -34,30 +34,32 @@ extern "C" {
|
||||||
#define FFT_COUNT 4
|
#define FFT_COUNT 4
|
||||||
|
|
||||||
|
|
||||||
iqbalance_optimize_c_sptr
|
namespace gr {
|
||||||
iqbalance_make_optimize_c (int period)
|
|
||||||
|
iqbalance::optimize_c::sptr
|
||||||
|
iqbalance::optimize_c::make(int period)
|
||||||
{
|
{
|
||||||
return gnuradio::get_initial_sptr (new iqbalance_optimize_c(period));
|
return gnuradio::get_initial_sptr (new iqbalance::optimize_c(period));
|
||||||
}
|
}
|
||||||
|
|
||||||
iqbalance_optimize_c::iqbalance_optimize_c (int period)
|
iqbalance::optimize_c::optimize_c(int period)
|
||||||
: gr_sync_block ("optimize_c",
|
: gr::sync_block ("optimize_c",
|
||||||
gr_make_io_signature(1, 1, sizeof (gr_complex)),
|
gr::io_signature::make(1, 1, sizeof (gr_complex)),
|
||||||
gr_make_io_signature(0, 0, 0)),
|
gr::io_signature::make(0, 0, 0)),
|
||||||
d_period(period), d_count(0), d_first(true), d_mag(0.0f), d_phase(0.0f)
|
d_period(period), d_count(0), d_first(true), d_mag(0.0f), d_phase(0.0f)
|
||||||
{
|
{
|
||||||
message_port_register_out(pmt::mp("iqbal_corr"));
|
message_port_register_out(pmt::mp("iqbal_corr"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
iqbalance_optimize_c::~iqbalance_optimize_c()
|
iqbalance::optimize_c::~optimize_c()
|
||||||
{
|
{
|
||||||
/* Nothing to do */
|
/* Nothing to do */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
iqbalance_optimize_c::forecast (int noutput_items, gr_vector_int &ninput_items_required)
|
iqbalance::optimize_c::forecast(int noutput_items, gr_vector_int &ninput_items_required)
|
||||||
{
|
{
|
||||||
unsigned ninputs = ninput_items_required.size ();
|
unsigned ninputs = ninput_items_required.size ();
|
||||||
for (unsigned i = 0; i < ninputs; i++)
|
for (unsigned i = 0; i < ninputs; i++)
|
||||||
|
@ -66,7 +68,7 @@ iqbalance_optimize_c::forecast (int noutput_items, gr_vector_int &ninput_items_r
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
iqbalance_optimize_c::work(int noutput_items,
|
iqbalance::optimize_c::work(int noutput_items,
|
||||||
gr_vector_const_void_star &input_items,
|
gr_vector_const_void_star &input_items,
|
||||||
gr_vector_void_star &output_items)
|
gr_vector_void_star &output_items)
|
||||||
{
|
{
|
||||||
|
@ -121,8 +123,11 @@ iqbalance_optimize_c::work(int noutput_items,
|
||||||
|
|
||||||
p[0] = this->d_mag;
|
p[0] = this->d_mag;
|
||||||
p[1] = this->d_phase;
|
p[1] = this->d_phase;
|
||||||
pmt::pmt_t msg = pmt::pmt_init_f32vector(2, p);
|
pmt::pmt_t msg = pmt::init_f32vector(2, p);
|
||||||
message_port_pub(pmt::mp("iqbal_corr"), msg);
|
message_port_pub(pmt::mp("iqbal_corr"), msg);
|
||||||
|
|
||||||
return N;
|
return N;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} /* namespace gr */
|
||||||
|
|
|
@ -1,21 +1,9 @@
|
||||||
# Copyright 2011 Free Software Foundation, Inc.
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# This file is part of GNU Radio
|
# This file is part of gr-iqbalance
|
||||||
#
|
#
|
||||||
# GNU Radio is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Include python install macros
|
# Include python install macros
|
||||||
|
@ -25,13 +13,15 @@ if(NOT PYTHONINTERP_FOUND)
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(bindings)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Install python sources
|
# Install python sources
|
||||||
########################################################################
|
########################################################################
|
||||||
GR_PYTHON_INSTALL(
|
GR_PYTHON_INSTALL(
|
||||||
FILES
|
FILES
|
||||||
__init__.py
|
__init__.py
|
||||||
DESTINATION ${GR_PYTHON_DIR}/iqbalance
|
DESTINATION ${GR_PYTHON_DIR}/gnuradio/iqbalance
|
||||||
)
|
)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
|
@ -40,5 +30,3 @@ GR_PYTHON_INSTALL(
|
||||||
include(GrTest)
|
include(GrTest)
|
||||||
|
|
||||||
set(GR_TEST_TARGET_DEPS gnuradio-iqbalance)
|
set(GR_TEST_TARGET_DEPS gnuradio-iqbalance)
|
||||||
set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
|
|
||||||
GR_ADD_TEST(qa_fix_cc ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_iqbalance_fix_cc.py)
|
|
||||||
|
|
|
@ -1,54 +1,12 @@
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
#
|
#
|
||||||
# Copyright 2008,2009 Free Software Foundation, Inc.
|
# This file is part of gr-iqbalance
|
||||||
#
|
#
|
||||||
# This application is free software; you can redistribute it and/or modify
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
# This application is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along
|
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
# The presence of this file turns this directory into a Python package
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
This is the GNU Radio IQBALANCE module. Place your Python package
|
This is the GNU Radio IQBALANCE module.
|
||||||
description here (python/__init__.py).
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# import pybind11 generated symbols into the iqbalance namespace
|
||||||
# Temporary workaround for ticket:181 (swig+python problem)
|
from .iqbalance_python import *
|
||||||
import sys
|
|
||||||
_RTLD_GLOBAL = 0
|
|
||||||
try:
|
|
||||||
from dl import RTLD_GLOBAL as _RTLD_GLOBAL
|
|
||||||
except ImportError:
|
|
||||||
try:
|
|
||||||
from DLFCN import RTLD_GLOBAL as _RTLD_GLOBAL
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if _RTLD_GLOBAL != 0:
|
|
||||||
_dlopenflags = sys.getdlopenflags()
|
|
||||||
sys.setdlopenflags(_dlopenflags|_RTLD_GLOBAL)
|
|
||||||
# ----------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
# import swig generated symbols into the iqbalance namespace
|
|
||||||
from iqbalance_swig import *
|
|
||||||
|
|
||||||
# import any pure python here
|
|
||||||
#
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
|
||||||
# Tail of workaround
|
|
||||||
if _RTLD_GLOBAL != 0:
|
|
||||||
sys.setdlopenflags(_dlopenflags) # Restore original flags
|
|
||||||
# ----------------------------------------------------------------
|
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Copyright 2011-2020 Free Software Foundation, Inc.
|
||||||
|
# Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
#
|
||||||
|
# This file is part of gr-iqbalance
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Check for pygccxml
|
||||||
|
########################################################################
|
||||||
|
GR_PYTHON_CHECK_MODULE_RAW(
|
||||||
|
"pygccxml"
|
||||||
|
"import pygccxml"
|
||||||
|
PYGCCXML_FOUND
|
||||||
|
)
|
||||||
|
|
||||||
|
# Official module is broken, makes too many assumptions that are not true
|
||||||
|
#include(GrPybind)
|
||||||
|
|
||||||
|
include(GrPython)
|
||||||
|
|
||||||
|
macro(GR_PYBIND_MAKE name updir filter files)
|
||||||
|
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/docs/doxygen/pydoc_macros.h ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
|
||||||
|
|
||||||
|
pybind11_add_module(${name}_python ${files})
|
||||||
|
|
||||||
|
SET(MODULE_NAME ${name})
|
||||||
|
if (${name} STREQUAL gr)
|
||||||
|
SET(MODULE_NAME "runtime")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_include_directories(${name}_python PUBLIC
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${PYTHON_NUMPY_INCLUDE_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${updir}/lib
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${updir}/include
|
||||||
|
${PYBIND11_INCLUDE_DIR}
|
||||||
|
)
|
||||||
|
target_link_libraries(${name}_python PUBLIC ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} gnuradio-${MODULE_NAME})
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
|
||||||
|
CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
target_compile_options(${name}_python PRIVATE -Wno-unused-variable) # disable warnings for docstring templates
|
||||||
|
endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
|
||||||
|
CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
|
||||||
|
endmacro(GR_PYBIND_MAKE)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Python Bindings
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
list(APPEND iqbalance_python_files
|
||||||
|
fix_cc_python.cc
|
||||||
|
optimize_c_python.cc
|
||||||
|
python_bindings.cc)
|
||||||
|
|
||||||
|
GR_PYBIND_MAKE(iqbalance
|
||||||
|
../..
|
||||||
|
gr::iqbalance
|
||||||
|
"${iqbalance_python_files}")
|
||||||
|
|
||||||
|
install(TARGETS iqbalance_python DESTINATION ${GR_PYTHON_DIR}/gnuradio/iqbalance COMPONENT pythonapi)
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pybind11/complex.h>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
|
||||||
|
#include <gnuradio/iqbalance/fix_cc.h>
|
||||||
|
|
||||||
|
#define D(...) ""
|
||||||
|
|
||||||
|
void bind_fix_cc(py::module& m)
|
||||||
|
{
|
||||||
|
using fix_cc = gr::iqbalance::fix_cc;
|
||||||
|
|
||||||
|
py::class_<fix_cc,
|
||||||
|
gr::sync_block,
|
||||||
|
gr::block,
|
||||||
|
gr::basic_block,
|
||||||
|
std::shared_ptr<fix_cc>>(m, "fix_cc", D(fix_cc))
|
||||||
|
|
||||||
|
.def(py::init(&fix_cc::make),
|
||||||
|
py::arg("mag") = 0.0f,
|
||||||
|
py::arg("phase") = 0.0f,
|
||||||
|
D(fix_cc,make)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("set_mag",
|
||||||
|
&fix_cc::set_mag,
|
||||||
|
py::arg("mag"),
|
||||||
|
D(fix_cc,set_mag)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("mag",
|
||||||
|
&fix_cc::mag,
|
||||||
|
D(fix_cc,mag)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("set_phase",
|
||||||
|
&fix_cc::set_phase,
|
||||||
|
py::arg("phase"),
|
||||||
|
D(fix_cc,set_phase)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("phase",
|
||||||
|
&fix_cc::phase,
|
||||||
|
D(fix_cc,phase)
|
||||||
|
)
|
||||||
|
|
||||||
|
;
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pybind11/complex.h>
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
#include <pybind11/stl.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
|
||||||
|
#include <gnuradio/iqbalance/optimize_c.h>
|
||||||
|
|
||||||
|
#define D(...) ""
|
||||||
|
|
||||||
|
void bind_optimize_c(py::module& m)
|
||||||
|
{
|
||||||
|
using optimize_c = gr::iqbalance::optimize_c;
|
||||||
|
|
||||||
|
py::class_<optimize_c,
|
||||||
|
gr::sync_block,
|
||||||
|
gr::block,
|
||||||
|
gr::basic_block,
|
||||||
|
std::shared_ptr<optimize_c>>(m, "optimize_c", D(optimize_c))
|
||||||
|
|
||||||
|
.def(py::init(&optimize_c::make),
|
||||||
|
py::arg("period") = 0,
|
||||||
|
D(optimize_c,make)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("set_period",
|
||||||
|
&optimize_c::set_period,
|
||||||
|
py::arg("period"),
|
||||||
|
D(optimize_c,set_period)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("period",
|
||||||
|
&optimize_c::period,
|
||||||
|
D(optimize_c,period)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("mag",
|
||||||
|
&optimize_c::mag,
|
||||||
|
D(optimize_c,mag)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("phase",
|
||||||
|
&optimize_c::phase,
|
||||||
|
D(optimize_c,phase)
|
||||||
|
)
|
||||||
|
|
||||||
|
.def("reset",
|
||||||
|
&optimize_c::reset,
|
||||||
|
D(optimize_c,reset)
|
||||||
|
)
|
||||||
|
|
||||||
|
;
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020-2021 Free Software Foundation, Inc.
|
||||||
|
* Copyright 2013-2021 Sylvain Munaut <tnt@246tNt.com>
|
||||||
|
*
|
||||||
|
* This file is part of gr-iqbalance
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pybind11/pybind11.h>
|
||||||
|
|
||||||
|
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
|
||||||
|
#include <numpy/arrayobject.h>
|
||||||
|
|
||||||
|
namespace py = pybind11;
|
||||||
|
|
||||||
|
void bind_fix_cc(py::module& m);
|
||||||
|
void bind_optimize_c(py::module& m);
|
||||||
|
|
||||||
|
// We need this hack because import_array() returns NULL
|
||||||
|
// for newer Python versions.
|
||||||
|
// This function is also necessary because it ensures access to the C API
|
||||||
|
// and removes a warning.
|
||||||
|
void* init_numpy()
|
||||||
|
{
|
||||||
|
import_array();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
PYBIND11_MODULE(iqbalance_python, m)
|
||||||
|
{
|
||||||
|
// Initialize the numpy C API
|
||||||
|
// (otherwise we will see segmentation faults)
|
||||||
|
init_numpy();
|
||||||
|
|
||||||
|
// Allow access to base block methods
|
||||||
|
py::module::import("gnuradio.gr");
|
||||||
|
|
||||||
|
bind_fix_cc(m);
|
||||||
|
bind_optimize_c(m);
|
||||||
|
}
|
|
@ -1,39 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2013 <+YOU OR YOUR COMPANY+>.
|
|
||||||
#
|
|
||||||
# This 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.
|
|
||||||
#
|
|
||||||
# This software is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this software; see the file COPYING. If not, write to
|
|
||||||
# the Free Software Foundation, Inc., 51 Franklin Street,
|
|
||||||
# Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
from gnuradio import gr, gr_unittest
|
|
||||||
import iqbalance_swig as iqbalance
|
|
||||||
|
|
||||||
class qa_fix_cc (gr_unittest.TestCase):
|
|
||||||
|
|
||||||
def setUp (self):
|
|
||||||
self.tb = gr.top_block ()
|
|
||||||
|
|
||||||
def tearDown (self):
|
|
||||||
self.tb = None
|
|
||||||
|
|
||||||
def test_001_t (self):
|
|
||||||
# set up fg
|
|
||||||
self.tb.run ()
|
|
||||||
# check data
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
gr_unittest.run(qa_fix_cc, "qa_fix_cc.xml")
|
|
|
@ -1,61 +0,0 @@
|
||||||
# Copyright 2011 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.
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Include swig generation macros
|
|
||||||
########################################################################
|
|
||||||
find_package(SWIG)
|
|
||||||
find_package(PythonLibs)
|
|
||||||
if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
include(GrSwig)
|
|
||||||
include(GrPython)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Setup swig generation
|
|
||||||
########################################################################
|
|
||||||
foreach(incdir ${GNURADIO_CORE_INCLUDE_DIRS})
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/swig)
|
|
||||||
endforeach(incdir)
|
|
||||||
|
|
||||||
foreach(incdir ${GRUEL_INCLUDE_DIRS})
|
|
||||||
list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gruel/swig)
|
|
||||||
endforeach(incdir)
|
|
||||||
|
|
||||||
set(GR_SWIG_LIBRARIES gnuradio-iqbalance)
|
|
||||||
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/iqbalance_swig_doc.i)
|
|
||||||
set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
|
||||||
|
|
||||||
GR_SWIG_MAKE(iqbalance_swig iqbalance_swig.i)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install the build swig module
|
|
||||||
########################################################################
|
|
||||||
GR_SWIG_INSTALL(TARGETS iqbalance_swig DESTINATION ${GR_PYTHON_DIR}/iqbalance)
|
|
||||||
|
|
||||||
########################################################################
|
|
||||||
# Install swig .i files for development
|
|
||||||
########################################################################
|
|
||||||
install(
|
|
||||||
FILES
|
|
||||||
iqbalance_swig.i
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/iqbalance_swig_doc.i
|
|
||||||
DESTINATION ${GR_INCLUDE_DIR}/iqbalance/swig
|
|
||||||
)
|
|
|
@ -1,20 +0,0 @@
|
||||||
/* -*- c++ -*- */
|
|
||||||
|
|
||||||
#define IQBALANCE_API
|
|
||||||
|
|
||||||
%include "gnuradio.i" // the common stuff
|
|
||||||
|
|
||||||
//load generated python docstrings
|
|
||||||
%include "iqbalance_swig_doc.i"
|
|
||||||
|
|
||||||
|
|
||||||
%{
|
|
||||||
#include "iqbalance_fix_cc.h"
|
|
||||||
#include "iqbalance_optimize_c.h"
|
|
||||||
%}
|
|
||||||
|
|
||||||
GR_SWIG_BLOCK_MAGIC(iqbalance,fix_cc);
|
|
||||||
%include "iqbalance_fix_cc.h"
|
|
||||||
|
|
||||||
GR_SWIG_BLOCK_MAGIC(iqbalance,optimize_c);
|
|
||||||
%include "iqbalance_optimize_c.h"
|
|
Loading…
Reference in New Issue