# 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 \
	tsx11 \
	unicode

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

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

INSTALLSUBDIRS = $(INSTALLDEVSUBDIRS) $(INSTALLLIBSUBDIRS)

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

EMUOBJS = \
	miscemu/miscemu.o

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-lib:: $(INSTALLLIBSUBDIRS:%=%/__install__)

install-dev:: $(INSTALLDEVSUBDIRS:%=%/__install__)

install::
	-$(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

.PHONY: install-lib install-dev

# Dependencies between directories

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

dlls/__install__: library ole tools tsx11 unicode
server/__install__: library tools unicode
miscemu/__install__ programs/__install__: library ole tools tsx11 unicode dlls/__install__
library/__install__: library
ole/__install__: ole
tools/__install__: tools
unicode/__install__: unicode

# Test rules

checklink::
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c && $(RM) checklink

checklink::
	@cd dlls && $(MAKE) checklink
	@cd programs && $(MAKE) checklink

test_environment: dummy
	@cd programs/winetest && $(MAKE) all

$(TESTSUBDIRS:%=%/__test__): test_environment

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

.PHONY: checklink test_environment

# 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.* TAGS Make.rules dlls/Makedll.rules programs/Makeprog.rules include/config.h
	$(RM) -r autom4te.cache
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

.PHONY: manpages htmlpages distclean

### Dependencies:
