1 /* $Id: proj_datatool_generated_src.cpp 465020 2015-04-16 13:02:58Z gouriano $
2  * ===========================================================================
3  *
4  *                            PUBLIC DOMAIN NOTICE
5  *               National Center for Biotechnology Information
6  *
7  *  This software/database is a "United States Government Work" under the
8  *  terms of the United States Copyright Act.  It was written as part of
9  *  the author's official duties as a United States Government employee and
10  *  thus cannot be copyrighted.  This software/database is freely available
11  *  to the public for use. The National Library of Medicine and the U.S.
12  *  Government have not placed any restriction on its use or reproduction.
13  *
14  *  Although all reasonable efforts have been taken to ensure the accuracy
15  *  and reliability of the software and data, the NLM and the U.S.
16  *  Government do not and cannot warrant the performance or results that
17  *  may be obtained by using this software or data. The NLM and the U.S.
18  *  Government disclaim all warranties, express or implied, including
19  *  warranties of performance, merchantability or fitness for any particular
20  *  purpose.
21  *
22  *  Please cite the author in any work or product based on this material.
23  *
24  * ===========================================================================
25  *
26  * Author:  Viatcheslav Gorelenkov
27  *
28  */
29 
30 #include <ncbi_pch.hpp>
31 #include "proj_datatool_generated_src.hpp"
32 #include "file_contents.hpp"
33 #include "proj_builder_app.hpp"
34 #include "ptb_err_codes.hpp"
35 
36 
37 BEGIN_NCBI_SCOPE
38 
39 
CDataToolGeneratedSrc(void)40 CDataToolGeneratedSrc::CDataToolGeneratedSrc(void)
41 {
42 }
43 
44 
CDataToolGeneratedSrc(const string & source_file_path)45 CDataToolGeneratedSrc::CDataToolGeneratedSrc(const string& source_file_path)
46 {
47     LoadFrom(source_file_path, this);
48 }
49 
50 
CDataToolGeneratedSrc(const CDataToolGeneratedSrc & src)51 CDataToolGeneratedSrc::CDataToolGeneratedSrc(const CDataToolGeneratedSrc& src)
52 {
53     SetFrom(src);
54 }
55 
56 
57 CDataToolGeneratedSrc&
operator =(const CDataToolGeneratedSrc & src)58 CDataToolGeneratedSrc::operator= (const CDataToolGeneratedSrc& src)
59 {
60     if(this != &src)
61     {
62         SetFrom(src);
63     }
64     return *this;
65 }
66 
67 
~CDataToolGeneratedSrc(void)68 CDataToolGeneratedSrc::~CDataToolGeneratedSrc(void)
69 {
70 }
71 
72 
operator ==(const CDataToolGeneratedSrc & src) const73 bool CDataToolGeneratedSrc::operator== (const CDataToolGeneratedSrc& src) const
74 {
75 
76     return  m_SourceFile        == src.m_SourceFile    &&
77             m_SourceBaseDir     == src.m_SourceBaseDir &&
78             m_ImportModules     == src.m_ImportModules ;
79 }
80 
81 
operator <(const CDataToolGeneratedSrc & src) const82 bool CDataToolGeneratedSrc::operator<  (const CDataToolGeneratedSrc& src) const
83 {
84     if (m_SourceFile < src.m_SourceFile)
85         return true;
86     else if (m_SourceFile > src.m_SourceFile)
87         return false;
88     else {
89         if (m_SourceBaseDir < src.m_SourceBaseDir)
90             return true;
91         else if (m_SourceBaseDir > src.m_SourceBaseDir)
92             return false;
93         else {
94             return m_ImportModules < src.m_ImportModules;
95         }
96     }
97 }
98 
99 
LoadFrom(const string & source_file_path,CDataToolGeneratedSrc * src)100 void CDataToolGeneratedSrc::LoadFrom(const string&          source_file_path,
101                                      CDataToolGeneratedSrc* src)
102 {
103     src->Clear();
104 
105     string dir;
106     string base;
107     string ext;
108     CDirEntry::SplitPath(source_file_path, &dir, &base, &ext);
109 
110     src->m_SourceBaseDir = dir;
111     src->m_SourceCPP     = base;
112     src->m_SourceFile    = base + ext;
113 
114     {{
115         // module file
116         string module_path = CDirEntry::ConcatPath(dir,
117                                                   base + ".module");
118         if ( CDirEntry(module_path).Exists() ) {
119             CSimpleMakeFileContents fc(module_path, eMakeType_Undefined);
120             CSimpleMakeFileContents::TContents::const_iterator p =
121                 fc.m_Contents.find("MODULE_IMPORT");
122             if (p != fc.m_Contents.end()) {
123                 const list<string>& modules = p->second;
124                 ITERATE(list<string>, p, modules) {
125                     // add ext from source file to all modules to import
126                     const string& module = *p;
127                     src->m_ImportModules.push_back
128                                         (CDirEntry::NormalizePath(module + ext));
129                 }
130             }
131         } else {
132 //            PTB_INFO_EX(module_path, ePTB_FileNotFound,
133 //                        "Datatool module file not found");
134         }
135     }}
136 
137     {{
138         // files file
139         string files_path = CDirEntry::ConcatPath(dir,
140                                                   base + ".files");
141 
142         if ( CDirEntry(files_path).Exists() ) {
143 
144             CSimpleMakeFileContents fc(files_path, eMakeType_Undefined);
145 
146             // GENERATED_HPP
147             CSimpleMakeFileContents::TContents::const_iterator p =
148                 fc.m_Contents.find("GENERATED_HPP");
149             if (p != fc.m_Contents.end())
150                 src->m_GeneratedHpp = p->second;
151 
152             // GENERATED_CPP
153             p = fc.m_Contents.find("GENERATED_CPP");
154             if (p != fc.m_Contents.end())
155                 src->m_GeneratedCpp = p->second;
156 
157             // GENERATED_HPP_LOCAL
158             p = fc.m_Contents.find("GENERATED_HPP_LOCAL");
159             if (p != fc.m_Contents.end())
160                 src->m_GeneratedHppLocal = p->second;
161 
162             // GENERATED_CPP_LOCAL
163             p = fc.m_Contents.find("GENERATED_CPP_LOCAL");
164             if (p != fc.m_Contents.end())
165                 src->m_GeneratedCppLocal = p->second;
166 
167             // SKIPPED_HPP
168             p = fc.m_Contents.find("SKIPPED_HPP");
169             if (p != fc.m_Contents.end())
170                 src->m_SkippedHpp = p->second;
171 
172             // SKIPPED_CPP
173             p = fc.m_Contents.find("SKIPPED_CPP");
174             if (p != fc.m_Contents.end())
175                 src->m_SkippedCpp = p->second;
176 
177             // SKIPPED_HPP_LOCAL
178             p = fc.m_Contents.find("SKIPPED_HPP_LOCAL");
179             if (p != fc.m_Contents.end())
180                 src->m_SkippedHppLocal = p->second;
181 
182             // SKIPPED_CPP_LOCAL
183             p = fc.m_Contents.find("SKIPPED_CPP_LOCAL");
184             if (p != fc.m_Contents.end())
185                 src->m_SkippedCppLocal = p->second;
186         } else {
187 //            PTB_INFO_EX(files_path, ePTB_FileNotFound,
188 //                        "Datatool-generated file not found");
189         }
190 
191 
192     }}
193 
194 }
195 
196 
IsEmpty(void) const197 bool CDataToolGeneratedSrc::IsEmpty(void) const
198 {
199     return m_SourceFile.empty();
200 }
201 
202 
Clear(void)203 void CDataToolGeneratedSrc::Clear(void)
204 {
205     m_SourceFile.erase();
206     m_SourceCPP.erase();
207     m_SourceBaseDir.erase();
208     m_ImportModules.clear();
209 
210     m_GeneratedHpp.clear();
211     m_GeneratedCpp.clear();
212     m_GeneratedHppLocal.clear();
213     m_GeneratedCppLocal.clear();
214     m_SkippedHpp.clear();
215     m_SkippedCpp.clear();
216     m_SkippedHppLocal.clear();
217     m_SkippedCppLocal.clear();
218 }
219 
220 
SetFrom(const CDataToolGeneratedSrc & src)221 void CDataToolGeneratedSrc::SetFrom(const CDataToolGeneratedSrc& src)
222 {
223     m_SourceFile        = src.m_SourceFile;
224     m_SourceCPP         = src.m_SourceCPP;
225     m_SourceBaseDir     = src.m_SourceBaseDir;
226     m_ImportModules     = src.m_ImportModules;
227 
228     m_GeneratedHpp      = src.m_GeneratedHpp;
229     m_GeneratedCpp      = src.m_GeneratedCpp;
230     m_GeneratedHppLocal = src.m_GeneratedHppLocal;
231     m_GeneratedCppLocal = src.m_GeneratedCppLocal;
232     m_SkippedHpp        = src.m_SkippedHpp;
233     m_SkippedCpp        = src.m_SkippedCpp;
234     m_SkippedHppLocal   = src.m_SkippedHppLocal;
235     m_SkippedCppLocal   = src.m_SkippedCppLocal;
236 }
237 
238 
239 
240 
241 END_NCBI_SCOPE
242