blob: 3fefd9f3a1b5bc18f77bf511dfe24de603d4ca9e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#include <errno.h>
#include <dirent.h>
#include "rule.h"
#include "filetarget.h"
#include "builder.h" // for BuildException
FileTarget::FileTarget( const char *sName ) :
Target( sName )
{
}
FileTarget::~FileTarget()
{
}
void FileTarget::debug()
{
Target::debug();
printf(" type: FileTarget\n");
}
char *gnu_getcwd()
{
size_t size = 1024;
while (1)
{
char *buffer = new char[size];
if (getcwd (buffer, size) == buffer)
return buffer;
delete[] buffer;
if (errno != ERANGE)
return 0;
size *= 2;
}
}
void FileTarget::addInputDir( const char *sDir )
{
DIR *dir = opendir( sDir );
if( dir == NULL )
{
throw BuildException( strerror( errno ) );
}
char *cwd = gnu_getcwd();
std::string base;//( cwd );
//base += "/";
base += sDir;
base += "/";
delete[] cwd;
struct dirent *de;
while( (de = readdir( dir )) )
{
if( de->d_name[0] == '.' || de->d_name[0] == '\0' )
continue;
std::string s( base );
s += de->d_name;
addInput( s.c_str() );
}
closedir( dir );
}
void FileTarget::check( Builder &bld )
{
Rule *pRule = bld.getRule( sRule );
std::list<std::string> tmp = pRule->execute( bld, lInput, getName() );
lOutput.insert( lOutput.end(), tmp.begin(), tmp.end() );
bld.processRequires( lInput );
}
void FileTarget::clean( Builder &bld )
{
}
|