package org.javay.ports; import java.io.*; import java.util.Hashtable; import java.util.Enumeration; import java.util.Properties; /** */ public class CreateModule { private static String portsDir = "/pbi-build/usr/ports/"; private static String modulesDir = "/pbi-build/modules/"; public static void main(String[] args) throws Exception { String port = args[0]; String portName = port.substring(port.lastIndexOf("/") + 1); Hashtable params = new Hashtable(); //here we have defaults; params.put("PORTSDIR", "/usr/ports"); params.put("LOCALBASE", ""); params.put("LINUXBASE", "/compat/linux"); for(int i = 1; i < args.length; i++) { String a = args[i]; if(a.startsWith("\"") && a.endsWith("\"")) { a = a.substring(1, a.length()-2); } if(a.startsWith("'") && a.endsWith("'")) { a = a.substring(1, a.length()-2); } if(a.contains("=")) { String[] strings = a.split("="); params.put(strings[0], strings[1]); } else { params.put(a, ""); } } String localBase = params.get("LOCALBASE"); String slash = "/"; if(localBase.endsWith("/")) { slash = ""; } if(!params.containsKey("X11BASE")) params.put("X11BASE", localBase); if(!params.containsKey("PKGNAMESUFFIX")) params.put("PKGNAMESUFFIX", ""); if(!params.containsKey("DESKTOPDIR")) params.put("DESKTOPDIR", localBase + ""); if(!params.containsKey("DOCSDIR")) params.put("DOCSDIR", localBase + slash + "share/doc/" + portName); if(!params.containsKey("PORTDOCS")) params.put("PORTDOCS", ""); if(!params.containsKey("EXAMPLESDIR")) params.put("EXAMPLESDIR", localBase + slash + "share/examples/" + portName); if(!params.containsKey("DATADIR")) params.put("DATADIR", localBase + slash + "share/" + portName); if(!params.containsKey("WWWDIR")) params.put("WWWDIR", localBase + slash + "www/" + portName); if(!params.containsKey("ETCDIR")) params.put("ETCDIR", localBase + slash + "etc/" + portName); if(!params.containsKey("PIXMAPSDIR")) params.put("PIXMAPSDIR", localBase + slash + "share/pixmaps"); File moduleParentDir = new File(modulesDir, portName); moduleParentDir.mkdirs(); FileWriter writer = new FileWriter(new File(moduleParentDir, "copy-files.sample")); //kinda tricky here Properties p = new Properties(); p.load(new FileReader(new File(new File(portsDir, port), "Makefile"))); LineNumberReader reader = new LineNumberReader(new FileReader(new File(new File(portsDir, port), "pkg-plist"))); String line = null; String marker = "%%"; Hashtable unique = new Hashtable(); while((line = reader.readLine())!= null) { if(line.contains(marker)) { Enumeration enumeration = params.keys(); while (line.contains(marker) && enumeration.hasMoreElements()) { String s = (String) enumeration.nextElement(); if(line.contains(marker + s + marker)) { try { line = line.replaceAll(marker + s + marker, params.get(s)); } catch (Exception e) { System.out.println("line = " + line); System.out.println("s = " + s + " => " + params.get(s)); e.printStackTrace(); } } } } if(line.contains(marker)) { int index = 0; while(line.length() > index && line.indexOf(marker, index) > -1) { int start = line.indexOf(marker, index); int end = line.indexOf(marker, start + marker.length()) + marker.length(); if(end <= start || end > line.length()) { index = Math.max(start, end) + marker.length(); } else { String a = line.substring(start, end); if(unique.containsKey(a)) { unique.put(a, new Integer( 1 + (Integer) unique.get(a))); } else { unique.put(a, new Integer(1)); } index = end; } } } else { if(!line.startsWith("@")) { writer.write("/usr/local" + (line.startsWith("/") ? "" : "/") + line + " " + line.substring(0, line.lastIndexOf("/") + 1) + "\n"); } } } writer.close(); writer = new FileWriter(new File(moduleParentDir, "pbi.conf.sample")); writer.write("PROGNAME=\"" + capitalizeFirstLetter(portName) + "\" \n"); writer.write("PROGWEB=\"" + (p.containsKey("MASTER_SITES") ? p.get("MASTER_SITES") : "TODO") +"\" \n"); writer.write("PROGAUTHOR=\"" + capitalizeFirstLetter(portName) + " Developers\" \n"); writer.write("#PROGICON=\"TODO\" \n"); writer.write("PBIPORT=\"/usr/ports/" + port + (port.endsWith("/") ? "" : "/") +"\" \n"); writer.write("PROGLIBS=\"AUTO\" \n"); writer.write("PBIUPDATE=\"http://update.pbidir.com\" \n"); writer.write("#OTHERPORT=\"/usr/ports/some/other/\" \n"); writer.write("MAKEOPTS=\"\" \n"); writer.write("BUILDKEY=\"0\" \n"); writer.write("export PBIPORT MAKEOPTS PROGNAME PROGWEB PROGAUTHOR OTHERPORT PROGICON PROGLIBS PBIUPDATE BUILDKEY"); writer.close(); Enumeration enumeration = params.keys(); while (enumeration.hasMoreElements()) { String s = (String) enumeration.nextElement(); unique.remove(marker + s + marker); } if(unique.size() > 0) { System.out.println("You've missed some parameters, make sure it's intended:"); Enumeration enumeration1 = unique.keys(); while (enumeration1.hasMoreElements()) { String s = (String) enumeration1.nextElement(); System.out.println(s); } } } public static String capitalizeFirstLetter(String in) { if(in == null) return in; if(in.length() == 1) return in.toUpperCase(); return in.substring(0,1).toUpperCase() + in.substring(1); } }