#use_boost_xpressive=:
PREFIX=/opt/local
CXXFLAGS=-g -W -Wall -O3
CPPFLAGS=-I$(PREFIX)/include

ifeq ($(shell uname -s),Darwin)
SO=.dylib
else
SO=.so
endif

LIBBOOST_REGEX=$(patsubst lib%$(SO),-l%,$(notdir $(lastword $(wildcard $(PREFIX) /lib/libboost_regex-*$(SO)) $(wildcard $(PREFIX)/lib/libboost_regex$(SO)))))
LIBBOOST_DATE_TIME=$(patsubst lib%$(SO),-l%,$(notdir $(lastword $(wildcard $(PREFIX) /lib/libboost_date_time-*$(SO)) $(wildcard $(PREFIX)/lib/libboost_date_time$(SO)))))

ifdef use_boost_xpressive
CPPFLAGS+=-DUSE_BOOST_XPRESSIVE
else
LDFLAGS+=-L$(PREFIX)/lib $(LIBBOOST_REGEX)
endif
LDFLAGS+=-L$(PREFIX)/lib $(LIBBOOST_DATE_TIME)

EXES+=tsv2ics
EXES+=ics2tsv
EXES+=ics-view
EXES+=ics-merge
EXES+=repeater-test
EXES+=rfc2445-test

all: $(EXES) $(EXES:%=%.out)

clean: distclean
	rm -f $(EXES)

distclean:
	rm -rf $(EXES:%=%.dSYM)

#TSV2ICSFLAGS=--normalize_until
#TSV2ICSFLAGS=--convert_until_count --force_limited_until 2013/12/31
TSV2ICSFLAGS=--force_limited_since 1948/7/20 --force_limited_until 2013/12/31 --normalize_until

DIFFFLAGS=-I '	*\(PRODID:\|DTSTAMP:\).*$$'
#DIFFFLAGS=-I '	*\(PRODID:\|DTSTAMP:\|BEGIN:VTIMEZONE\|TZID:\|BEGIN:STANDARD\|DTSTART:\|TZOFFSETFROM:\|TZOFFSETTO:\|TZNAME:\|END:STANDARD\|END:VTIMEZONE\|X-WR-TIMEZONE:\|CALSCALE:\).*$$'

tsv2ics.out: tsv2ics
#	./$< $(TSV2ICSFLAGS) examples/subholid11/subholid.tsv | ./ics-merge - > $@
	./$< $(TSV2ICSFLAGS) --ical examples/subholid11/subholid.tsv > $@
	-[ ! -f $@.bak ] || diff -u $(DIFFFLAGS) $@.bak $@ > /dev/null
	 cp tsv2ics.out examples/subholid11/subholid.ics
	./$< $(TSV2ICSFLAGS) examples/subholid11/citholid.tsv > examples/subholid11/citholid.ics
#	./$< $(TSV2ICSFLAGS) --ical examples/subholid11/citholid.tsv > examples/subholid11/citholid.ics
#	-[ ! -f CitHolid.ics ] || diff -u $(DIFFFLAGS) CitHolid.ics examples/subholid11/citholid.ics > /dev/null

%.out: %
#	./$< ../examples/holid110/*.ICS ../examples/equin201/*.ics examples/subholid11/subholid.ics > $@
	./$< ../examples/holid110/*.ICS examples/equin11/equin.ics examples/subholid11/subholid.ics > $@
	-[ ! -f $@.bak ] || diff -u $(DIFFFLAGS) $@.bak $@ > /dev/null

DIFF=diff -u $(DIFFFLAGS)
#DIFF=LC_ALL=ja_JP.UTF-8 mgdiff

check: all
	-$(DIFF) Holidays.ja.view ics-view.out > /dev/null
	./ics-view ../Apple/Japanese32Holidays.ics > Japanese32Holidays.view
	-[ ! -f Japanese32Holidays.view.bak ] || $(DIFF) Japanese32Holidays.view.bak Japanese32Holidays.view > /dev/null
	-$(DIFF) Holidays.ja.ics ics-merge.out > /dev/null
	-$(DIFF) SubHolidays.ja.ics tsv2ics.out > /dev/null
#	cat examples/altholid11/holidays.header.txt | ./tsv2ics $(TSV2ICSFLAGS) - examples/altholid11/holidays.txt | ./ics-merge - > examples/altholid11/holidays.ics
	cat examples/altholid11/holidays.header.txt | ./tsv2ics $(TSV2ICSFLAGS) --ical - examples/altholid11/holidays.txt > examples/altholid11/holidays.ics
	-$(DIFF) AltHolidays.ja.ics examples/altholid11/holidays.ics > /dev/null
#	cut -f 1,2,4- examples/altholid11/holidays.header.txt examples/altholid11/holidays.txt | ./tsv2ics $(TSV2ICSFLAGS) - | ./ics-merge - > examples/altholid11/holidays.co.jp.ics
	cut -f 1,2,4- examples/altholid11/holidays.header.txt examples/altholid11/holidays.txt | ./tsv2ics $(TSV2ICSFLAGS) --ical - > examples/altholid11/holidays.co.jp.ics
	-$(DIFF) Holidays.co.jp.ics holidays.co.jp.ics > /dev/null
#	./tsv2ics $(TSV2ICSFLAGS) examples/equin11/equin.tsv | ./ics-merge - > examples/equin11/equin.ics
	./tsv2ics $(TSV2ICSFLAGS) --ical examples/equin11/equin.tsv > examples/equin11/equin.ics
	-$(DIFF) Equinox.ja.ics examples/equin11/equin.ics
	./tsv2ics examples/equin11/equin.tsv | ./ics2tsv - | ./tsv2ics $(TSV2ICSFLAGS) --ical - > equin.ics
##	-$(DIFF) Equinox.ja.ics equin.ics
	./ics2tsv rfc2445-test.out | ./tsv2ics --ical - > rfc2445-test.ics
	-$(DIFF) rfc2445-test.out rfc2445-test.ics > /dev/null
	./ics-merge ../Apple/Japanese32Holidays.ics > Japanese32Holidays.ics
	-$(DIFF) ../Apple/Japanese32Holidays.ics Japanese32Holidays.ics > /dev/null

check.update: $(EXES:%=%.out) $(EXES:%=%.out.bak)
	cp -p ics-view.out Holidays.ja.view
	cp -p ics-merge.out Holidays.ja.ics
	cp -p tsv2ics.out SubHolidays.ja.ics
	./ics-merge examples/subholid11/citholid.ics > CitHolid.ics
	cp -p examples/altholid11/holidays.ics AltHolidays.ja.ics
	cp -p examples/altholid11/holidays.co.jp.ics Holidays.co.jp.ics
	cp -p examples/equin11/equin.ics Equinox.ja.ics
	cp -p Japanese32Holidays.view Japanese32Holidays.view.bak

%.out.bak: %.out
	cp -p $< $@

check.refresh:
	rm -f Holidays.ja.* SubHolidays.ja.* AltHolidays.ja.* Japanese32Holidays.*
