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