# This Makefile understands the following targets:
#
# all (default):   build wine
# clean:           remove all intermediate files
# distclean:       also remove all files created by configure
# test:            run tests
# testclean:       clean test results to force running all tests again
# install-lib:     install libraries needed to run applications
# install-dev:     install development environment
# install:         install everything
# uninstall:       uninstall everything
# depend:          create the dependencies
# etags:           create a TAGS file for Emacs.
# manpages:        compile manpages for Wine API
#

# Directories

TOPSRCDIR = @top_srcdir@
TOPOBJDIR = .
SRCDIR    = @srcdir@
VPATH     = @srcdir@
LIBEXT    = @LIBEXT@
LDCONFIG  = @LDCONFIG@
LDD       = @LDD@
MODULE    = none

# Sub-directories to run make depend/clean into
SUBDIRS = \
	dlls \
	documentation \
	include \
	library \
	miscemu \
	ole \
	programs \
	server \
	tools \
	unicode

# Sub-directories to install for install-lib
INSTALLLIBSUBDIRS = \
	documentation \
	library \
	miscemu \
	programs \
	server \
	unicode

# Sub-directories to install for install-dev
INSTALLDEVSUBDIRS = \
	include \
	ole \
	tools

# Sub-directories to install for both install-lib and install-dev
INSTALLBOTHSUBDIRS = dlls

INSTALLSUBDIRS = $(INSTALLDEVSUBDIRS) $(INSTALLLIBSUBDIRS)

# Sub-directories to run make test into
TESTSUBDIRS = \
	dlls \
	programs

all: Make.rules wine
	@echo "Wine build complete."

WINAPI_CHECK_EXTRA_FLAGS = --global

@MAKE_RULES@

Make.rules: Make.rules.in configure
	@echo $? is newer than 'Make.rules', please rerun ./configure!
	@exit 1

wine: $(WINEWRAPPER)
	$(RM) $@ && $(LN_S) $(WINEWRAPPER) $@

# Installation rules

install-aclocal: dummy
	$(MKINSTALLDIRS) $(datadir)/aclocal
	$(INSTALL_DATA) $(SRCDIR)/aclocal.m4 $(datadir)/aclocal/wine.m4

install-lib:: $(INSTALLLIBSUBDIRS:%=%/__install__) $(INSTALLBOTHSUBDIRS:%=%/__install-lib__)

install-dev:: $(INSTALLDEVSUBDIRS:%=%/__install__) $(INSTALLBOTHSUBDIRS:%=%/__install-dev__) install-aclocal

install:: install-lib install-dev install-aclocal
	-$(LDCONFIG)
	@if test -n "`LANG=C $(LDD) $(bindir)/wine|grep not.found`";	\
	then								\
		echo "*************************************************" ; \
		echo "*************************************************" ; \
		echo "The installed Wine libraries will not be found!" ; \
		echo "You can either:" ; 				\
		echo "   Add the line '$(libdir)' to /etc/ld.so.conf" ;	\
		echo '   export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(libdir)' ; \
		echo "*************************************************" ; \
		echo "*************************************************" ; \
	fi

uninstall:: $(INSTALLBOTHSUBDIRS:%=%/__uninstall__)
	$(RM) $(datadir)/aclocal/wine.m4
	-rmdir $(datadir)/aclocal

$(INSTALLBOTHSUBDIRS:%=%/__install-lib__): dummy
	cd `dirname $@` && $(MAKE) install-lib

$(INSTALLBOTHSUBDIRS:%=%/__install-dev__): dummy
	cd `dirname $@` && $(MAKE) install-dev

$(INSTALLBOTHSUBDIRS:%=%/__uninstall__): dummy
	cd `dirname $@` && $(MAKE) uninstall

.PHONY: install-aclocal $(INSTALLBOTHSUBDIRS:%=%/__install-lib__) $(INSTALLBOTHSUBDIRS:%=%/__install-dev__) $(INSTALLBOTHSUBDIRS:%=%/__uninstall__)

# Dependencies between directories

all: $(SUBDIRS)
dlls: library ole tools unicode
server: library tools unicode
miscemu programs: dlls library ole tools unicode
tools: library unicode

dlls/__install-lib__ dlls/__install-dev__: library ole tools unicode
server/__install__: library tools unicode
miscemu/__install__ programs/__install__: library ole tools unicode dlls/__install-lib__
library/__install__: library
ole/__install__: ole
tools/__install__: tools
unicode/__install__: unicode

# Test rules

checklink:: $(TESTSUBDIRS:%=%/__checklink__)
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c && $(RM) checklink

check test:: wine $(TESTSUBDIRS:%=%/__test__)

crosstest:: $(TESTSUBDIRS:%=%/__crosstest__)

# Misc rules

TAGS etags:
	etags `find $(TOPSRCDIR) -name '*.[ch]' -a -not -name '*.spec.c' -a -not -name '*.glue.c' -a -not -name '*.dbg.c' -print`

manpages:
	$(MKINSTALLDIRS) $(TOPOBJDIR)/documentation/man3w
	for i in $(SUBDIRS); do (cd $$i && $(MAKE) man); done

htmlpages:
	$(MKINSTALLDIRS) $(TOPOBJDIR)/documentation/html
	for i in $(SUBDIRS); do (cd $$i && $(MAKE) html); done

clean::
	$(RM) wine

distclean: clean
	$(RM) config.* configure.lineno TAGS Make.rules dlls/Makedll.rules dlls/Maketest.rules programs/Makeprog.rules include/config.h
	$(RM) -r autom4te.cache
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

.PHONY: manpages htmlpages distclean

### Dependencies:
