# This Makefile understands the following targets:
#
# all (default):	build wine
# clean:		remove all intermediate files
# distclean:		also remove all files created by configure
# 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@
MODULE    = wine
IMPORTS   = ntdll

# Stand-alone programs
PROGRAMS = \
	loader/dos/dosmod \
	server/wineserver

# Programs that link with libwine
LIBPROGRAMS = \
	debugger/winedbg

# Libraries (not dlls) to build
LIBRARIES = \
	library/libwine.$(LIBEXT) \
	unicode/libwine_unicode.$(LIBEXT)

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

# Sub-directories to run make install into
INSTALLSUBDIRS = \
	debugger \
	dlls \
	documentation \
	include \
	library \
	server \
	tools \
	unicode

EMUOBJS = \
	miscemu/miscemu.o

DLLOBJS = $(DLLS:%=dlls/lib%.@LIBEXT@)

all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) 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: libwine.$(LIBEXT) libwine_unicode.$(LIBEXT) dlls $(EMUOBJS)
	$(CC) -o wine $(EMUOBJS) $(DLL_LINK) $(LIBS) $(LDFLAGS)

install:: all $(INSTALLSUBDIRS:%=%/__install__)
	[ -d $(bindir) ] || $(MKDIR) $(bindir)
	$(INSTALL_PROGRAM) wine $(bindir)/wine
	$(INSTALL_PROGRAM) loader/dos/dosmod $(bindir)/dosmod
	-$(LDCONFIG)

uninstall:: $(INSTALLSUBDIRS:%=%/__uninstall__)
	cd $(bindir) && $(RM) wine dosmod

$(EMUOBJS) $(DLLOBJS) $(PROGRAMS) $(LIBPROGRAMS) $(LIBRARIES): dummy
	@cd `dirname $@` && $(MAKE) `basename $@`

libwine.$(LIBEXT): library/libwine.$(LIBEXT)
	$(RM) $@ && $(LN_S) library/libwine.$(LIBEXT) $@

libwine_unicode.$(LIBEXT): unicode/libwine_unicode.$(LIBEXT)
	$(RM) $@ && $(LN_S) unicode/libwine_unicode.$(LIBEXT) $@

# Dependencies between directories

$(EMUOBJS) $(DLLOBJS) $(PROGRAMS): tools

$(LIBPROGRAMS): tools dlls libwine.$(LIBEXT) libwine_unicode.$(LIBEXT)

server tools: libwine_unicode.$(LIBEXT)

dlls: tools libwine.$(LIBEXT) libwine_unicode.$(LIBEXT)

checklink::
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -lwine -lwine_unicode $(LIBS) && $(RM) checklink

install_programs: dummy
	@cd programs && $(MAKE) install

uninstall_programs: dummy
	@cd programs && $(MAKE) uninstall

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

TAGS etags:
	etags `find $(TOPSRCDIR) -name '*.[chS]' -print | grep -v dbgmain`

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

htmlpages:
	-$(MKDIR) $(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 include/config.h documentation/wine.man documentation/wine.conf.man tools/winelauncher
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

# We depend on configure above for checks, so we better don't use this rule.
#configure: configure.in
#	autoconf

include/config.h.in: configure.in include/acconfig.h
	autoheader -l include

### Dependencies:
