# start config section

SHELL = /bin/bash

srcdir = ../lib
VPATH = ../lib

SUBDIRS := 
subdirs := 

host_alias = i686-pc-cygwin
build_alias = i686-pc-cygwin
target_alias = x86_64-pc-mingw32
# prefix = /vol/m
prefix = /usr/local
includedir:=${prefix}/${target_alias}/include
EXEEXT =.exe

program_transform_name = s,x,x,
exec_prefix = ${prefix}
libdir:=${exec_prefix}/lib
bindir = ${exec_prefix}/bin
datadir = ${prefix}/share
infodir = ${prefix}/info
inst_includedir:=$(includedir)
inst_libdir:=$(libdir)

INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
mkinstalldirs = mkdir -p

CC = $(prefix)/bin/x86_64-pc-mingw32-gcc$(EXEEXT)
CC_FOR_TARGET = $(CC)

DLLTOOL = $(prefix)/bin/x86_64-pc-mingw32-dlltool$(EXEEXT)
DLLTOOL_FLAGS = --as=$(AS) -k
AS = $(prefix)/bin/x86_64-pc-mingw32-as$(EXEEXT)
AS_FOR_TARGET = $(AS_FOR_TARGET)
WINDRES = $(prefix)/bin/x86_64-pc-mingw32-windres$(EXEEXT)

# Depending on if we build as part of winsup or mingw we need to
# add additional include paths in order to get the correct headers
# from the C library.
BUILDENV = 

ifeq ($(BUILDENV), cygwin)
# winsup/include
# winsup/../newlib/libc/include
# winsup/../newlib/libc/sys/cygwin
#EXTRA_INCLUDES = -I$(srcdir)/../../include -I$(srcdir)/../../../newlib/libc/include -I$(srcdir)/../../../newlib/libc/sys/cygwin
endif
#ifeq ($(BUILDENV), mingw)
EXTRA_INCLUDES = -I$(prefix)/x86_64-pc-mingw32/include
# -I$(srcdir)/../../mingw/include
#endif

INCLUDES = -I$(srcdir)/../include $(EXTRA_INCLUDES)

CFLAGS = -O2 -g
ALL_CFLAGS = $(CFLAGS) $(INCLUDES)

RANLIB = $(prefix)/bin/x86_64-pc-mingw32-ranlib$(EXEEXT)
AR = $(prefix)/bin/x86_64-pc-mingw32-ar$(EXEEXT)
LD = $(prefix)/bin/x86_64-pc-mingw32-ld$(EXEEXT)

FLAGS_TO_PASS = \
	AS="$(AS)" \
	CC="$(CC)" \
	CPPFLAGS="$(CPPFLAGS)" \
	CFLAGS="$(CFLAGS)" \
	CXXFLAGS="$(CXXFLAGS)" \
	AR="$(AR)" \
	RANLIB="$(RANLIB)" \
	LD="$(LD)" \
	DLLTOOL="$(DLLTOOL)" \
	TAR="$(TAR)" \
	TARFLAGS="$(TARFLAGS)" \
	TARFILEEXT="$(TARFILEEXT)" \
	WINDRES="$(WINDRES)"

# end config section

# headers

