Use LTTngUSTLogger logger plugin in logtest regression test
[deliverable/titan.core.git] / compiler2 / ProjectGenHelper.hh
1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright (c) 2000-2015 Ericsson Telecom AB
3 // All rights reserved. This program and the accompanying materials
4 // are made available under the terms of the Eclipse Public License v1.0
5 // which accompanies this distribution, and is available at
6 // http://www.eclipse.org/legal/epl-v10.html
7 ///////////////////////////////////////////////////////////////////////////////
8 #ifndef _LIB_GEN_HELPER_HH
9 #define _LIB_GEN_HELPER_HH
10 #include <string>
11 #include <map>
12 #include <vector>
13 #include <cstdio>
14 class ProjectGenHelper;
15 class ProjectDescriptor {
16 public:
17 explicit ProjectDescriptor(const char* name);
18 ~ProjectDescriptor() { cleanUp(); };
19
20 const std::string& getProjectName() const { return projectName; }
21 void setTPDFileName( const char* name);
22 const std::string& getTPDFileName() const { return tpdFileName; }
23 void setTargetExecName(const char* name) { targetExecutableName = std::string(name); }
24 const std::string& getTargetExecName() const { return targetExecutableName; }
25 void setProjectAbsTpdDir(const char* name) { projectAbsTpdDir = std::string(name); }
26 const std::string& getProjectAbsTpdDir() const { return projectAbsTpdDir; }
27 void setProjectAbsWorkingDir(const char* name);
28 void setProjectWorkingDir(const char* name) { projectWorkingDir = std::string(name); }
29 const std::string& getProjectAbsWorkingDir() const { return projectAbsWorkingDir; }
30 const std::string& getProjectWorkingDir() const { return projectWorkingDir; }
31 void setLinkingStrategy(bool strategy) { dynamicLinked = strategy; }
32 bool getLinkingStrategy() const { return dynamicLinked; }
33 void setLibrary(bool isLib) { library = isLib; }
34 bool isLibrary() const { return library; }
35 bool isInitialized();
36 void addToReferencedProjects(const char* refProjName);
37 void addToRefProjWorkingDirs(const std::string& subProjDir);
38 bool hasLinkerLibTo(const std::string& refProjName) const;
39 bool hasLinkerLib(const char* libName) const; // Linker Lib got from TPD
40 void addToLibSearchPaths(const char* libSearchPath);
41 void addToLinkerLibs(const char* linkerLibs);
42 void print();
43 void cleanUp();
44 size_t numOfReferencedProjects() const { return referencedProjects.size(); };
45 size_t numOfRefProjWorkingDirs() const { return refProjWorkingDirs.size(); };
46 size_t numOfLibSearchPaths() const { return libSearchPaths.size(); };
47 size_t numOfLinkerLibs() const { return linkerLibraries.size(); };
48 const std::string& getReferencedProject(size_t index) const
49 { return index < referencedProjects.size() ? referencedProjects[index] : emptyString; };
50 const std::string& getRefProjWorkingDir(size_t index) const
51 { return index < refProjWorkingDirs.size() ? refProjWorkingDirs[index] : emptyString; };
52 const char* getLibSearchPath(const std::string& subProjName) const;
53 const char* getLibSearchPath(size_t index) const { return libSearchPaths[index].c_str(); };
54 const char* getLinkerLib(const std::string& subProjName) const;
55 const char* getLinkerLib(size_t index) const { return linkerLibraries[index].c_str(); };
56 size_t getLibSearchPathIndex(const std::string& subProjName) const;
57 void setLibSearchPath(size_t index, const std::string& relPath) { libSearchPaths[index] = relPath; };
58 void addTtcn3ModuleName(const char* name) { ttcn3ModuleNames.push_back(name); };
59 bool hasTtcn3ModuleName(const char* moduleName) const;
60 void addAsn1ModuleName(const char* name) { asn1ModuleNames.push_back(name); };
61 bool hasAsn1ModuleName(const char* moduleName) const;
62 void addUserSource(const char* name) { userSources.push_back(name); };
63 bool hasUserSource(const char* userSourceName) const;
64 void addUserHeader(const char* name) { userHeaders.push_back(name); };
65 bool hasUserHeader(const char* userHeaderName) const;
66 void addTtcn3PP(const char* name) { ttcnPP.push_back(name); };
67 bool hasTtcn3PP(const char* ttcnPPName) const;
68 std::string setRelativePathTo(const std::string& absPathTo);
69
70 private:
71 static const std::string emptyString;
72 std::string projectName;
73 std::string tpdFileName;
74 std::string targetExecutableName; //Library or Executable(only the top level)
75 std::string projectAbsTpdDir;
76 std::string projectAbsWorkingDir;
77 std::string projectWorkingDir;
78 bool library;
79 bool dynamicLinked;
80 std::vector<std::string> referencedProjects;
81 std::vector<std::string> refProjWorkingDirs;
82 std::vector<std::string> libSearchPaths;
83 std::vector<std::string> linkerLibraries;
84 std::vector<std::string> ttcn3ModuleNames;
85 std::vector<std::string> asn1ModuleNames;
86 std::vector<std::string> userSources; // *.cc ; *.cpp
87 std::vector<std::string> userHeaders; // *.hh ; *.h ; *.hpp
88 std::vector<std::string> ttcnPP; // *.ttcnpp
89 bool initialized;
90 };
91
92 class ProjectGenHelper {
93 public:
94 static ProjectGenHelper &Instance();
95 ~ProjectGenHelper() { cleanUp(); };
96 void setZflag(bool flag) { Zflag = flag; };
97 bool getZflag() const { return Zflag; };
98 void setWflag(bool flag) { Wflag = flag; };
99 bool getWflag() const { return Wflag; };
100 void setHflag(bool flag) { Hflag = flag; };
101 bool getHflag() const { return Hflag; };
102 void setToplevelProjectName(const char* name);
103 const std::string& getToplevelProjectName() const { return nameOfTopLevelProject; };
104 void setRootDirOS(const char* name);
105 const std::string& getRootDirOS(const char* name);
106 void addTarget(const char* projName);
107 void generateRefProjectWorkingDirsTo(const char* projName);
108 void addTtcn3ModuleToProject(const char* projName, const char* moduleName);
109 void addAsn1ModuleToProject(const char* projName, const char* moduleName);
110 void addUserSourceToProject(const char* projName, const char* userSourceName);
111 void addUserHeaderToProject(const char* projName, const char* userHeaderName);
112 void addTtcnPPToProject(const char* projName, const char* ttcnPPName);
113 bool isTtcn3ModuleInLibrary(const char* moduleName) const;
114 bool isAsn1ModuleInLibrary(const char* moduleName) const;
115 bool isSourceFileInLibrary(const char* fileName) const;
116 bool isHeaderFileInLibrary(const char* fileName) const;
117 bool isTtcnPPFileInLibrary(const char* fileName) const;
118 ProjectDescriptor* getTargetOfProject(const char* projName);
119 const ProjectDescriptor* getTargetOfProject(const char* projName) const;
120 ProjectDescriptor* getProjectDescriptor(const char* targetName); //target_executable_name
121 std::map<std::string, ProjectDescriptor>::const_iterator getHead() const;
122 std::map<std::string, ProjectDescriptor>::const_iterator getEnd() const;
123 size_t numOfLibs() const;
124 void getExternalLibs(std::vector<const char*>& extLibs);
125 void getExternalLibSearchPaths(std::vector<const char*>& extLibPaths);
126 bool hasReferencedProject();
127 size_t numOfProjects() const { return projs.size();};
128 bool isCPPSourceFile(const char* fileName) const;
129 bool isCPPHeaderFile(const char* fileName) const;
130 bool isTtcnPPFile(const char* fileName) const;
131 void print();
132 bool sanityCheck(); // tests if the structure generated from TPDs is consistent
133 void cleanUp();
134
135 private:
136 ProjectGenHelper();
137 ProjectGenHelper(const ProjectGenHelper &rhs);
138 ProjectGenHelper &operator=(const ProjectGenHelper &rhs);
139 ProjectDescriptor* getProject(const char* projName);
140 const ProjectDescriptor* getProject(const char* projName) const;
141 bool DynamicLibraryChecker(const ProjectDescriptor* desc,
142 bool& found,
143 char** executableName);
144 private:
145 static ProjectGenHelper& intance;
146 static const std::string emptyString;
147 std::string nameOfTopLevelProject;
148 std::string rootDirOS; // make archive needs the top dir on OS level
149 std::string relPathToRootDirOS;
150 bool Zflag; // the makefilegen switch wether to use this option at all
151 bool Wflag; // prefix woring directory
152 bool Hflag; // hierarchical make structure
153 std::map<const std::string, ProjectDescriptor> projs;
154 std::map<const std::string, const ProjectDescriptor*> checkedProjs;
155 };
156
157 #endif // _LIB_GEN_HELPER_HH
This page took 0.04248 seconds and 5 git commands to generate.