Its OK to error out on a missing tdb file as that is not optional, but
you should probably detect the presence of a mdr file though and
adjust omit it from the file.  I'll have to add the ability to detect
MDR files to FileInfo.

You should also take account of the product-id too.

I will commit the patch, thanks!



Please find attached a modified version of the NSIS output. Changes are:

* Takes in account the product-id
* Now detects if an index was generated and needs to be pakcaged
* .nsi file uses defines at its beginning to allow easier customization if needed (i.e. if the user wants to re-use the NSIS file and modify some values)
* Added a page for displaying the license on the data

 Thanks,

N.
Index: src/uk/me/parabola/mkgmap/combiners/NsisBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/combiners/NsisBuilder.java        (revision 1334)
+++ src/uk/me/parabola/mkgmap/combiners/NsisBuilder.java        (working copy)
@@ -23,17 +23,22 @@
 
 import uk.me.parabola.imgfmt.Utils;
 import uk.me.parabola.mkgmap.CommandArgs;
+import uk.me.parabola.mkgmap.Version;
 
 
 public class NsisBuilder implements Combiner {
        private String baseFilename;
        private String nsisFilename;
+       private String licenseFilename;
        private String seriesName;
        private String id;
+       private int productId;
+       private Boolean hasIndex = true;
        private final List<String> mapList = new ArrayList<String>();
 
        public void init(CommandArgs args) {
                int familyId = args.get("family-id", 0);
+               productId = args.get("product-id", 1);
 
                baseFilename = args.get("overview-mapname", "osm");
                seriesName = args.get("series-name", "OSM maps");
@@ -43,6 +48,9 @@
                id = tmpId.substring(3, 5) + tmpId.substring(1, 3);
 
                nsisFilename = baseFilename + ".nsi";
+               licenseFilename = baseFilename + "_license.txt";
+               
+               hasIndex = args.exists("index");
        }
 
        public void onMapEnd(FileInfo finfo) {
@@ -64,6 +72,14 @@
                        w = new FileWriter(nsisFilename);
                        PrintWriter pw = new PrintWriter(w);
 
+                       pw.format(Locale.ROOT, "!define DEFAULT_DIR 
\"C:\\Garmin\\Maps\\%s\"\n", seriesName);
+                       pw.format(Locale.ROOT, "!define INSTALLER_DESCRIPTION 
\"%s\"\n", seriesName);
+                       pw.format(Locale.ROOT, "!define INSTALLER_NAME 
\"%s\"\n", seriesName);
+                       pw.format(Locale.ROOT, "!define MAPNAME \"%s\"\n", 
baseFilename);
+                       pw.format(Locale.ROOT, "!define PRODUCT_ID \"%s\"\n", 
productId);
+                       pw.format(Locale.ROOT, "!define REG_KEY \"%s\"\n", 
seriesName);
+                       pw.println();
+
                        pw.format(Locale.ROOT, "SetCompressor /SOLID lzma\n");
                        pw.println();
 
@@ -73,8 +89,8 @@
 
                        pw.format(Locale.ROOT, "; Installer pages\n");
                        pw.format(Locale.ROOT, "!insertmacro 
MUI_PAGE_WELCOME\n");
+                       pw.format(Locale.ROOT, "!insertmacro MUI_PAGE_LICENSE 
%s\n", licenseFilename);
                        pw.format(Locale.ROOT, "!insertmacro 
MUI_PAGE_DIRECTORY\n");
-                       //pw.format(Locale.ROOT, "!insertmacro 
MUI_PAGE_STARTMENU Application \n");
                        pw.format(Locale.ROOT, "!insertmacro 
MUI_PAGE_INSTFILES\n");
                        pw.format(Locale.ROOT, "!insertmacro 
MUI_PAGE_FINISH\n");
                        pw.println();
@@ -86,27 +102,31 @@
                        pw.format(Locale.ROOT, "!insertmacro MUI_LANGUAGE 
\"English\"\n");
                        pw.println();
 
-                       pw.format(Locale.ROOT, "Name \"%s\"\n", seriesName);
-                       pw.format(Locale.ROOT, "OutFile \"%s.exe\"\n", 
seriesName);
-                       pw.format(Locale.ROOT, "InstallDir 
\"C:\\Garmin\\Maps\\%s\"\n", seriesName);
+                       pw.format(Locale.ROOT, "Name 
\"${INSTALLER_DESCRIPTION}\"\n");
+                       pw.format(Locale.ROOT, "OutFile 
\"${INSTALLER_NAME}.exe\"\n");
+                       pw.format(Locale.ROOT, "InstallDir 
\"${DEFAULT_DIR}\"\n");
                        pw.println();
 
                        pw.format(Locale.ROOT, "Section \"MainSection\" 
SectionMain\n");
                        pw.format(Locale.ROOT, "  SetOutPath \"$INSTDIR\"\n");
-                       pw.format(Locale.ROOT, "  File \"%s.img\"\n", 
baseFilename);
-                       pw.format(Locale.ROOT, "  File \"%s_mdr.img\"\n", 
baseFilename);
-                       pw.format(Locale.ROOT, "  File \"%s.mdx\"\n", 
baseFilename);
-                       pw.format(Locale.ROOT, "  File \"%s.tdb\"\n", 
baseFilename);
+                       pw.format(Locale.ROOT, "  File \"${MAPNAME}.img\"\n");
+                       if (hasIndex) {
+                               pw.format(Locale.ROOT, "  File 
\"${MAPNAME}_mdr.img\"\n");
+                               pw.format(Locale.ROOT, "  File 
\"${MAPNAME}.mdx\"\n");
+                       }
+                       pw.format(Locale.ROOT, "  File \"${MAPNAME}.tdb\"\n");
                        for (String file : mapList) {
                                pw.format(Locale.ROOT, "  File \"%s.img\"\n", 
file);
                        }
                        pw.println();
-                       pw.format(Locale.ROOT, "  WriteRegBin HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\" \"ID\" %s\n", seriesName, id);
-                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\" \"IDX\" \"$INSTDIR\\%s.mdx\"\n", 
seriesName, baseFilename);
-                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\" \"MDR\" 
\"$INSTDIR\\%s_mdr.img\"\n", seriesName, baseFilename);
-                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\" \"BMAP\" 
\"$INSTDIR\\%s.img\"\n", seriesName, baseFilename);
-                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\" \"LOC\" \"$INSTDIR\"\n", 
seriesName);
-                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\" \"TDB\" 
\"$INSTDIR\\%s.tdb\"\n", seriesName, baseFilename);
+                       pw.format(Locale.ROOT, "  WriteRegBin HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\" \"ID\" %s\n", id);
+                       if (hasIndex) {
+                               pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\" \"IDX\" 
\"$INSTDIR\\${MAPNAME}.mdx\"\n");
+                               pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\" \"MDR\" 
\"$INSTDIR\\${MAPNAME}_mdr.img\"\n");
+                       }
+                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\" \"BMAP\" 
\"$INSTDIR\\${MAPNAME}.img\"\n");
+                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\" \"LOC\" 
\"$INSTDIR\"\n");
+                       pw.format(Locale.ROOT, "  WriteRegStr HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\" \"TDB\" 
\"$INSTDIR\\${MAPNAME}.tdb\"\n");
                        pw.println();
                        pw.format(Locale.ROOT, "  WriteUninstaller 
\"$INSTDIR\\Uninstall.exe\"\n");
                        pw.println();
