Subversion Repositories FixDeps

Rev

Rev 24 | Rev 33 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 gdshaw 1
// This file is part of !FixDeps.
29 gdshaw 2
// Copyright  2003-2005 Graham Shaw.
3 gdshaw 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.
5
 
6
#include <string>
7
#include <iostream>
8
 
29 gdshaw 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
}
26
 
3 gdshaw 27
int main(int argc,const char* argv[])
28
{
29
        if (argc<2)
30
        {
29 gdshaw 31
                cerr << "fixdeps (version 0.1.0)" << endl;
32
                cerr << "usage: fixdeps <stem>" << endl;
3 gdshaw 33
                return 0;
34
        }
35
        string stem(argv[1]);
36
        string objfile=stem+string(".o");
37
        string depfile=stem+string(".d");
29 gdshaw 38
        string target_ro=string("o.")+stem+string(":");
39
        string target_ux=stem+string(".o")+string(":");
3 gdshaw 40
 
29 gdshaw 41
        bool in_rule=false;
3 gdshaw 42
        while (cin)
43
        {
44
                string line;
45
                getline(cin,line);
29 gdshaw 46
                string::size_type length=line.length();
47
                while (length&&isspace(line[length-1])) --length;
48
                bool cont=(length&&(line[length-1]=='\\'));
49
                if (cont) --length;
50
                line.resize(length);
51
 
52
                if (!in_rule)
3 gdshaw 53
                {
29 gdshaw 54
                        if (line.substr(0,target_ro.length())==target_ro)
3 gdshaw 55
                        {
29 gdshaw 56
                                cout << objfile << " " << depfile << ":";
57
                                line.erase(0,target_ro.length());
58
                                in_rule=true;
3 gdshaw 59
                        }
29 gdshaw 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
                        }
3 gdshaw 66
                }
29 gdshaw 67
 
68
                if (in_rule)
69
                {
70
                        unsigned int i=0;
71
                        while ((i!=line.length())&&(isspace(line[i]))) ++i;
72
                        while (i!=line.length())
73
                        {
74
                                unsigned int j=i;
75
                                while ((i!=line.length())&&(!isspace(line[i]))) ++i;
76
                                cout << " " << translate(line.substr(j,i-j));
77
                                while ((i!=line.length())&&(isspace(line[i]))) ++i;
78
                        }
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;
3 gdshaw 95
        }
96
        return 0;
97
}