# 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-aclocal: dummy
	$(MKINSTALLDIRS) $(datadir)/aclocal
	$(INSTALL_DATA) $(SRCDIR)/aclocal.m4 $(datadir)/aclocal/wine.m4

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

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

install:: 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::
	$(RM) $(datadir)/aclocal/wine.m4
	-rmdir $(datadir)/aclocal

.PHONY: install-aclocal 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:: $(TESTSUBDIRS:%=%/__checklink__)
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c && $(RM) checklink

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

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

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

.PHONY: 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 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:
