
KXEN_DISTFILES = ../../../distfiles
KXEN_DISTFILES_URL = http://www.xen.org/download/HostedXen/distfiles

MINGW_BUILDTOOL = x86-mingw32-build.sh-0.0-20061107-1.tar.bz2
MINGW_BUILDCONFIG = x86-mingw32-build.sh.conf
MINGW_PACKAGES = binutils-2.17.50-20060716-1-src.tar.gz \
	gcc-core-3.4.5-20060117-1-src.tar.gz \
	mingw-runtime-3.10-20060909-1-src.tar.gz \
	w32api-3.7-src.tar.gz
SDL_DIR = SDL-1.2.13
SDL_DISTFILES = SDL-1.2.13.tar.gz
DIRECTX_DEVEL_DISTFILES = directx-devel.tar.gz
SDL_PATCH = sdl-1.2.11-keyboard.patch
ZLIB_DISTFILES = zlib-1.2.3.tar.gz
E2FSPROGS_DISTFILES = e2fsprogs-1.41.4.tar.gz
E2FSPROGS_PATCH = patches/e2fsprogs-1.41.4-mingw.diff
E2FSPROGS_DIR = e2fsprogs/e2fsprogs-1.41.4
LIBICONV_DISTFILES = libiconv-1.12.tar.gz
LIBICONV_PATCH = patches/libiconv-1.12-macos-sed.diff
LIBICONV_DIR = libiconv/libiconv-1.12

DISTFILES_ALL = $(MINGW_BUILDTOOL) $(MINGW_BUILDCONFIG) $(MINGW_PACKAGES)
DISTFILES_ALL += $(SDL_DISTFILES) $(SDL_PATCH) $(DIRECTX_DEVEL_DISTFILES)
DISTFILES_ALL += $(ZLIB_DISTFILES) $(E2FSPROGS_DISTFILES) $(LIBICONV_DISTFILES)

VPATH = $(KXEN_DISTFILES)

all: install/.uptodate

.PHONY: all distclean clean

distclean: clean
	rm -rf install

clean:
	rm -rf directx-devel mingw sdl zlib e2fsprogs libiconv

install/.uptodate: sdl/.installed
install/.uptodate: zlib/.installed
install/.uptodate: install/.extras-installed
install/.uptodate: e2fsprogs/.installed
install/.uptodate: libiconv/.installed
	@touch $@

install/.extras-installed: install/.exists
install/.extras-installed: install/.extras-installed-headers
	@touch $@

install/.extras-installed-headers: extras/err.h
	@mkdir -p install/include
	cd extras && cp -f $(patsubst extras/%,%,$^) ../install/include
	@touch $@

e2fsprogs/.installed: e2fsprogs/.built
	cd $(E2FSPROGS_DIR)/lib/uuid && \
	  PATH=$(abspath install/bin):$$PATH \
	  make install
	@touch $@

e2fsprogs/.built: e2fsprogs/.configured
	cd $(E2FSPROGS_DIR)/lib/uuid && \
	  PATH=$(abspath install/bin):$$PATH \
	  make
	@touch $@

e2fsprogs/.configured: mingw/.built e2fsprogs/.patched
	cd $(E2FSPROGS_DIR) && \
	  CC=mingw32-gcc \
	  PATH=$(abspath install/bin):$$PATH \
	  ./configure --host=mingw32 --prefix=$(abspath install)
	@touch $@

e2fsprogs/.patched: e2fsprogs/.extracted
e2fsprogs/.patched: $(E2FSPROGS_PATCH)
	cat $< | (cd $(E2FSPROGS_DIR) && patch -p1)
	@touch $@

e2fsprogs/.extracted: $(E2FSPROGS_DISTFILES)
	@rm -rf e2fsprogs
	@mkdir -p e2fsprogs/.hg
	cat $< | (cd e2fsprogs && tar zxf -)
	@touch $@

libiconv/.installed: libiconv/.built
	cd $(LIBICONV_DIR) && \
	  PATH=$(abspath install/bin):$$PATH \
	  make install
	@touch $@

libiconv/.built: libiconv/.configured
	cd $(LIBICONV_DIR) && \
	  PATH=$(abspath install/bin):$$PATH \
	  make
	@touch $@

libiconv/.configured: mingw/.built libiconv/.patched
	cd $(LIBICONV_DIR) && \
	  PATH=$(abspath install/bin):$$PATH \
	  ./configure --host=mingw32 --prefix=$(abspath install) \
	    --enable-static --disable-shared
	@touch $@