HEADERS = $(notdir $(wildcard $(srcdir)/../include/*.h))
GL_HEADERS = $(notdir $(wildcard $(srcdir)/../include/GL/*.h))

# libraries

DEF_FILES = $(notdir $(wildcard $(srcdir)/*.def))
IMPLIBS = $(addprefix lib,$(subst .def,.a,$(DEF_FILES)))
EXTRA_LIBS=libuuid.a libscrnsave.a libscrnsavw.a liblargeint.a
LIBS = $(IMPLIBS) $(EXTRA_LIBS)
UUID_OBJS = uuid.o mshtml-uuid.o
EXTRA_OBJS = shell32.o scrnsave.o scrnsavw.o largeint.o \
	$(UUID_OBJS) kernel32.o
UUID_SOURCES = uuid.c mshtml-uuid.c
SOURCES = scrnsave.c shell32.c  largeint.c $(UUID_SOURCES)\
res.rc test.c kernel32.c

DISTFILES = $(DEF_FILES) $(SOURCES)

.NOTPARALLEL:

# targets
all: $(LIBS) $(EXTRA_OBJS)

%-subdirs:
	for i in $(SUBDIRS); do \
	  $(MAKE) $(FLAGS_TO_PASS) -C $$i $*; \
	done

ddk:
	$(MAKE) $(FLAGS_TO_PASS) -C $@

directx:
	$(MAKE) $(FLAGS_TO_PASS) -C $@

TEST_OPTIONS = $(ALL_CFLAGS) -DWINVER=0x0666  \
	-Wall -pedantic -Wsystem-headers -c $(srcdir)/test.c -o test.o
.PHONY: test ddk directx
test:
	@echo "Testing w32api..."
	@for lang in c c++ objective-c ; do \
		echo "$$lang..."; \
		$(CC) -x$$lang $(TEST_OPTIONS) ; \
		echo "$$lang UNICODE..."; \
		$(CC) -x$$lang -DUNICODE $(TEST_OPTIONS) ; \
	done
	@echo "windres..."
	@$(WINDRES) --include-dir $(INCDIR) -i $(srcdir)/res.rc -o test.o
	@echo "windres UNICODE..."
	@$(WINDRES) --define UNICODE --include-dir $(INCDIR) -i $(srcdir)/res.rc -o test.o
	@rm -f test.o

scrnsavw.o: scrnsave.c
	$(CC) -c $(ALL_CFLAGS) -DUNICODE -o $@ $<

# make rules

.SUFFIXES: .c .o .def .a

.c.o:
	$(CC) -c $(ALL_CFLAGS) -o $@ $<

libuuid.a : $(UUID_OBJS)
	$(AR) rc $@ $(UUID_OBJS)
	$(RANLIB) $@

# libvfw32.a contains import stubs for 3 dll's.  Using an MRI script
# seems to be the simplest way to combine them into one archive.
# NB: With older dlltool, the object file members will not have unique
# names.
libvfw32.a : vfw32.mri libmsvfw32.a libavifil32.a libavicap32.a
	rm -f $@
	$(AR) -M < ${word 1,$^}
	$(RANLIB) $@

lib%.a : %.def %.o
	$(DLLTOOL) $(DLLTOOL_FLAGS) --output-lib $@ --def $(srcdir)/$*.def
	$(AR) r $@ $*.o
	$(RANLIB) $@

lib%.a: %.def
	$(DLLTOOL) $(DLLTOOL_FLAGS) --output-lib $@ --def $<

lib%.a: %.o
	$(AR) rc $@ $*.o
	$(RANLIB) $@

.PHONY: install install-libraries install-headers install-ddk
# install headers and libraries in a target specified directory.
install: install-libraries install-headers install-ddk install-directx

install-libraries: all
	$(mkinstalldirs) $(inst_libdir)
	for i in $(LIBS); do \
		$(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
	done

install-headers:
	$(mkinstalldirs) $(inst_includedir)
	for i in $(HEADERS); do \
		$(INSTALL_DATA) $(srcdir)/../include/$$i $(inst_includedir)/$$i ; \
	done
	$(mkinstalldirs) $(inst_includedir)/GL
	for i in $(GL_HEADERS); do \
		$(INSTALL_DATA) $(srcdir)/../include/GL/$$i $(inst_includedir)/GL/$$i ; \
	done

install-ddk: install-libraries install-headers
	cd ddk && $(MAKE) install $(FLAGS_TO_PASS)

install-directx: install-libraries install-headers
	cd directx && $(MAKE) install $(FLAGS_TO_PASS)

# uninstall headers and libraries from a target specified directory
uninstall: uninstall-ddk uninstall-directx uninstall-libraries uninstall-headers

uninstall-libraries:
	@for i in $(LIBS); do \
		rm -f $(inst_libdir)/$$i ; \
	done
	rmdir $(inst_libdir)

uninstall-headers:
	@for i in $(HEADERS); do \
		rm -r $(inst_includedir)/$$i ; \
	done
	rmdir $(inst_includedir)

uninstall-ddk:
	cd ddk && $(MAKE) -C uninstall $(FLAGS_TO_PASS)

uninstall-directx:
	cd directx && $(MAKE) -C uninstall $(FLAGS_TO_PASS)

dist:
	mkdir $(distdir)/include
	chmod 755 $(distdir)/include
	@for i in $(HEADERS); do \
		cp -p $(srcdir)/../include/$$i $(distdir)/include/$$i ; \
	done
	mkdir $(distdir)/include/GL
	@for i in $(GL_HEADERS); do \
		cp -p $(srcdir)/../include/GL/$$i $(distdir)/include/GL/$$i ; \
	done
	mkdir $(distdir)/lib
	chmod 755 $(distdir)/lib
	@for i in $(DISTFILES); do \
		cp -p $(srcdir)/$$i $(distdir)/lib/$$i ; \
	done
	for i in $(SUBDIRS); do \
		(cd $$i; $(MAKE) distdir=../$(distdir) dist); \
	done

# clean

mostlyclean:
	rm -f *~ *.o *.s

clean:
	rm -f *.o *.a *.s *~

distclean: clean
	rm -f config.cache config.status config.log Makefile

maintainer-clean: distclean

