Migrate from node-webkit to NW.js.
[pwl6.git] / rules / nwjs.mk
diff --git a/rules/nwjs.mk b/rules/nwjs.mk
new file mode 100644 (file)
index 0000000..42bbf79
--- /dev/null
@@ -0,0 +1,98 @@
+# This is free and unencumbered software released into the public
+# domain. To the extent possible under law, the author of this file
+# waives all copyright and related or neighboring rights to it.
+
+.DELETE_ON_ERROR:
+
+include $(dir $(realpath $(lastword $(MAKEFILE_LIST))))programs.mk
+
+nwjs-platforms := \
+       osx-x64.zip osx-ia32.zip \
+       linux-x64.tar.gz linux-ia32.tar.gz \
+       win-ia32.zip
+
+nwjs-pattern := \
+       $(addprefix nwjs-v%-,$(nwjs-platforms))
+
+# These are like 30MB, don't download them every time.
+.PRECIOUS: $(nwjs-pattern)
+
+$(nwjs-pattern):
+       mkdir -p $(@D)
+       wget -O $@ http://dl.nwjs.io/v$(*F)/$(@F) || ($(RM) $@ && exit 1)
+
+nwjs-version ?= 0.10.2
+nwjs-prefix ?= nwjs/
+nwjs-directx = $(addprefix $(nwjs-prefix),d3dcompiler_43.dll d3dcompiler_46.dll)
+
+nwjs = $(nwjs-prefix)nwjs-v$(firstword $(value nwjs-version-$1) $(nwjs-version))-$1
+
+nwjs-archives = $(foreach p,$(nwjs-platforms),$(call nwjs,$(p)))
+
+define nwjs-package-osx
+       $(RM) $@
+       $(RM) -r $(@:.zip=)
+       $(UNZIP) -d $(@D) $2
+       mv $(@D)/$(notdir $(2:.zip=)) $(@:.zip=)
+       tools/generate-osx-app $(@:.zip=) $1
+       $(RM) $(@:.zip=)/nwjc
+       mv $(@:.zip=)/credits.html $(@:.zip=)/nwjs\ credits.html
+       cd $(@D) && $(ZIP) -r $(@F) $(@F:.zip=)
+       $(RM) -r $(@:.zip=)
+endef
+
+%-osx-ia32.zip: %.nw $(call nwjs,osx-ia32.zip)
+       $(call nwjs-package-osx,$<,$(word 2,$^))
+
+%-osx-x64.zip: %.nw $(call nwjs,osx-x64.zip)
+       $(call nwjs-package-osx,$<,$(word 2,$^))
+
+define nwjs-package-linux
+       $(RM) $@
+       $(RM) -r $(@:.tar.gz=)
+       tar -C $(@D) -xzf $2
+       mkdir -p $(@:.tar.gz=)
+       mv $(@D)/$(notdir $(2:.tar.gz=)) $(@:.tar.gz=)/nw
+       cp -a $1 $(@:.tar.gz=)/nw/package.nw
+       cp -a tools/nw-linux-wrapper $(@:.tar.gz=)/`echo $(notdir $1) | sed -E 's/_.+//'`
+       $(RM) $(@:.tar.gz=)/nw/nwjc
+       mv $(@:.tar.gz=)/nw/credits.html $(@:.tar.gz=)/nw/nwjs\ credits.html
+       tar -czf $@ -C $(@D) $(@F:.tar.gz=)
+       $(RM) -r $(@:.tar.gz=)
+endef
+
+%-linux-ia32.tar.gz: %.nw $(call nwjs,linux-ia32.tar.gz)
+       $(call nwjs-package-linux,$<,$(word 2,$^))
+
+%-linux-x64.tar.gz: %.nw $(call nwjs,linux-x64.tar.gz)
+       $(call nwjs-package-linux,$<,$(word 2,$^))
+
+WINE ?= wine
+
+nwjs-icon = $(shell $(UNZIP) -p $1 package.json | grep -Eo '"[^"]+.ico"' -m 1)
+
+define nwjs-package-win
+       $(RM) $@
+       $(RM) -r $(@:.zip=)
+       if $(UNZIP) -l $2 credits.html > /dev/null; then $(UNZIP) -d $(@D)/$(notdir $(2:.zip=)) $2; else $(UNZIP) -d $(@D) $2; fi
+       mv $(@D)/$(notdir $(2:.zip=)) $(@:.zip=)
+       $(RM) $(@:.zip=)/nwjc.exe
+       $(UNZIP) -p $< $(call nwjs-icon,$<) > $(@D)/icon.ico
+       $(WINE) tools/rcedit.exe $(@:.zip=)/nw.exe --set-icon $(@D)/icon.ico
+       $(RM) $(@D)/icon.ico
+       mv $(@:.zip=)/credits.html $(@:.zip=)/nwjs\ credits.html
+       cp -a $< $(@:.zip=)/package.nw
+       cp -a $(nwjs-directx) $(@:.zip=)
+       mv $(@:.zip=)/nw.exe $(@:.zip=)/`echo $(notdir $1) | sed -E 's/_.+/.exe/'`
+       cd $(@D) && $(ZIP) -r $(@F) $(@F:.zip=)
+       $(RM) -r $(@:.zip=)
+endef
+
+%-win-ia32.zip: %.nw $(call nwjs,win-ia32.zip) $(nwjs-directx)
+       $(call nwjs-package-win,$<,$(word 2,$^))
+
+$(nwjs-directx):
+       wget -O $@ 'https://github.com/cefsharp/cef-binary/raw/1e51255cf77d267899bf7834768b8774affaad2d/cef_binary_3.y.z_windows32/Release/'$(notdir $@)
+
+$(nwjs-prefix)dxwebsetup.exe:
+       wget -O $@ http://download.microsoft.com/download/1/7/1/1718CCC4-6315-4D8E-9543-8E28A4E18C4C/dxwebsetup.exe