# 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
# htmlpages:       compile html pages for Wine API
# sgmlpages:       compile sqml source for the Wine API Guide

# 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 \
	libs \
	miscemu \
	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 tools

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

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 libs tools unicode
server: library libs tools unicode
miscemu programs: dlls library libs tools unicode
tools: library libs unicode

dlls/__install-lib__ dlls/__install-dev__: library libs tools unicode
server/__install__: library libs tools unicode
miscemu/__install__ programs/__install__: library libs tools unicode dlls/__install-lib__
library/__install__: library
libs/__install__: libs
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`

tags ctags:
	ctags --c-types=+px `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
	cd dlls && $(MAKE) doc-html

sgmlpages:
	$(MKINSTALLDIRS) $(TOPOBJDIR)/documentation/api-guide
	cd dlls && $(MAKE) doc-sgml

clean::
	$(RM) wine

distclean: clean
	$(RM) config.* configure.lineno TAGS 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:
