# -*- coding: UTF-8 -*-
# $Id: Makefile 2012-05-05 02:57:50 +0900 (Sat, 05 May 2012) chikuchikugonzalez $
# 
# MUGENキャラコンパイル用Makefile
#

### Base Variables ###
VERSION_MAJOR=0
VERSION_MINOR=2
VERSION_PATCH=0
VERSION_STAGE=ALPHA
VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
VERSION_REVISION=$(word 1,$(subst :, ,$(shell hg history --quiet --limit 1)))
VERSION_FULL=$(VERSION)-Rev.$(VERSION_REVISION)
export VERSION_MAJOR
export VERSION_MINOR
export VERSION_PATCH
export VERSION_STAGE
export VERSION
export VERSION_REVISION

### Build Variables ###
SPEC:=$(strip $(SPEC))
PREFIX=
PREFIX_SRC=src/
PREFIX_BIN=bin/
MCC=tools\\mcc\\mcc.exe
MCCFLAGS=--encoding utf8 -I $(PREFIX_SRC) -L $(PREFIX_SRC)
HEADERS=$(wildcard $(PREFIX_SRC)*.mcch)
SRCS_DEF=$(wildcard $(PREFIX_SRC)*.mcdef)
SRCS_CNS=$(wildcard $(PREFIX_SRC)*.mccns)
SRCS_CMD=$(wildcard $(PREFIX_SRC)*.mccmd)
SRCS_ST=$(wildcard $(PREFIX_SRC)*.mcst)
OBJS_DEF=$(subst $(PREFIX_SRC),$(PREFIX),$(patsubst %.mcdef,%.$(strip $(SPEC)).def,$(SRCS_DEF)))
OBJS_CNS=$(subst $(PREFIX_SRC),$(PREFIX_BIN),$(patsubst %.mccns,%.$(strip $(SPEC)).cns,$(SRCS_CNS)))
OBJS_CMD=$(subst $(PREFIX_SRC),$(PREFIX_BIN),$(patsubst %.mccmd,%.$(strip $(SPEC)).cmd,$(SRCS_CMD)))
OBJS_ST=$(subst $(PREFIX_SRC),$(PREFIX_BIN),$(patsubst %.mcst,%.$(strip $(SPEC)).st,$(SRCS_ST)))
SRCS=$(SRCS_DEF) $(SRCS_CNS) $(SRCS_CMD) $(SRCS_ST)
OBJS=$(OBJS_DEF) $(OBJS_CNS) $(OBJS_CMD) $(OBJS_ST)
SPECS=win win2011

## Dist Variables ##
PREFIX_DIST=dist
CHARACTER_NAME=$(notdir $(shell cd))
#DIST_NAME=$(CHARACTER_NAME).$(subst /,,$(strip $(shell date /T)))
DIST_NAME=$(CHARACTER_NAME)-$(VERSION_FULL)
SEVENZIP="C:\\Program Files\\7-Zip\\7z.exe"
CHANGELOGS=ChangeLog.txt


### Targets ###
.PHONY: all clean force monitor $(SPECS) sdist bdist fdist dist_clean changelog
all: $(SPECS)
win:
	set SPEC=$@ && $(MAKE) --no-print-directory build
win2011:
	set SPEC=$@ && $(MAKE) --no-print-directory build
build: $(HEADERS) $(OBJS)
clean:
	del /Q $(subst /,\\,$(foreach spec,$(SPECS),$(wildcard $(PREFIX)*.$(spec).def) $(wildcard $(PREFIX_BIN)*.$(spec).cns) $(wildcard $(PREFIX_BIN)*.$(spec).cmd) $(wildcard $(PREFIX_BIN)*.$(spec).st)))
force: clean all
monitor:
	tools\\fsmonitor\\fsmonitor.exe /watch $(subst /,\\,$(PREFIX_SRC)) /work . /filter * echo $(MAKE) all

### Type Rules ###
$(OBJS): $(HEADERS)
$(OBJS_DEF): $(PREFIX)%.$(SPEC).def: $(PREFIX_SRC)%.mcdef
	$(MCC) $(MCCFLAGS) --spec=$(SPEC) $< $@
$(OBJS_CNS): $(PREFIX_BIN)%.$(SPEC).cns: $(PREFIX_SRC)%.mccns
	$(MCC) $(MCCFLAGS) --spec=$(SPEC) $< $@
$(OBJS_CMD): $(PREFIX_BIN)%.$(SPEC).cmd: $(PREFIX_SRC)%.mccmd
	$(MCC) $(MCCFLAGS) --spec=$(SPEC) $< $@
$(OBJS_ST): $(PREFIX_BIN)%.$(SPEC).st: $(PREFIX_SRC)%.mcst
	$(MCC) $(MCCFLAGS) --spec=$(SPEC) $< $@

### Distribute Targets ###
changelog:
	hg log --verbose --style changelog > $(CHANGELOGS)
$(PREFIX_DIST):
	mkdir $(PREFIX_DIST)
dist_all: sdist bdist fdist $(addprefix bdist_,$(SPECS))
dist_clean:
	del /Q $(PREFIX_DIST)\\*
	rmdir /Q $(PREFIX_DIST)
fdist: $(PREFIX_DIST) changelog
	hg archive --type tgz --subrepos $(PREFIX_DIST)/$(DIST_NAME)-full.tar.gz
sdist: $(PREFIX_DIST) changelog
	if exist $(PREFIX_DIST)\\$(DIST_NAME).src.7z rm $(PREFIX_DIST)\\$(DIST_NAME)-src.7z
	$(SEVENZIP) a -t7z -ir@$@.include.list -xr@$@.exclude.list $(PREFIX_DIST)\\$(DIST_NAME)-src.7z
bdist: $(PREFIX_DIST) $(SPEC) changelog
	if exist $(PREFIX_DIST)\\$(DIST_NAME).7z rm $(PREFIX_DIST)\\$(DIST_NAME).7z
	$(SEVENZIP) a -t7z -ir@$@.include.list -xr@$@.exclude.list $(PREFIX_DIST)\\$(DIST_NAME).7z
_bdist: $(PREFIX_DIST) $(SPEC) changelog
	if exist $(PREFIX_DIST)\\$(DIST_NAME).$(SPEC).7z rm $(PREFIX_DIST)\\$(DIST_NAME)-$(SPEC).7z
	$(SEVENZIP) a -t7z -ir@bdist_$(SPEC).include.list -xr@bdist_$(SPEC).exclude.list $(PREFIX_DIST)\\$(DIST_NAME)-$(SPEC).7z
bdist_win:
	set SPEC=win && make --no-print-directory _bdist
bdist_win2011:
	set SPEC=win2011 && make --no-print-directory _bdist

