aboutsummaryrefslogtreecommitdiff
path: root/src/filetarget.cpp
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 )
{
}