source: CMT/v1r19/source/cmt_generator.h @ 1

Last change on this file since 1 was 1, checked in by arnault, 19 years ago

Import all tags

File size: 4.7 KB
Line 
1//-----------------------------------------------------------
2// Copyright Christian Arnault LAL-Orsay CNRS
3// arnault@lal.in2p3.fr
4// See the complete license in cmt_license.txt "http://www.cecill.info".
5//-----------------------------------------------------------
6
7#ifndef __cmt_generator_h__
8#define __cmt_generator_h__
9
10#include "cmt_parser.h"
11#include "cmt_constituent.h"
12#include "cmt_language.h"
13#include "cmt_awk.h"
14#include "cmt_deps_builder.h"
15
16class Packager : public FAwk
17{
18public:
19  void begin ();
20  void filter (const cmt_string& line);
21  cmt_string& package_name ();
22private:
23  cmt_string m_package_name;
24};
25
26class SourceFile
27{
28public:
29  void set (const cmt_string name, Language& language, const cmt_string output);
30  cmt_string name () const;
31  Language& language () const;
32  cmt_string output () const;
33
34private:
35  cmt_string m_name;
36  Language* m_language;
37  cmt_string m_output;
38};
39
40/**
41   Base class for all specific generators.
42   The Generator command driver will operate on specialized classes of CmtGenerator
43*/
44class CmtGenerator
45{
46public:
47
48  CmtGenerator ();
49
50  void reset ();
51  bool prepare_output (const cmt_string& package,
52                       const Constituent& constituent);
53  void commit (const cmt_string& name);
54  static void check (const cmt_string& name);
55  void terminate ();
56
57  void fill_outputs ();
58
59  void prepare_use_context ();
60
61  void set_full_name (cmt_string& full_name, cmt_string& file);
62  void filter_path (cmt_string& text);
63  int get_all_files (const cmt_string& full_name,
64                     const cmt_vector<cmt_regexp>& exclude_exprs, 
65                     const cmt_vector<cmt_regexp>& select_exprs, 
66                     CmtSystem::cmt_string_vector& files);
67
68
69public:
70  cmt_string m_PACKINCLUDES;
71  bool m_PACKOS9;
72
73  cmt_string m_GENERATOR;
74
75  bool is_library;
76  bool is_application;
77
78  cmt_string srcdir;
79  cmt_string docdir;
80  cmt_string cmtdir;
81  cmt_string incdir;
82  cmt_string src;
83  cmt_string doc;
84  cmt_string inc;
85  cmt_string mgr;
86  cmt_string cmt;
87  cmt_string protos;
88  cmt_string protonames;
89  cmt_string os9sources;
90
91  cmt_vector<SourceFile> m_source_files;
92
93  cmt_string m_bin;
94  cmt_string m_output_file_name;
95  FILE* m_output_file;
96
97  DepsBuilder m_deps_builder;
98
99  Constituent* m_constituent;
100
101  Variable m_CONSTITUENT;
102  Variable m_LINKMACRO;
103  Variable m_DOCPATH;
104  Variable m_PACKAGEPATH;
105  Variable m_PACKAGEPREFIX;
106  Variable m_PACKAGE;
107  Variable m_VERSION;
108  Variable m_MGRSTYLE;
109  Variable m_TITLE;
110  Variable m_GROUP;
111  Variable m_CONSTITUENTSUFFIX;
112  Variable m_LIBRARYSUFFIX;
113  Variable m_USER;
114  Variable m_DATE;
115  Variable m_PROTOTARGET;
116  Variable m_OBJS;
117  Variable m_CLASSES;
118  Variable m_PROTOSTAMPS;
119  Variable m_NAME;
120  Variable m_FILEPATH;
121  Variable m_FILESUFFIX;
122  Variable m_SUFFIX;
123  Variable m_FILENAME;
124  Variable m_LINE;
125  Variable m_ADDINCLUDE;
126  Variable m_FULLNAME;
127  Variable m_DIRNAME;
128  Variable m_OUTPUTNAME;
129  Variable m_ALLOS9SOURCES;
130  Variable m_NODEBUGUSELINKOPTS;
131  Variable m_DEBUGUSELINKOPTS;
132  Variable m_USEINCLUDES;
133  Variable m_HASTARGETTAG;
134};
135
136/**
137   Generic command interface to be used by the cmt command driver.
138 */
139class Generator
140{
141public:
142    // Build the MSDEV workspace file
143  static int build_msdev_workspace (const Constituent::ConstituentVector& constituents);
144
145    // Build the MSDEV project file (one per constituent)
146  static int build_msdev (const Constituent& constituent);
147
148    // Build the VSNET workspace file
149  static int build_vsnet_workspace (const Constituent::ConstituentVector& constituents);
150
151    // Build the VSNET project file (one per constituent)
152  static int build_vsnet (const Constituent& constituent);
153
154     // Build the Make setup file
155  static void build_make_setup (const cmt_string& package);
156
157    // Build the constituents.make file
158  static void build_constituents_makefile (const cmt_string& package,
159                                           const CmtSystem::cmt_string_vector& arguments);
160
161    // Build the makefile fragment for one constituent
162  static int build_constituent_makefile (const Constituent& constituent);
163  static void build_constituent_makefile (const cmt_string& name);
164
165  static void build_default_makefile ();
166
167    // Build the dependencies for one module
168  static void build_dependencies (const CmtSystem::cmt_string_vector& arguments);
169
170    // Build prototype file for one module
171  static void build_prototype (const cmt_string& file_name);
172
173    // Build README.html file
174  static void build_readme (const CmtSystem::cmt_string_vector& arguments);
175
176    // Build def files for Windows shared libraries
177  static void build_windefs (const cmt_string& library_name);
178};
179
180#endif
Note: See TracBrowser for help on using the repository browser.