libiconv/.patched: libiconv/.extracted
libiconv/.patched: $(LIBICONV_PATCH)
	cat $< | (cd $(LIBICONV_DIR) && patch -p1)
	@touch $@

libiconv/.extracted: $(LIBICONV_DISTFILES)
	@rm -rf libiconv
	@mkdir -p libiconv/.hg
	cat $< | (cd libiconv && tar zxf -)
	@touch $@

zlib/.installed: zlib/.built
	cd zlib/$(basename $(basename $(ZLIB_DISTFILES))) && \
	  PATH=$(abspath install/bin):$$PATH make install
	@touch $@

zlib/.built: zlib/.configured
	cd zlib/$(basename $(basename $(ZLIB_DISTFILES))) && \
	  PATH=$(abspath install/bin):$$PATH make
	@touch $@

zlib/.configured: mingw/.built zlib/.extracted
	cd zlib/$(basename $(basename $(ZLIB_DISTFILES))) && \
	  RANLIB="mingw32-ranlib" AR="mingw32-ar rc" CC=mingw32-gcc \
	  PATH=$(abspath install/bin):$$PATH \
	  ./configure --prefix=$(abspath install)
	@touch $@

zlib/.extracted: $(ZLIB_DISTFILES)
	@rm -rf zlib
	@mkdir -p zlib/.hg
	cat $< | (cd zlib && tar zxf -)
	@touch $@

sdl/.installed: sdl/.built
	cd sdl/$(SDL_DIR) && PATH=$(abspath install/bin):$$PATH make install
	@touch $@

sdl/.built: sdl/.configured
	cd sdl/$(SDL_DIR) && PATH=$(abspath install/bin):$$PATH make
	@touch $@

sdl/.configured: mingw/.built sdl/.patched directx-devel/.extracted
	cd sdl/$(SDL_DIR) && PATH=$(abspath install/bin):$$PATH \
	  ./configure --host=mingw32 --prefix=$(abspath install) \
	  CPPFLAGS="-I$(abspath directx-devel/include/w32api)" \
	  LDFLAGS="-L$(abspath directx-devel/lib/w32api)"
	@touch $@

sdl/.patched: $(SDL_PATCH)
	@rm -f sdl/.extracted
	$(MAKE) sdl/.extracted
	cat $< | (cd sdl/$(SDL_DIR) && patch -p1)
	@touch $@

sdl/.extracted: $(SDL_DISTFILES)
	@rm -rf sdl
	@mkdir -p sdl/.hg
	for f in $^; do \
          cat $$f | (cd sdl && tar zxf -); \
        done
	@touch $@

directx-devel/.extracted: $(DIRECTX_DEVEL_DISTFILES)
	@rm -rf directx-devel
	@mkdir -p directx-devel/.hg
	cat $< | (cd directx-devel && tar zxf -)
	@touch $@

mingw/.built: install/.exists
mingw/.built: mingw/.extracted
	@rm -rf mingw/build/tmp
	cd mingw/build && CROSS_MINGW=$(abspath .) \
	  PATH=$(abspath build-bin):$$PATH \
	  sh x86-mingw32-build.sh --unattended mingw32
	@touch $@

mingw/.extracted: mingw/.extracted-build mingw/.extracted-packages
	@touch $@

mingw/.extracted-build: mingw/.extracted-builddir
mingw/.extracted-build: $(MINGW_BUILDCONFIG)
	cp -f $< mingw/build/
	@touch $@

mingw/.extracted-builddir: mingw/.exists
mingw/.extracted-builddir: $(MINGW_BUILDTOOL)
	@rm -rf mingw/$(notdir $(basename $(basename $<))) mingw/build
	cat $< | (cd mingw && tar jxf -)
	(cd mingw && mv $(notdir $(basename $(basename $<))) build)
	@touch $@

mingw/.extracted-packages: mingw/.exists
mingw/.extracted-packages: $(MINGW_PACKAGES)
	@rm -rf mingw/packages
	@mkdir -p mingw/packages
	cp $^ mingw/packages
	@touch $@

%/.exists:
	mkdir -p $(@D)/.hg
	@touch $@

.INTERMEDIATE: $(DISTFILES_ALL)
$(DISTFILES_ALL):
	@mkdir -p $(KXEN_DISTFILES)
	(cd $(KXEN_DISTFILES) && wget -c $(KXEN_DISTFILES_URL)/${@F})
	ln -fs $(KXEN_DISTFILES)/${@F}
