Subversion Repositories FixDeps

Rev

Rev 24 | Rev 33 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 24 Rev 29
Line 1... Line 1...
1
// This file is part of !FixDeps.
1
// This file is part of !FixDeps.
2
// Copyright © 2003-2004 Graham Shaw.
2
// Copyright © 2003-2005 Graham Shaw.
3
// Distribution and use are subject to the GNU General Public License,
3
// Distribution and use are subject to the GNU General Public License,
4
// a copy of which may be found in the file !FixDeps.Copyright.
4
// a copy of which may be found in the file !FixDeps.Copyright.
5
 
5
 
6
#include <string>
6
#include <string>
7
#include <iostream>
7
#include <iostream>
-
 
8
 
8
#include "kernel.h"
9
#include "limits.h"
-
 
10
#include "unixlib/local.h"
-
 
11
 
-
 
12
string translate(string filename)
-
 
13
{
-
 
14
        char buffer[PATH_MAX];
-
 
15
        int filetype=0xfff;
-
 
16
        __riscosify_std(filename.c_str(),1,buffer,sizeof(buffer),&filetype);
-
 
17
        filename=buffer;
-
 
18
        string::size_type i=filename.find(':');
-
 
19
        while (i!=string::npos)
-
 
20
        {
-
 
21
                filename.replace(i,1,"<58>");
-
 
22
                i=filename.find(':',i);
-
 
23
        }
-
 
24
        return filename;
-
 
25
}
9
 
26
 
10
int main(int argc,const char* argv[])
27
int main(int argc,const char* argv[])
11
{
28
{
12
        if (argc<2)
29
        if (argc<2)
13
        {
30
        {
14
                cout << "fixdeps (version 0.1.0)" << endl;
31
                cerr << "fixdeps (version 0.1.0)" << endl;
15
                cout << "usage: fixdeps <stem>" << endl;
32
                cerr << "usage: fixdeps <stem>" << endl;
16
                return 0;
33
                return 0;
17
        }
34
        }
18
        string stem(argv[1]);
35
        string stem(argv[1]);
19
        string ro_objfile=string("o.")+stem;
-
 
20
        string objfile=stem+string(".o");
36
        string objfile=stem+string(".o");
21
        string depfile=stem+string(".d");
37
        string depfile=stem+string(".d");
-
 
38
        string target_ro=string("o.")+stem+string(":");
-
 
39
        string target_ux=stem+string(".o")+string(":");
22
 
40
 
-
 
41
        bool in_rule=false;
23
        while (cin)
42
        while (cin)
24
        {
43
        {
25
                string line;
44
                string line;
26
                getline(cin,line);
45
                getline(cin,line);
-
 
46
                string::size_type length=line.length();
-
 
47
                while (length&&isspace(line[length-1])) --length;
-
 
48
                bool cont=(length&&(line[length-1]=='\\'));
27
                if (line.length())
49
                if (cont) --length;
-
 
50
                line.resize(length);
-
 
51
 
-
 
52
                if (!in_rule)
-
 
53
                {
-
 
54
                        if (line.substr(0,target_ro.length())==target_ro)
-
 
55
                        {
-
 
56
                                cout << objfile << " " << depfile << ":";
-
 
57
                                line.erase(0,target_ro.length());
-
 
58
                                in_rule=true;
-
 
59
                        }
-
 
60
                        else if (line.substr(0,target_ux.length())==target_ux)
-
 
61
                        {
-
 
62
                                cout << objfile << " " << depfile << ":";
-
 
63
                                line.erase(0,target_ux.length());
-
 
64
                                in_rule=true;
-
 
65
                        }
-
 
66
                }
-
 
67
 
-
 
68
                if (in_rule)
28
                {
69
                {
29
                        if (line.substr(0,objfile.length())==ro_objfile)
-
 
30
                                line=objfile+string(" ")+depfile+
-
 
31
                                        line.substr(ro_objfile.length(),string::npos);
-
 
32
                        unsigned int c=0;
70
                        unsigned int i=0;
-
 
71
                        while ((i!=line.length())&&(isspace(line[i]))) ++i;
33
                        for (unsigned int i=0;i!=line.length();++i)
72
                        while (i!=line.length())
34
                        {
73
                        {
35
                                if (line[i]==':')
74
                                unsigned int j=i;
36
                                {
-
 
37
                                        if (c++) cout << "<58>";
75
                                while ((i!=line.length())&&(!isspace(line[i]))) ++i;
38
                                        else cout << ':';
76
                                cout << " " << translate(line.substr(j,i-j));
39
                                }
-
 
40
                                else cout << line[i];
77
                                while ((i!=line.length())&&(isspace(line[i]))) ++i;
41
                        }
78
                        }
42
                        cout << endl;
-
 
43
                }
79
                }
-
 
80
                else
-
 
81
                {
-
 
82
                        cout << line;
-
 
83
                }
-
 
84
 
-
 
85
                if (cont)
-
 
86
                {
-
 
87
                        cout << " \\";
-
 
88
                }
-
 
89
                else
-
 
90
                {
-
 
91
                        in_rule=false;
-
 
92
                }
-
 
93
 
-
 
94
                cout << endl;
44
        }
95
        }
45
        return 0;
96
        return 0;
46
}
97
}