## 

MODULE_VERSION = 1.003
BETA_VERSION = 02
UNICODE_VERSIONS = 5.1.0 5.2.0beta
CURRENT_UNICODE_VERSION = 5.1.0

WGET = wget
UCD_BASE = http://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/
UNICODEDATA = UnicodeData-$(UNICODE_VERSION).txt
LINEBREAK = LineBreak-$(UNICODE_VERSION).txt
EASTASIANWIDTH = EastAsianWidth-$(UNICODE_VERSION).txt
GRAPHEMEBREAK = GraphemeBreakProperty-$(UNICODE_VERSION).txt
SCRIPTS = Scripts-$(UNICODE_VERSION).txt
RULES = Rules-$(UNICODE_VERSION).txt
EASTASIANWIDTH_CUSTOM = EastAsianWidth-$(UNICODE_VERSION).custom
LINEBREAK_CUSTOM = LineBreak-$(UNICODE_VERSION).custom
SASCRIPTS = SAScripts-$(UNICODE_VERSION).txt
DATA_PM = ../lib/Unicode/LineBreak/$(UNICODE_VERSION).pm
DATA_C = ../c/$(UNICODE_VERSION).c
CONSTANTS_PM = ../lib/Unicode/LineBreak/Constants.pm
LINEBREAK_H = ../c/linebreak.h
VERSION_PM = ../lib/Unicode/LineBreak/Version.pm
META_YML = ../META.yml

all:
	$(MAKE) $(CONSTANTS_PM) $(LINEBREAK_H)
	$(MAKE) $(VERSION_PM)
	for v in $(UNICODE_VERSIONS); do \
		$(MAKE) data-perl UNICODE_VERSION=$$v; \
		$(MAKE) data-c UNICODE_VERSION=$$v; \
	done

data-perl: $(DATA_PM)
data-c: $(DATA_C)

$(DATA_PM): $(RULES) $(EASTASIANWIDTH) $(LINEBREAK) $(SASCRIPTS) $(EASTASIANWIDTH_CUSTOM) $(LINEBREAK_CUSTOM) rules2pl.pl map2pl.pl LBCLASSES
	@( \
	  echo '#-*- perl -*-'; \
	  echo ''; \
	  echo 'package Unicode::LineBreak;'; \
	  echo ''; \
	  echo '=encoding utf8'; \
	  echo ''; \
	  echo "This file is automatically generated.  DON'T EDIT THIS FILE MANUALLY."; \
	  echo ''; \
	  echo '=cut'; \
	  echo ''; \
          echo 'use constant { UNICODE_VERSION => '"'"$(UNICODE_VERSION)"' };"; \
	  echo ''; \
	) > $@
	perl rules2pl.pl perl $(RULES) $(UNICODE_VERSION) >> $@
	perl map2pl.pl perl $(LINEBREAK) $(LINEBREAK_CUSTOM) lb >> $@
	perl map2pl.pl perl $(EASTASIANWIDTH) $(EASTASIANWIDTH_CUSTOM) ea >> $@
	perl map2pl.pl perl $(SASCRIPTS) '' script >> $@
	echo '1;' >> $@

$(DATA_C): $(RULES) $(EASTASIANWIDTH) $(LINEBREAK) $(SASCRIPTS) $(EASTASIANWIDTH_CUSTOM) $(LINEBREAK_CUSTOM) rules2pl.pl map2pl.pl LBCLASSES
	@( \
	  echo '/*'; \
	  echo " * This file is automatically generated.  DON'T EDIT THIS FILE MANUALLY."; \
	  echo ' */'; \
	  echo ''; \
	  echo '#include "linebreak.h"'; \
          echo '#define UNICODE_VERSION "'$(UNICODE_VERSION)'"'; \
	  echo 'char *linebreak_unicode_version = UNICODE_VERSION;'; \
	  echo ''; \
	) > $@
	perl rules2pl.pl C $(RULES) $(UNICODE_VERSION) >> $@
	perl map2pl.pl C $(LINEBREAK) $(LINEBREAK_CUSTOM) lb >> $@
	perl map2pl.pl C $(EASTASIANWIDTH) $(EASTASIANWIDTH_CUSTOM) ea >> $@
	perl map2pl.pl C $(SASCRIPTS) '' script >> $@

$(CONSTANTS_PM) $(LINEBREAK_H): makefile constants.pl Constants.pm.in linebreak.h.in
	perl constants.pl lb,ea,sa $(UNICODE_VERSIONS)

$(VERSION_PM): makefile
	VER=$(MODULE_VERSION); \
	[ -n "$(BETA_VERSION)" ] && VER=$${VER}_$(BETA_VERSION); \
	[ -z "$(BETA_VERSION)" ] && VER=$${VER}.`echo -n $(CURRENT_UNICODE_VERSION) | perl -pe 's/\.//g'`; \
	( \
	  echo '#-*- perl -*-'; \
	  echo ''; \
	  echo 'package Unicode::LineBreak;'; \
	  echo ''; \
          echo '=encoding utf8'; \
          echo ''; \
          echo "This file is automatically generated.  DON'T EDIT THIS FILE MANUALLY."; \
          echo ''; \
          echo '=cut'; \
          echo ''; \
	  echo 'our $$VERSION = '"'"$$VER"';"; \
	  echo 'use constant { UNICODE_VERSIONS => [qw{'"$(UNICODE_VERSIONS)"'}] };'; \
	  echo 'use constant { DEFAULT_UNICODE_VERSION => '"'"$(CURRENT_UNICODE_VERSION)"' };"; \
	  echo ''; \
	  echo '1;' \
	) > $@; \
	perl -i.bak -pe 's/^version:.+/version:             '$${VER}'/' $(META_YML)

custom-data: $(UNICODEDATA) $(LINEBREAK) $(EASTASIANWIDTH) $(GRAPHEMEBREAK) $(SCRIPTS) custom.pl
	for f in $(EASTASIANWIDTH_CUSTOM) $(LINEBREAK_CUSTOM) $(SASCRIPTS); do \
	    if [ -e $$f ]; then mv $$f $$f.old; fi; done
	perl custom.pl ea $(UNICODE_VERSION) > $(EASTASIANWIDTH_CUSTOM)
	perl custom.pl lb $(UNICODE_VERSION) > $(LINEBREAK_CUSTOM)

custom:
	for v in $(UNICODE_VERSIONS); do \
		$(MAKE) custom-data UNICODE_VERSION=$$v; \
	done

unicodedata:
	$(WGET) -O $(UNICODEDATA) $(UCD_BASE)UnicodeData.txt
	$(WGET) -O $(LINEBREAK) $(UCD_BASE)LineBreak.txt
	$(WGET) -O $(EASTASIANWIDTH) $(UCD_BASE)EastAsianWidth.txt
	$(WGET) -O $(GRAPHEMEBREAK) $(UCD_BASE)auxiliary/GraphemeBreakProperty.txt
	$(WGET) -O $(SCRIPTS) $(UCD_BASE)Scripts.txt

clean-data:
	rm -f $(DATA_PM) $(DATA_C)

clean:
	rm -f $(CONSTANTS_PM) $(LINEBREAK_H) $(VERSION_PM)
	for v in $(UNICODE_VERSIONS); do \
		$(MAKE) clean-data UNICODE_VERSION=$$v; \
	done

