summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2018-10-07 13:30:35 -0700
committerMarcus Müller <marcus@hostalia.de>2018-10-22 19:06:55 +0200
commit9449236cf7bf48f40b696edce68d81410d713489 (patch)
tree56052674fea45cb83a1291e6886a8154c97d1b15
parentea0ee503a144aaf07a684a2dfaac58c89dbdb78d (diff)
modtool: OOTs use Boost.UTF, CMake 3.8-Aware
- This is the same change that happened for the GNU Radio core - New OOTs will now have Boost.UTF-based unit tests - modtool will be able to handle both CppUnit-based OOTs as well as Boost.UTF-based ones; this change is backward-compatible
-rw-r--r--gr-utils/python/modtool/gr-newmod/CMakeLists.txt9
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake39
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake26
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt45
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc37
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/qa_howto.h39
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/test_howto.cc49
-rw-r--r--gr-utils/python/modtool/modtool_add.py24
-rw-r--r--gr-utils/python/modtool/modtool_base.py6
-rw-r--r--gr-utils/python/modtool/modtool_disable.py9
-rw-r--r--gr-utils/python/modtool/modtool_info.py1
-rw-r--r--gr-utils/python/modtool/modtool_makexml.py2
-rw-r--r--gr-utils/python/modtool/modtool_rm.py7
-rw-r--r--gr-utils/python/modtool/parser_cc_block.py2
-rw-r--r--gr-utils/python/modtool/templates.py21
15 files changed, 110 insertions, 206 deletions
diff --git a/gr-utils/python/modtool/gr-newmod/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/CMakeLists.txt
index 30540c124e..637611d4ac 100644
--- a/gr-utils/python/modtool/gr-newmod/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/CMakeLists.txt
@@ -87,7 +87,7 @@ set(Boost_ADDITIONAL_VERSIONS
"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" COMPONENTS filesystem system)
+find_package(Boost "1.35" COMPONENTS filesystem system unit_test_framework)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Boost required to compile howto")
@@ -133,7 +133,6 @@ endif(APPLE)
########################################################################
# Find gnuradio build dependencies
########################################################################
-find_package(CppUnit)
find_package(Doxygen)
# Search for GNU Radio and its components and versions. Add any
@@ -145,10 +144,6 @@ find_package(Gnuradio "3.7.2" REQUIRED)
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
include(GrVersion)
-if(NOT CPPUNIT_FOUND)
- message(FATAL_ERROR "CppUnit required to compile howto")
-endif()
-
########################################################################
# Setup doxygen option
########################################################################
@@ -167,13 +162,11 @@ include_directories(
${CMAKE_BINARY_DIR}/lib
${CMAKE_BINARY_DIR}/include
${Boost_INCLUDE_DIRS}
- ${CPPUNIT_INCLUDE_DIRS}
${GNURADIO_ALL_INCLUDE_DIRS}
)
link_directories(
${Boost_LIBRARY_DIRS}
- ${CPPUNIT_LIBRARY_DIRS}
${GNURADIO_RUNTIME_LIBRARY_DIRS}
)
diff --git a/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake
deleted file mode 100644
index f93ade3412..0000000000
--- a/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-# http://www.cmake.org/pipermail/cmake/2006-October/011446.html
-# Modified to use pkg config and use standard var names
-
-#
-# Find the CppUnit includes and library
-#
-# This module defines
-# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
-# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
-# CPPUNIT_FOUND, If false, do not try to use CppUnit.
-
-INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(PC_CPPUNIT "cppunit")
-
-FIND_PATH(CPPUNIT_INCLUDE_DIRS
- NAMES cppunit/TestCase.h
- HINTS ${PC_CPPUNIT_INCLUDE_DIR}
- ${CMAKE_INSTALL_PREFIX}/include
- PATHS
- /usr/local/include
- /usr/include
-)
-
-FIND_LIBRARY(CPPUNIT_LIBRARIES
- NAMES cppunit
- HINTS ${PC_CPPUNIT_LIBDIR}
- ${CMAKE_INSTALL_PREFIX}/lib
- ${CMAKE_INSTALL_PREFIX}/lib64
- PATHS
- ${CPPUNIT_INCLUDE_DIRS}/../lib
- /usr/local/lib
- /usr/lib
-)
-
-LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS})
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
-MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS)
diff --git a/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake
index 186e2d5333..9500fa0a4a 100644
--- a/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake
@@ -46,7 +46,7 @@ function(GR_ADD_TEST test_name)
get_target_property(location ${target} LOCATION)
if(location)
get_filename_component(path ${location} PATH)
- string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})
+ string(REGEX REPLACE "\\$\\(.*\\)" "${CMAKE_BUILD_TYPE}" path "${path}")
list(APPEND GR_TEST_LIBRARY_DIRS ${path})
endif(location)
endforeach(target)
@@ -113,7 +113,6 @@ function(GR_ADD_TEST test_name)
execute_process(COMMAND chmod +x ${sh_file})
add_test(${test_name} ${SHELL} ${sh_file})
-
endif(UNIX)
if(WIN32)
@@ -142,3 +141,26 @@ function(GR_ADD_TEST test_name)
endif(WIN32)
endfunction(GR_ADD_TEST)
+
+########################################################################
+# Add a C++ unit test and setup the environment for a unit test.
+# Takes the same arguments as the ADD_TEST function.
+#
+# test_name -- An identifier for your test, for usage with ctest -R
+# test_source -- Path to the .cc file
+#
+# Before calling set the following variables:
+# GR_TEST_TARGET_DEPS - built targets for the library path
+########################################################################
+function(GR_ADD_CPP_TEST test_name test_source)
+ add_executable(${test_name} ${test_source})
+ target_link_libraries(
+ ${test_name}
+ ${GR_TEST_TARGET_DEPS}
+ )
+ set_target_properties(${test_name}
+ PROPERTIES COMPILE_DEFINITIONS "BOOST_TEST_DYN_LINK;BOOST_TEST_MAIN"
+ )
+ GR_ADD_TEST(${test_name} ${test_name})
+endfunction(GR_ADD_CPP_TEST)
+
diff --git a/gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt
index 64b7c1d4ab..2460b930f6 100644
--- a/gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2011,2012,2016 Free Software Foundation, Inc.
+# Copyright 2011,2012,2016,2018 Free Software Foundation, Inc.
#
# This file was generated by gr_modtool, a tool from the GNU Radio framework
# This file is a part of gr-howto
@@ -31,8 +31,8 @@ list(APPEND howto_sources
set(howto_sources "${howto_sources}" PARENT_SCOPE)
if(NOT howto_sources)
- MESSAGE(STATUS "No C++ sources... skipping lib/")
- return()
+ MESSAGE(STATUS "No C++ sources... skipping lib/")
+ return()
endif(NOT howto_sources)
add_library(gnuradio-howto SHARED ${howto_sources})
@@ -52,31 +52,32 @@ include(GrMiscUtils)
GR_LIBRARY_FOO(gnuradio-howto)
########################################################################
+# Print summary
+########################################################################
+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
+
+########################################################################
# Build and register unit test
########################################################################
include(GrTest)
-include_directories(${CPPUNIT_INCLUDE_DIRS})
-
+# 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 test_howto_sources
- ${CMAKE_CURRENT_SOURCE_DIR}/test_howto.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/qa_howto.cc
)
+# Anything we need to link to for the unit tests go here
+list(APPEND GR_TEST_TARGET_DEPS gnuradio-howto)
-add_executable(test-howto ${test_howto_sources})
+if(NOT test_howto_sources)
+ MESSAGE(STATUS "No C++ unit tests... skipping")
+ return()
+endif(NOT test_howto_sources)
-target_link_libraries(
- test-howto
- ${GNURADIO_RUNTIME_LIBRARIES}
- ${Boost_LIBRARIES}
- ${CPPUNIT_LIBRARIES}
- gnuradio-howto
-)
-
-GR_ADD_TEST(test_howto test-howto)
+foreach(qa_file ${test_howto_sources})
+ GR_ADD_CPP_TEST("howto_${qa_file}"
+ ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}
+ )
+endforeach(qa_file)
-########################################################################
-# Print summary
-########################################################################
-message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")
-message(STATUS "Building for version: ${VERSION} / ${LIBVER}")
diff --git a/gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc b/gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc
deleted file mode 100644
index 2f10a3a564..0000000000
--- a/gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 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 gr-howto
- *
- * 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.
- */
-
-/*
- * This class gathers together all the test cases for the gr-filter
- * directory into a single test suite. As you create new test cases,
- * add them here.
- */
-
-#include "qa_howto.h"
-
-CppUnit::TestSuite *
-qa_howto::suite()
-{
- CppUnit::TestSuite *s = new CppUnit::TestSuite("howto");
-
- return s;
-}
diff --git a/gr-utils/python/modtool/gr-newmod/lib/qa_howto.h b/gr-utils/python/modtool/gr-newmod/lib/qa_howto.h
deleted file mode 100644
index c50bde3ec7..0000000000
--- a/gr-utils/python/modtool/gr-newmod/lib/qa_howto.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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 gr-howto
- *
- * 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 _QA_HOWTO_H_
-#define _QA_HOWTO_H_
-
-#include <gnuradio/attributes.h>
-#include <cppunit/TestSuite.h>
-
-//! collect all the tests for the gr-filter directory
-
-class __GR_ATTR_EXPORT qa_howto
-{
- public:
- //! return suite of tests for all of gr-filter directory
- static CppUnit::TestSuite *suite();
-};
-
-#endif /* _QA_HOWTO_H_ */
diff --git a/gr-utils/python/modtool/gr-newmod/lib/test_howto.cc b/gr-utils/python/modtool/gr-newmod/lib/test_howto.cc
deleted file mode 100644
index 699bb5b640..0000000000
--- a/gr-utils/python/modtool/gr-newmod/lib/test_howto.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 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 gr-howto
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <cppunit/TextTestRunner.h>
-#include <cppunit/XmlOutputter.h>
-
-#include <gnuradio/unittests.h>
-#include "qa_howto.h"
-#include <iostream>
-#include <fstream>
-
-int
-main (int argc, char **argv)
-{
- CppUnit::TextTestRunner runner;
- std::ofstream xmlfile(get_unittest_path("howto.xml").c_str());
- CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile);
-
- runner.addTest(qa_howto::suite());
- runner.setOutputter(xmlout);
-
- bool was_successful = runner.run("", false);
-
- return was_successful ? 0 : 1;
-}
diff --git a/gr-utils/python/modtool/modtool_add.py b/gr-utils/python/modtool/modtool_add.py
index 2ff5a9ad30..9f128d2fde 100644
--- a/gr-utils/python/modtool/modtool_add.py
+++ b/gr-utils/python/modtool/modtool_add.py
@@ -1,5 +1,5 @@
#
-# Copyright 2013, 2017 Free Software Foundation, Inc.
+# Copyright 2013, 2017-2018 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -230,9 +230,27 @@ class ModToolAdd(ModTool):
self.scm.mark_files_updated((self._file['qalib'],))
except IOError:
print("Can't add C++ QA files.")
+ def _add_qa_boostutf():
+ " Add C++ QA files for 3.8 API "
+ fname_qa_cc = 'qa_%s.cc' % self._info['blockname']
+ self._write_tpl('qa_cpp_boostutf', 'lib', fname_qa_cc)
+ if not self._skip_cmakefiles:
+ try:
+ ed = CMakeFileEditor(self._file['cmlib'])
+ cmake_list_var = \
+ 'test_{}_source'.format(self._info['modname'])
+ if not ed.append_value(
+ 'list',
+ fname_qa_cc,
+ to_ignore_start='APPEND ' + cmake_list_var):
+ print("Couldn't add C++ QA files.")
+ ed.write()
+ self.scm.mark_files_updated((self._file['cmlib'],))
+ except IOError:
+ print("Can't add C++ QA files.")
fname_cc = None
fname_h = None
- if self._info['version'] == '37':
+ if self._info['version'] in ('37', '38'):
fname_h = self._info['blockname'] + '.h'
fname_cc = self._info['blockname'] + '.cc'
if self._info['blocktype'] in ('source', 'sink', 'sync', 'decimator',
@@ -249,6 +267,8 @@ class ModToolAdd(ModTool):
if self._add_cc_qa:
if self._info['version'] == '37':
_add_qa()
+ if self._info['version'] == '38':
+ _add_qa_boostutf()
elif self._info['version'] == '36':
print("Warning: C++ QA files not supported for 3.6-style OOTs.")
elif self._info['version'] == 'autofoo':
diff --git a/gr-utils/python/modtool/modtool_base.py b/gr-utils/python/modtool/modtool_base.py
index 4263e498f7..41d83ccafb 100644
--- a/gr-utils/python/modtool/modtool_base.py
+++ b/gr-utils/python/modtool/modtool_base.py
@@ -1,5 +1,5 @@
#
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013,2018 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -105,6 +105,8 @@ class ModTool(object):
os.path.isdir(os.path.join('include', 'gnuradio', self._info['modname']))
):
self._info['version'] = '37'
+ if not os.path.isfile(os.path.join('cmake', 'Modules', 'FindCppUnit.cmake')):
+ self._info['version'] = '38'
if options.skip_lib or not self._has_subdirs['lib']:
self._skip_subdirs['lib'] = True
if options.skip_python or not self._has_subdirs['python']:
@@ -133,7 +135,7 @@ class ModTool(object):
self._file['cmpython'] = os.path.join(self._info['pydir'], 'CMakeLists.txt')
if self._info['is_component']:
self._info['includedir'] = os.path.join('include', 'gnuradio', self._info['modname'])
- elif self._info['version'] == '37':
+ elif self._info['version'] in ('37', '38'):
self._info['includedir'] = os.path.join('include', self._info['modname'])
else:
self._info['includedir'] = 'include'
diff --git a/gr-utils/python/modtool/modtool_disable.py b/gr-utils/python/modtool/modtool_disable.py
index 556b2e1ab2..3a105e407c 100644
--- a/gr-utils/python/modtool/modtool_disable.py
+++ b/gr-utils/python/modtool/modtool_disable.py
@@ -83,6 +83,9 @@ class ModToolDisable(ModTool):
ed.comment_out_lines(r'%s::suite\(\)' % fname_base, comment_str='//')
ed.write()
self.scm.mark_file_updated(self._file['qalib'])
+ elif self._info['version'] == '38':
+ fname_qa_cc = 'qa_{}.cc'.format(self._info['blockname'])
+ cmake.comment_out_lines(fname_qa_cc)
elif self._info['version'] == '36':
cmake.comment_out_lines('add_executable.*'+fname)
cmake.comment_out_lines('target_link_libraries.*'+os.path.splitext(fname)[0])
@@ -99,7 +102,7 @@ class ModToolDisable(ModTool):
print("Changing %s..." % self._file['swig'])
if nsubs > 1: # Need to find a single BLOCK_MAGIC
blockname = os.path.splitext(fname[len(self._info['modname'])+1:])[0]
- if self._info['version'] == '37':
+ if self._info['version'] in ('37', '38'):
blockname = os.path.splitext(fname)[0]
(swigfile, nsubs) = re.subn('(GR_SWIG_BLOCK_MAGIC2?.+%s.+;)' % blockname, r'//\1', swigfile)
if nsubs > 1:
@@ -112,7 +115,7 @@ class ModToolDisable(ModTool):
as well as the block magic """
swigfile = open(self._file['swig']).read()
blockname = os.path.splitext(fname[len(self._info['modname'])+1:])[0]
- if self._info['version'] == '37':
+ if self._info['version'] in ('37', '38'):
blockname = os.path.splitext(fname)[0]
swigfile = re.sub('(%include\s+"'+fname+'")', r'//\1', swigfile)
print("Changing %s..." % self._file['swig'])
@@ -133,7 +136,7 @@ class ModToolDisable(ModTool):
for subdir in self._subdirs:
if self._skip_subdirs[subdir]:
continue
- if self._info['version'] == '37' and subdir == 'include':
+ if self._info['version'] in ('37', '38') and subdir == 'include':
subdir = 'include/%s' % self._info['modname']
try:
cmake = CMakeFileEditor(os.path.join(subdir, 'CMakeLists.txt'))
diff --git a/gr-utils/python/modtool/modtool_info.py b/gr-utils/python/modtool/modtool_info.py
index bae6df36ed..2952a9c572 100644
--- a/gr-utils/python/modtool/modtool_info.py
+++ b/gr-utils/python/modtool/modtool_info.py
@@ -151,6 +151,7 @@ class ModToolInfo(ModTool):
print(" API version: %s" % {
'36': 'pre-3.7',
'37': 'post-3.7',
+ '38': 'post-3.8',
'autofoo': 'Autotools (pre-3.5)'
}[mod_info['version']])
else:
diff --git a/gr-utils/python/modtool/modtool_makexml.py b/gr-utils/python/modtool/modtool_makexml.py
index 90308d1b14..a6c4110f80 100644
--- a/gr-utils/python/modtool/modtool_makexml.py
+++ b/gr-utils/python/modtool/modtool_makexml.py
@@ -68,7 +68,7 @@ class ModToolMakeXML(ModTool):
self.setup(options)
# 1) Go through lib/
if not self._skip_subdirs['lib']:
- if self._info['version'] == '37':
+ if self._info['version'] in ('37', '38'):
files = self._search_files('lib', '*_impl.cc')
else:
files = self._search_files('lib', '*.cc')
diff --git a/gr-utils/python/modtool/modtool_rm.py b/gr-utils/python/modtool/modtool_rm.py
index 7395c99bea..55598a5090 100644
--- a/gr-utils/python/modtool/modtool_rm.py
+++ b/gr-utils/python/modtool/modtool_rm.py
@@ -80,6 +80,13 @@ class ModToolRemove(ModTool):
r'\$\{CMAKE_CURRENT_SOURCE_DIR\}/%s' % filename,
to_ignore_start='APPEND test_%s_sources' % self._info['modname'])
self.scm.mark_file_updated(ed.filename)
+ elif self._info['version'] == '38':
+ (base, ext) = os.path.splitext(filename)
+ if ext == '.cc':
+ ed.remove_value(
+ 'list', filename,
+ to_ignore_start='APPEND test_%s_sources' % self._info['modname'])
+ self.scm.mark_file_updated(ed.filename)
else:
filebase = os.path.splitext(filename)[0]
ed.delete_entry('add_executable', filebase)
diff --git a/gr-utils/python/modtool/parser_cc_block.py b/gr-utils/python/modtool/parser_cc_block.py
index fffdf309d8..dd5bbb6be7 100644
--- a/gr-utils/python/modtool/parser_cc_block.py
+++ b/gr-utils/python/modtool/parser_cc_block.py
@@ -209,7 +209,7 @@ class ParserCCBlock(object):
continue
return param_list
# Go, go, go!
- if self.version == '37':
+ if self.version in ('37', '38'):
make_regex = 'static\s+sptr\s+make\s*'
else:
make_regex = '(?<=_API)\s+\w+_sptr\s+\w+_make_\w+\s*'
diff --git a/gr-utils/python/modtool/templates.py b/gr-utils/python/modtool/templates.py
index 10ee4a4e6c..420b7c63b5 100644
--- a/gr-utils/python/modtool/templates.py
+++ b/gr-utils/python/modtool/templates.py
@@ -1,5 +1,5 @@
#
-# Copyright 2013-2014 Free Software Foundation, Inc.
+# Copyright 2013-2014,2018 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -442,6 +442,25 @@ class ${blockname}(${parenttype}):
'''
+# C++ file for QA (Boost UTF style)
+Templates['qa_cpp_boostutf'] = '''/* -*- c++ -*- */
+${str_to_fancyc_comment(license)}
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <${include_dir_prefix}/${blockname}.h>
+#include <gnuradio/attributes.h>
+#include <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_CASE(test_${blockname}_t1)
+{
+ // Put test here
+}
+
+'''
+
# C++ file for QA
Templates['qa_cpp'] = '''/* -*- c++ -*- */
${str_to_fancyc_comment(license)}