@@ -114,25 +134,29 @@
                        pw.println();
 
                        pw.format(Locale.ROOT, "Section \"Uninstall\"\n");
-                       pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\%s.img\"\n", baseFilename);
+                       pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\${MAPNAME}.img\"\n");
                        pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\Uninstall.exe\"\n");
-                       pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\%s_mdr.img\"\n", baseFilename);
-                       pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\%s.mdx\"\n", baseFilename);
-                       pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\%s.tdb\"\n", baseFilename);
+                       if (hasIndex) {
+                               pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\${MAPNAME}_mdr.img\"\n");
+                               pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\${MAPNAME}.mdx\"\n");
+                       }
+                       pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\${MAPNAME}.tdb\"\n");
                        for (String file : mapList) {
                                pw.format(Locale.ROOT, "  Delete 
\"$INSTDIR\\%s.img\"\n", file);
                        }
                        pw.println();
                        pw.format(Locale.ROOT, "  RmDir \"$INSTDIR\"\n");
                        pw.println();
-                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\" \"ID\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\" \"IDX\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\" \"MDR\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\" \"BMAP\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\" \"LOC\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\" \"TDB\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegKey /IfEmpty HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\\1\"\n", seriesName);
-                       pw.format(Locale.ROOT, "  DeleteRegKey /IfEmpty HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\%s\"\n", seriesName);
+                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\" \"ID\"\n");
+                       if (hasIndex) {
+                               pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\" \"IDX\"\n");
+                               pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\" \"MDR\"\n");
+                       }
+                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\" 
\"BMAP\"\n");
+                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\" 
\"LOC\"\n");
+                       pw.format(Locale.ROOT, "  DeleteRegValue HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\" 
\"TDB\"\n");
+                       pw.format(Locale.ROOT, "  DeleteRegKey /IfEmpty HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\\${PRODUCT_ID}\"\n");
+                       pw.format(Locale.ROOT, "  DeleteRegKey /IfEmpty HKLM 
\"SOFTWARE\\Garmin\\MapSource\\Families\\${REG_KEY}\"\n");
                        pw.println();
                        pw.format(Locale.ROOT, "SectionEnd\n");
 
@@ -141,5 +165,23 @@
                } finally {
                        Utils.closeFile(w);
                }
+               
+               try {
+                       w = new FileWriter(licenseFilename);
+                       PrintWriter pw = new PrintWriter(w);
+
+                       pw.format(Locale.ROOT, "OSM Street map\n");
+                       pw.format(Locale.ROOT, 
"http://www.openstreetmap.org/\n";);
+                       pw.println();
+                       pw.format(Locale.ROOT, "Map data licenced under 
Creative Commons Attribution ShareAlike 2.0\n");
+                       pw.format(Locale.ROOT, 
"http://creativecommons.org/licenses/by-sa/2.0/\n";);      
+                       pw.println();
+                       pw.format(Locale.ROOT, "Map created with mkgmap-r" + 
Version.VERSION +"\n");
+               } catch (IOException e) {
+                       System.err.println("Could not write license file");
+               } finally {
+                       Utils.closeFile(w);
+               }
+               
        }
 }
_______________________________________________
mkgmap-dev mailing list
mkgmap-dev@lists.mkgmap.org.uk
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to