summaryrefslogtreecommitdiff
path: root/sources/meta/GenerateAll.java
blob: ca8a77824f0244790c1fe1c87145d03bebbf8f6d (plain) (blame)
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
/*     ____ ____  ____ ____  ______                                     *\
**    / __// __ \/ __// __ \/ ____/    SOcos COmpiles Scala             **
**  __\_ \/ /_/ / /__/ /_/ /\_ \       (c) 2002, LAMP/EPFL              **
** /_____/\____/\___/\____/____/                                        **
\*                                                                      */

// $Id$

package meta;

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.PrintStream;
import java.io.IOException;

import meta.util.AbstractMain;
import meta.util.AbstractFileExpander;
import meta.util.TextExpander;
import meta.util.TextWriter;

/** A program that invokes all file generators. */
public class GenerateAll extends AbstractMain {

    //########################################################################
    // Public Constants

    public static final AbstractFileExpander[] expanders = {
        new meta.scalac.ast.MetaTreeFactory(),
        new meta.scalac.ast.MetaDefaultTreeFactory(),
    };

    //########################################################################
    // Public Functions

    public static void usage(PrintStream out) {
        out.println("usage: " + script() + " <outputdir> [<logfile>]");
    }

    public static void main(String[] args) throws Exception {
        if (args.length < 1 || 2 < args.length) {
            usage(System.err);
            throw abort();
        }
        int errors = 0;
        File root = new File(args[0]);
        PrintWriter filelist = args.length <= 1 ? null :
            new PrintWriter(new BufferedWriter(new FileWriter(args[1])));
        for (int i = 0; i < expanders.length; i++) {
            File source = expanders[i].getSourceFile(root);
            File target = expanders[i].getTargetFile(root);
            System.out.println("Generating file " + target);
            if (filelist != null) {filelist.println(target);filelist.flush();}
            try {
                TextWriter writer = expanders[i].getTextWriter();
                TextExpander expander = new TextExpander(writer, expanders[i]);
                expander.expandText(source);
                errors += expander.getErrorCount();
                FileWriter output = new FileWriter(target);
                output.write(writer.toString());
                output.close();
            } catch (IOException exception) {
                throw abort(exception);
            }
        }
        if (errors > 0) throw abort();
    }

    //########################################################################
}