History

Updated java pkg mkfiles generator

Dmitry Kabak (userdima committed 13 years ago

Commit c0424e71 parent 7285c412 files · +147 −32Browse files

Showing the changes to java/tools/genpkg/UpdateJavaPackages.java (1 of 2 files). Show all

Unified · Split

java/tools/genpkg/UpdateJavaPackages.java+147−0
@@ -0,0 +1,147 @@
1
2import java.io.*;
3
4public class UpdateJavaPackages {
5
6 private File sourcePath;
7
8 UpdateJavaPackages(String sourcePath) {
9 this.sourcePath = new File(sourcePath);
10 if (!this.sourcePath.exists() || !this.sourcePath.isDirectory())
11 throw new IllegalArgumentException("Bad source path!");
12 }
13
14 private String relativePath(File base, File file) {
15 if (file.getAbsolutePath().equals(base.getAbsolutePath()))
16 return "/";
17 return file.getAbsolutePath().substring(base.getAbsolutePath().length() + 1);
18 }
19
20 private int getDirLevel(File path) {
21 return relativePath(sourcePath, path).split("/").length;
22 }
23
24 private String generateTargSection(File[] files) {
25 boolean success = false;
26 StringBuilder result = new StringBuilder();
27 result.append("TARG=\\").append('\n');
28 for (File f: files) {
29 if (f.isFile() && f.getName().endsWith(".java")) {
30 String className = f.getName();
31 // strip .java extension
32 className = className.substring(0, className.lastIndexOf('.'));
33 // add to mkfile
34 result.append('\t').append(className).append(".dis\\\n");
35 success = true;
36 }
37 }
38 if (!success)
39 return null;
40 return result.toString();
41 }
42 private String generateDirsSection(File[] files) {
43 boolean success = false;
44 StringBuilder result = new StringBuilder();
45 result.append("DIRS=\\").append('\n');
46 for (File f: files) {
47 if (f.isDirectory()) {
48 result.append('\t').append(f.getName()).append("\\\n");
49 success = true;
50 }
51 }
52 if (!success)
53 return null;
54 return result.toString();
55 }
56
57 private void updateMkfile(File file) {
58 // a bit hacky...
59 file.delete();
60 createMkfile(file);
61 }
62
63 private void createMkfile(File file) {
64 try {
65 File dir = file.getParentFile();
66 PrintWriter writer = new PrintWriter(file);
67
68 writer.print("<");
69 // assume we have config in two folders higher
70 int level = getDirLevel(dir) + 2;
71 while (level-- > 0)
72 writer.print("../");
73 writer.print("mkconfig");
74 writer.println();
75 writer.println();
76 File[] files = dir.listFiles();
77
78 String dirs = generateDirsSection(files);
79 if (dirs != null)
80 writer.println(dirs);
81
82 String targ = generateTargSection(files);
83 if (targ != null)
84 writer.println(targ);
85
86 if (targ != null) {
87 writer.println("DISBIN=$ROOT/java/dis/java/java/" + relativePath(sourcePath, dir));
88 writer.println();
89 writer.println("<$ROOT/mkfiles/mkjava");
90 }
91
92 if (dirs != null)
93 writer.println("<$ROOT/mkfiles/mksubdirs");
94
95 if (dirs == null && targ == null) {
96 // Dummy entry to do anything
97 writer.println("install:");
98 writer.println("\techo");
99 }
100
101 writer.close();
102 } catch (FileNotFoundException e) {
103 e.printStackTrace();
104 }
105 }
106
107 private void processDir(File path) {
108 System.out.println("Processing " + path.getPath());
109 File[] files = path.listFiles();
110
111 // walk all the dirs in source folder
112 for (File f: files)
113 if (f.isDirectory())
114 processDir(f);
115
116 File mkfile = new File(path.getPath() + "/mkfile");
117 if (!mkfile.exists())
118 createMkfile(mkfile);
119 else
120 updateMkfile(mkfile);
121 }
122 public void run() {
123 processDir(sourcePath);
124 }
125
126 public static void main(String[] args) {
127 if (args.length == 0) {
128 System.out.println("Generates or updates mkfiles for java");
129 System.out.println("packages in inferno java subsystem.");
130 System.out.println();
131 System.out.println("Usage: <source> <target>");
132 System.out.println("Usage: <source>");
133 System.out.println("\tsource - the path to unpacked src.zip from jdk");
134 System.out.println("\ttarget - absolute path to /java/pkg/ in inferno root dir");
135 return;
136 }
137
138 try {
139 UpdateJavaPackages updater = new UpdateJavaPackages(args[0]);
140 updater.run();
141 }
142 catch (IllegalArgumentException e) {
143 System.out.println("Error: " + e.getMessage());
144 }
145 }
146
147}