xref: /AOO41X/main/tools/inc/bootstrp/mkcreate.hxx (revision 8b851043d896eaadc6634f0a22437412985b1d4a)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _MK_CREATE_HXX
25 #define _MK_CREATE_HXX
26 
27 #include <tools/string.hxx>
28 //#include "bootstrp/sstring.hxx"
29 
30 DECLARE_LIST( UniStringList, UniString* )
31 
32 #include <tools/list.hxx>
33 #include "bootstrp/prj.hxx"
34 
35 class SvStream;
36 class SourceDirectoryList;
37 
38 //
39 // class SourceDirectoryDependency
40 //
41 
42 class CodedDependency : public ByteString
43 {
44 private:
45     sal_uInt16 nOSType;                         // operating systems where dependeny exists
46 
47 public:
48     /* create a dependency instance with given coded directory name
49      */
CodedDependency(const ByteString & rCodedIdentifier,sal_uInt16 nOperatingSystems)50     CodedDependency(
51         const ByteString &rCodedIdentifier, // the coded name of the directory
52         sal_uInt16 nOperatingSystems            // the operating systems where this dependency exists
53     ) :
54     ByteString( rCodedIdentifier ),
55     nOSType( nOperatingSystems )
56     {
57     }
58 
59     /* returns the operating system
60      */
GetOperatingSystem()61     sal_uInt16 GetOperatingSystem()
62     {
63         return nOSType;
64     }
65 
66     /* set operating system
67      */
SetOperatingSystem(sal_uInt16 nOperatingSystems)68     void SetOperatingSystem( sal_uInt16 nOperatingSystems )
69     {
70         nOSType = nOperatingSystems;
71     }
72 
73     /* add operating systems if same dependency
74      */
TryToMerge(const ByteString & rCodedIdentifier,sal_uInt16 nOperatingSystems)75     sal_Bool TryToMerge(
76         const ByteString &rCodedIdentifier, // the coded name of the directory
77         sal_uInt16 nOperatingSystems            // the operating systems where this dependency exists
78     )
79     {
80         if ( rCodedIdentifier != *this )
81             return sal_False;
82         nOSType |= nOperatingSystems;
83         return sal_True;
84     }
85 };
86 
87 //
88 // class Dependecy
89 //
90 
91 class Dependency : public ByteString
92 {
93 private:
94     sal_uInt16 nOSType;                         // operating systems where dependecy exists
95 
96 public:
97     /* create a dependency instance with given directory name
98      */
Dependency(const ByteString & rDirectoryName,sal_uInt16 nOperatingSystems)99     Dependency(
100         const ByteString &rDirectoryName,   // the coded name of the directory
101         sal_uInt16 nOperatingSystems            // the operating systems where this dependency exists
102     ) :
103     ByteString( rDirectoryName ),
104     nOSType( nOperatingSystems )
105     {
106     }
107 
108     /* returns the operating system
109      */
GetOperatingSystem()110     sal_uInt16 GetOperatingSystem()
111     {
112         return nOSType;
113     }
114 };
115 
116 //
117 // class SourceDirectory
118 //
119 
120 class SourceDirectory : public ByteString
121 {
122 private:
123     SourceDirectory *pParent;               // the parent directory
124     SourceDirectoryList *pSubDirectories;   // list of sub directories
125     sal_uInt16 nOSType;                         // operating systems where this directory is used
126     sal_uInt16 nDepth;                          // depth of directory structure (root is 0)
127 
128     SByteStringList *pDependencies;         // dependencies on other directories in this depth
129 
130     SByteStringList *pCodedDependencies;    // dependencies on other directories in different depth
131     SByteStringList *pCodedIdentifier;      // symbolic identifier to resolve dependencies
132 
133     /* try to resolve a single dependency
134      */
135     Dependency *ResolvesDependency(
136         CodedDependency *pCodedDependency   // the dependency
137     );
138 
139     /* returns the operating systems of a coded dependency
140      */
141     static sal_uInt16 GetOSType(
142         const ByteString &sDependExt        // the corresponding dependency extension (see also prj.hxx)
143     );
144 
145     /* removes this and all sub directories with all dependencies
146      */
147     sal_Bool RemoveDirectoryTreeAndAllDependencies();
148 
149 public:
150 
151     /* create a directory instance with given parent and name, no parent means this is the root
152      * (not the file system root but the root of the source tree, e.g. o:\569)
153      */
154     SourceDirectory(
155         const ByteString &rDirectoryName,           // name without parent
156         sal_uInt16 nOperatingSystem,                    // the operating systems where this directory is used
157         SourceDirectory *pParentDirectory = NULL    // parent (if not root)
158     );
159     ~SourceDirectory();
160 
161     /* returns the full absolute path of this directory
162      */
163     ByteString GetFullPath();
164 
165     /* returns a list of all sub directories
166      */
GetSubDirectories()167     SourceDirectoryList *GetSubDirectories() { return pSubDirectories; }
168 
169     /* returns the Operating systems where this directory is used
170      */
GetOperatingSystems()171     sal_uInt16 GetOperatingSystems() { return nOSType; }
172 
173     /* returns the given directory
174      */
175     SourceDirectory *GetDirectory(
176         const ByteString &rDirectoryName,   // full path
177         sal_uInt16 nOperatingSystem             // the operating systems where this directory is used
178     );
179 
180     /* create the directory and all mandatory parents
181      */
InsertFull(const ByteString & rDirectoryName,sal_uInt16 nOperatingSystem)182     SourceDirectory *InsertFull(
183         const ByteString &rDirectoryName,   // full path
184         sal_uInt16 nOperatingSystem             // the operating systems where this directory is used
185     )
186     {
187         return GetDirectory( rDirectoryName, nOperatingSystem );
188     }
189 
190     /* create the directory as sub directory of this directory
191      */
192     SourceDirectory *Insert(
193         const ByteString &rDirectoryName,   // name without parent
194         sal_uInt16 nOperatingSystem             // the operating systems where this directory is used
195     );
196 
197     /* get the root directory
198      */
199     SourceDirectory *GetRootDirectory();
200 
201     /* get sub directory if exists
202      */
203     SourceDirectory *GetSubDirectory(
204         const ByteString &rDirectoryPath,   // full sub path
205         sal_uInt16 nOperatingSystem             // the operating systems where this directory is used
206     );
207 
208     /* add a dependency for several platforms
209      */
210     CodedDependency *AddCodedDependency(
211         const ByteString &rCodedIdentifier, // the coded name of the directory
212         sal_uInt16 nOperatingSystems            // the operating systems where this dependency exists
213     );
214 
215     /* returns the dependency list
216      */
GetCodedDependencies()217     SByteStringList *GetCodedDependencies()
218     {
219         return pCodedDependencies;
220     }
221 
222     /* add symbolic identifier to resolve dependencies (to this directory and all parents)
223      */
224     CodedDependency *AddCodedIdentifier(
225         const ByteString &rCodedIdentifier, // the coded name of the directory
226         sal_uInt16 nOperatingSystems            // the operating systems where this dependency exists
227     );
228 
229     /* returns the identifier list
230      */
GetCodedIdentifier()231     SByteStringList *GetCodedIdentifier()
232     {
233         return pCodedIdentifier;
234     }
235 
236     /* create dependencies on other directory, coded dependecies are used
237      */
238     void ResolveDependencies();
239 
240     /* returns the target definition for this directory (if dependencies exist)
241      */
242     ByteString GetTarget();
243 
244     /* returns the target definition for all sub directory
245      */
246     ByteString GetSubDirsTarget();
247 
248     /* create the full directory tree (only virtual, not in file system)
249      */
250     static SourceDirectory *CreateRootDirectory(
251         const ByteString &rRoot,    // the root directory in file system
252         const ByteString &rVersion, // the solar verion (r.g. SRC590, SRC591 etc.)
253         sal_Bool bAll = sal_False           // add all directories or only buildable ones
254     );
255 
256     /* create the makefile.rc in file system
257      */
258     sal_Bool CreateRecursiveMakefile(
259         sal_Bool bAllChilds = sal_False     // create rcursive for all sub directories
260     );
261 };
262 
263 //
264 // class SourceDirectoryList
265 //
266 
267 class SourceDirectoryList : public SByteStringList
268 {
269 public:
270     /* create a empty directory list
271      */
SourceDirectoryList()272     SourceDirectoryList()
273     {
274     }
275     ~SourceDirectoryList();
276 
277     /* search for a directory by directory name
278      */
279     SourceDirectory *Search(
280         const ByteString &rDirectoryName    // name without parent
281     );
282 
283     /* insert a new directory
284      */
InsertSorted(SourceDirectory * pDirectory)285     sal_uIntPtr InsertSorted(
286         SourceDirectory *pDirectory     // directory
287     )
288     {
289         return PutString(( ByteString * ) pDirectory );
290     }
291 };
292 
293 #endif
294