all: build

CURL = curl

clean: clean-json-ps
	rm -fr local/*.json local/*.txt lib/Web/Encoding/unicore/*.pl

updatenightly: update-submodules dataautoupdate-commit

update-submodules: local/bin/pmbp.pl
	$(CURL) https://gist.githubusercontent.com/wakaba/34a71d3137a52abb562d/raw/gistfile1.txt | sh
	git add t_deps/modules t_deps/tests
	perl local/bin/pmbp.pl --update
	git add config
	$(CURL) -sSLf https://raw.githubusercontent.com/wakaba/ciconfig/master/ciconfig | RUN_GIT=1 REMOVE_UNUSED=1 perl

dataautoupdate-commit: clean build
	git add lib

## ------ Setup ------

WGET = wget
GIT = git
PERL = ./perl

deps: git-submodules pmbp-install json-ps

git-submodules:
	$(GIT) submodule update --init

local/bin/pmbp.pl:
	mkdir -p local/bin
	$(WGET) -O $@ https://raw.github.com/wakaba/perl-setupenv/master/bin/pmbp.pl
pmbp-upgrade: local/bin/pmbp.pl
	perl local/bin/pmbp.pl --update-pmbp-pl
pmbp-update: pmbp-upgrade git-submodules
	perl local/bin/pmbp.pl --update
pmbp-install: pmbp-upgrade
	perl local/bin/pmbp.pl --install

json-ps: local/perl-latest/pm/lib/perl5/JSON/PS.pm
clean-json-ps:
	rm -fr local/perl-latest/pm/lib/perl5/JSON/PS.pm
local/perl-latest/pm/lib/perl5/JSON/PS.pm:
	mkdir -p local/perl-latest/pm/lib/perl5/JSON
	$(WGET) -O $@ https://raw.githubusercontent.com/wakaba/perl-json-ps/master/lib/JSON/PS.pm

## ------ Build ------

build: build-main

build-main: lib/Web/Encoding/_Defs.pm \
    lib/Web/Encoding/unicore/CombiningClass.pl \
    lib/Web/Encoding/unicore/Decomposition.pl \
    lib/Web/Encoding/unicore/CompositionExclusions.pl \
    lib/Web/Encoding/_Single.pm \
    lib/Web/Encoding/_GB.pm \
    lib/Web/Encoding/_Big5.pm \
    lib/Web/Encoding/_JIS.pm \
    lib/Web/Encoding/_EUCKR.pm \
    intermediate/encoding-errors.json

local/encodings.json:
	mkdir -p local
	$(WGET) -O $@ https://raw.github.com/manakai/data-web-defs/master/data/encodings.json
local/encoding-indexes.json:
	mkdir -p local
	$(WGET) -O $@ https://raw.githubusercontent.com/manakai/data-web-defs/master/data/encoding-indexes.json

lib/Web/Encoding/_Defs.pm: local/encodings.json Makefile json-ps
	$(PERL) -MJSON::PS -MData::Dumper -e ' #\
	  local $$/ = undef; #\
	  $$data = json_bytes2perl (scalar <>); #\
	  $$data->{encodings}->{"x-user-defined"}->{single_byte} = 1; #\
	  $$data->{names} = ["utf-8", (grep { not $$_ eq "utf-8" and not $$_ eq "replacement" } sort { $$a cmp $$b } keys %{$$data->{encodings}}), "replacement"]; #\
	  $$Data::Dumper::Sortkeys = 1; #\
	  $$Data::Dumper::Useqq = 1; #\
	  $$pm = Dumper $$data; #\
	  $$pm =~ s/VAR1/Web::Encoding::_Defs/; #\
	  print "$$pm\n"; #\
	' < local/encodings.json > $@
	perl -c $@
lib/Web/Encoding/_Single.pm: bin/mksingle.pl local/encoding-indexes.json json-ps
	$(PERL) $< > $@
lib/Web/Encoding/_GB.pm: bin/mkgb.pl local/encoding-indexes.json json-ps
	$(PERL) $< > $@
lib/Web/Encoding/_Big5.pm: bin/mkbig5.pl local/encoding-indexes.json json-ps
	$(PERL) $< > $@
lib/Web/Encoding/_JIS.pm: bin/mkjis.pl local/encoding-indexes.json json-ps
	$(PERL) $< > $@
lib/Web/Encoding/_EUCKR.pm: bin/mkeuckr.pl local/encoding-indexes.json json-ps
	$(PERL) $< > $@

lib/Web/Encoding/unicore/CombiningClass.pl:
	$(WGET) -O $@ https://raw.githubusercontent.com/manakai/data-chars/master/data/perl/unicore-CombiningClass.pl
lib/Web/Encoding/unicore/Decomposition.pl:
	$(WGET) -O $@ https://raw.githubusercontent.com/manakai/data-chars/master/data/perl/unicore-Decomposition.pl
local/CompositionExclusions.txt:
	mkdir -p local
	$(WGET) -O $@ "https://chars.suikawiki.org/set/textlist?item=%24unicode%3ACompositionExclusions"
lib/Web/Encoding/unicore/CompositionExclusions.pl: \
    local/CompositionExclusions.txt
	echo '[qw(' > $@
	cat local/CompositionExclusions.txt >> $@
	echo ')]' >> $@
	perl -c $@

intermediate/encoding-errors.json: bin/generate-errors.pl \
    src/encoding-errors.txt json-ps local-for-errors
	$(PERL) $< src/encoding-errors.txt > $@

local-for-errors: local/bin/pmbp.pl
	git clone https://github.com/manakai/perl-web-dom local/modules/web-dom || (cd local/modules/web-dom && git pull)
	git clone https://github.com/manakai/perl-web-markup local/modules/web-markup || (cd local/modules/web-markup && git pull)

## ------ Tests ------

PROVE = ./prove

test: test-deps test-main

test-deps: deps local/encoding-indexes.json

test-main:
	$(PROVE) t/*.t t/normalize/*.t

## License: Public Domain.
