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

Reply via email to