#!/usr/bin/env python

# This script regenerates the .icns files for MacOS application packaging.
# You need to be running on MacOS to use it (for iconutil)
# You also need imagemagick + rsvg installed, with something like:
# brew install imagemagick --with-librsvg

import os
from shutil import copy, rmtree
from subprocess import call

ICON_SOURCES = "../bitmaps_png/sources/"

ICONS = [
    ("bitmap2component", ("bitmap2component",), "../bitmap2component"),
    ("cvpcb", ("cvpcb", "cvpcb_doc"), "../cvpcb"),
    ("eeschema", ("eeschema", "eeschema_doc"), "../eeschema"),
    ("gerbview", ("gerbview", "gerbview_doc"), "../gerbview"),
    ("kicad", ("kicad", "kicad_doc"), "../kicad"),
    ("pagelayout_editor", ("pl_editor", "pl_editor_doc"), "../pagelayout_editor"),
    ("pcbcalculator", ("pcb_calculator",), "../pcb_calculator"),
    ("pcbnew", ("pcbnew", "pcbnew_doc"), "../pcbnew")
]

SIZES = [
    ("!16x16", ("16x16",)),
    ("!32x32", ("16x16@2x", "32x32")),
    ("!64x64", ("32x32@2x",)),
    ("!128x128", ("128x128",)),
    ("!256x256", ("128x128@2x", "256x256")),
    ("!512x512", ("256x256@2x", "512x512")),
    ("!1024x1024", ("512x512@2x",))
]

if __name__ == '__main__':

    for src, dest, finaldir in ICONS:

        src = ICON_SOURCES + "icon_" + src + ".svg"
        iconset = dest[0] + ".iconset"
        os.mkdir(iconset)

        for size, outputs in SIZES:
            dest_path = os.path.join(iconset, "icon_" + outputs[0] + ".png")
            print size, src, dest_path
            call(["convert", "-background", "none", "-density", "5000",
                  "-resize", size, src, dest_path])
            for duplicate in outputs[1:]:
                dupe_path = os.path.join(iconset, "icon_" + duplicate + ".png")
                copy(dest_path, dupe_path)

        call(["iconutil", "-c", "icns", iconset])

        rmtree(iconset)

        for dupe in dest[1:]:
            copy(dest[0] + ".icns", os.path.join(finaldir, dupe + ".icns"))

        copy(dest[0] + ".icns", finaldir)

        os.remove(dest[0] + ".icns")
