Revision: 75803
http://sourceforge.net/p/brlcad/code/75803
Author: starseeker
Date: 2020-05-14 20:05:14 +0000 (Thu, 14 May 2020)
Log Message:
-----------
FreeBSD doesn't like this as well for some reason - VCS has it to revisit
later, but need to finish other aspects of getting this ready so for now back
it up to the fastest working state overall.
Modified Paths:
--------------
brlcad/trunk/regress/repository/repocheck.cpp
Modified: brlcad/trunk/regress/repository/repocheck.cpp
===================================================================
--- brlcad/trunk/regress/repository/repocheck.cpp 2020-05-14 18:26:52 UTC
(rev 75802)
+++ brlcad/trunk/regress/repository/repocheck.cpp 2020-05-14 20:05:14 UTC
(rev 75803)
@@ -92,7 +92,7 @@
// Outputs
std::vector<std::string> api_log;
std::vector<std::string> bio_log;
- std::vector<std::string> bnetwork_log;
+ std::vector<std::string> bnet_log;
std::vector<std::string> common_log;
std::vector<std::string> symbol_inc_log;
std::vector<std::string> symbol_src_log;
@@ -250,21 +250,8 @@
}
}
-int pos_to_line_num(const char *buff, size_t pos)
-{
- int line_cnt = 1;
- size_t offset = 0;
- while (offset < pos) {
- const char *b = &buff[offset+1];
- const char *l = strchr(b, '\n');
- offset = (int)(l - buff);
- if (offset < pos) {
- line_cnt++;
- }
- }
- return line_cnt;
-}
+
int
bio_redundant_check(repo_info_t &r, std::vector<std::string> &srcs)
{
@@ -271,42 +258,48 @@
int ret = 0;
for (size_t i = 0; i < srcs.size(); i++) {
- bool have_bio = false;
- size_t bio_line = 0;
+ std::string sline;
+
std::map<std::string, std::set<int>> match_line_nums;
+
struct bu_mapped_file *ifile = bu_open_mapped_file(srcs[i].c_str(),
"bio.h candidate file");
if (!ifile) {
std::cerr << "Unable to open " << srcs[i] << " for reading,
skipping\n";
continue;
}
-
- const char *cline = (const char *)ifile->buf;
// If we have anything in the buffer that looks like it might be
// of interest, continue - otherwise we're done
- if (!std::strstr(cline, "bio.h")) {
+ if (!std::strstr((const char *)ifile->buf, "bio.h")) {
+ bu_close_mapped_file(ifile);
continue;
}
- // Look first for bio.h, then if found for other headers
- std::cmatch biovar;
- if (std::regex_search(cline, biovar, r.bio_regex)) {
- have_bio = true;
- bio_line = pos_to_line_num(cline, biovar.position());
+ std::string fbuff((char *)ifile->buf);
+ std::istringstream fs(fbuff);
- // We have bio.h, check for things that shouldn't be there
- std::cmatch cvar;
+ int lcnt = 0;
+ bool have_bio = false;
+ while (std::getline(fs, sline) && lcnt < MAX_LINES_CHECK) {
+ lcnt++;
+
+ if (!std::strstr(sline.c_str(), "include")) {
+ // If this isn't an include line, it's not of interest
+ continue;
+ }
+
+ if (std::strstr(sline.c_str(), "bio.h") && std::regex_match(sline,
r.bio_regex)) {
+ have_bio = true;
+ continue;
+ }
+
std::map<std::string, std::regex>::iterator f_it;
- for (f_it = r.bnetwork_filters.begin(); f_it !=
r.bnetwork_filters.end(); f_it++) {
- if (!std::strstr(cline, f_it->first.c_str())) {
+ for (f_it = r.bio_filters.begin(); f_it != r.bio_filters.end();
f_it++) {
+ if (std::regex_match(sline, f_it->second)) {
+ match_line_nums[f_it->first].insert(lcnt);
continue;
}
- if (std::regex_search(cline, cvar, f_it->second)) {
- size_t inc_line = pos_to_line_num(cline, cvar.position());
- match_line_nums[f_it->first].insert(inc_line);
- continue;
- }
}
}
@@ -319,7 +312,7 @@
std::set<int>::iterator l_it;
ret = 1;
for (l_it = m_it->second.begin(); l_it !=
m_it->second.end(); l_it++) {
- std::string lstr =
srcs[i].substr(r.path_root.length()+1) + std::string(" includes bio.h on line
") + std::to_string(bio_line) + std::string(", but also includes ") +
m_it->first + std::string(" on line ") + std::to_string(*l_it) +
std::string("\n");
+ std::string lstr =
srcs[i].substr(r.path_root.length()+1) + std::string(" has bio.h, but also
includes ") + m_it->first + std::string(" on line ") + std::to_string(*l_it) +
std::string("\n");
r.bio_log.push_back(lstr);
}
}
@@ -330,6 +323,7 @@
return ret;
}
+
int
bnetwork_redundant_check(repo_info_t &r, std::vector<std::string> &srcs)
{
@@ -336,42 +330,47 @@
int ret = 0;
for (size_t i = 0; i < srcs.size(); i++) {
- bool have_bnetwork = false;
- size_t bnetwork_line = 0;
+ std::string sline;
+
std::map<std::string, std::set<int>> match_line_nums;
- struct bu_mapped_file *ifile = bu_open_mapped_file(srcs[i].c_str(),
"bnetwork.h candidate file");
+ struct bu_mapped_file *ifile = bu_open_mapped_file(srcs[i].c_str(),
"bio.h candidate file");
if (!ifile) {
std::cerr << "Unable to open " << srcs[i] << " for reading,
skipping\n";
continue;
}
-
- const char *cline = (const char *)ifile->buf;
// If we have anything in the buffer that looks like it might be
// of interest, continue - otherwise we're done
- if (!std::strstr(cline, "bnetwork.h")) {
+ if (!std::strstr((const char *)ifile->buf, "bnetwork.h")) {
+ bu_close_mapped_file(ifile);
continue;
}
- // Look first for bnetwork.h, then if found for other headers
- std::cmatch bnetworkvar;
- if (std::regex_search(cline, bnetworkvar, r.bnetwork_regex)) {
- have_bnetwork = true;
- bnetwork_line = pos_to_line_num(cline, bnetworkvar.position());
+ std::string fbuff((char *)ifile->buf);
+ std::istringstream fs(fbuff);
- // We have bnetwork.h, check for things that shouldn't be there
- std::cmatch cvar;
+ int lcnt = 0;
+ bool have_bnetwork = false;
+ while (std::getline(fs, sline) && lcnt < MAX_LINES_CHECK) {
+ lcnt++;
+
+ if (!std::strstr(sline.c_str(), "include")) {
+ // If this isn't an include line, it's not of interest
+ continue;
+ }
+
+ if (std::regex_match(sline, r.bnetwork_regex)) {
+ have_bnetwork = true;
+ continue;
+ }
+
std::map<std::string, std::regex>::iterator f_it;
for (f_it = r.bnetwork_filters.begin(); f_it !=
r.bnetwork_filters.end(); f_it++) {
- if (!std::strstr(cline, f_it->first.c_str())) {
+ if (std::regex_match(sline, f_it->second)) {
+ match_line_nums[f_it->first].insert(lcnt);
continue;
}
- if (std::regex_search(cline, cvar, f_it->second)) {
- size_t inc_line = pos_to_line_num(cline, cvar.position());
- match_line_nums[f_it->first].insert(inc_line);
- continue;
- }
}
}
@@ -384,8 +383,8 @@
std::set<int>::iterator l_it;
ret = 1;
for (l_it = m_it->second.begin(); l_it !=
m_it->second.end(); l_it++) {
- std::string lstr =
srcs[i].substr(r.path_root.length()+1) + std::string(" includes bnetwork.h on
line ") + std::to_string(bnetwork_line) + std::string(", but also includes ") +
m_it->first + std::string(" on line ") + std::to_string(*l_it) +
std::string("\n");
- r.bnetwork_log.push_back(lstr);
+ std::string lstr =
srcs[i].substr(r.path_root.length()+1) + std::string(" has bnetwork.h, but also
includes ") + m_it->first + std::string(" on line ") + std::to_string(*l_it) +
std::string("\n");
+ r.bnet_log.push_back(lstr);
}
}
}
@@ -395,6 +394,7 @@
return ret;
}
+
int
common_include_first(repo_info_t &r, std::vector<std::string> &srcs)
{
@@ -412,42 +412,46 @@
continue;
}
-
struct bu_mapped_file *ifile = bu_open_mapped_file(srcs[i].c_str(),
"bio.h candidate file");
if (!ifile) {
std::cerr << "Unable to open " << srcs[i] << " for reading,
skipping\n";
continue;
}
-
- const char *cline = (const char *)ifile->buf;
// If we have anything in the buffer that looks like it might be
// of interest, continue - otherwise we're done
- if (!std::strstr(cline, "common.h")) {
+ if (!std::strstr((const char *)ifile->buf, "common.h")) {
+ bu_close_mapped_file(ifile);
continue;
}
- // Look first for common.h, then if found for other headers
- std::cmatch commonvar;
- if (std::regex_search(cline, commonvar, r.common_regex)) {
- size_t common_pos = commonvar.position();
- // We have common.h, check for other headers positioned before
common.h
- std::cmatch cvar;
- if (std::regex_search(cline, cvar, r.inc_regex)) {
- size_t inc_pos = cvar.position();
- if (inc_pos < common_pos) {
- size_t common_line = pos_to_line_num(cline, common_pos);
- size_t inc_line = pos_to_line_num(cline, inc_pos);
- std::string lstr = srcs[i].substr(r.path_root.length()+1) +
std::string(" includes common.h on line ") + std::to_string(common_line) +
std::string(" but a prior #include statement was found at line ") +
std::to_string(inc_line) + std::string("\n");
+ std::string fbuff((char *)ifile->buf);
+ std::istringstream fs(fbuff);
+
+ int lcnt = 0;
+ int first_inc_line = -1;
+ bool have_inc = false;
+ std::string sline;
+ while (std::getline(fs, sline) && lcnt < MAX_LINES_CHECK) {
+ lcnt++;
+ if (std::regex_match(sline, r.common_regex)) {
+ if (have_inc) {
+ std::string lstr = srcs[i].substr(r.path_root.length()+1) +
std::string(" includes common.h on line ") + std::to_string(lcnt) +
std::string(" but a prior #include statement was found at line ") +
std::to_string(first_inc_line) + std::string("\n");
r.common_log.push_back(lstr);
ret = 1;
}
+ break;
}
+ if (!have_inc && std::regex_match(sline, r.inc_regex)) {
+ have_inc = true;
+ first_inc_line = lcnt;
+ }
}
bu_close_mapped_file(ifile);
}
+
return ret;
}
@@ -688,7 +692,6 @@
ret += bnetwork_redundant_check(repo_info, inc_files);
ret += bnetwork_redundant_check(repo_info, src_files);
ret += common_include_first(repo_info, src_files);
-#if 1
ret += api_usage(repo_info, src_files);
int h_cnt = platform_symbols(repo_info, repo_info.symbol_inc_log,
inc_files);
@@ -700,12 +703,11 @@
std::cout << "FAILURE: expected " << expected_psym_cnt << " platform
symbols, found " << psym_cnt << "\n";
ret = 1;
}
-#endif
if (ret) {
std::sort(repo_info.api_log.begin(), repo_info.api_log.end());
std::sort(repo_info.bio_log.begin(), repo_info.bio_log.end());
- std::sort(repo_info.bnetwork_log.begin(), repo_info.bnetwork_log.end());
+ std::sort(repo_info.bnet_log.begin(), repo_info.bnet_log.end());
std::sort(repo_info.common_log.begin(), repo_info.common_log.end());
std::sort(repo_info.symbol_inc_log.begin(),
repo_info.symbol_inc_log.end());
std::sort(repo_info.symbol_src_log.begin(),
repo_info.symbol_src_log.end());
@@ -723,10 +725,10 @@
std::cout << repo_info.bio_log[i];
}
}
- if (repo_info.bnetwork_log.size()) {
- std::cout << "\nFound " << repo_info.bnetwork_log.size() << "
instances of redundant header inclusions in files using bnetwork.h:\n";
- for (size_t i = 0; i < repo_info.bnetwork_log.size(); i++) {
- std::cout << repo_info.bnetwork_log[i];
+ if (repo_info.bnet_log.size()) {
+ std::cout << "\nFound " << repo_info.bnet_log.size() << " instances
of redundant header inclusions in files using bnetwork.h:\n";
+ for (size_t i = 0; i < repo_info.bnet_log.size(); i++) {
+ std::cout << repo_info.bnet_log[i];
}
}
if (repo_info.common_log.size()) {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits