# 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) \
	ole/libwine_uuid.a \
	tsx11/libwine_tsx11.$(LIBEXT) \
	unicode/libwine_unicode.$(LIBEXT)

# Libraries symlinks to create at the top level
LIBSYMLINKS = \
	libwine.$(LIBEXT) \
	libwine_tsx11.$(LIBEXT) \
	libwine_unicode.$(LIBEXT) \
	libwine_uuid.a

# Sub-directories to run make depend/clean into
SUBDIRS = \
	$(INSTALLSUBDIRS) \
	libtest \
	miscemu \
	programs

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

EMUOBJS = \
	miscemu/miscemu.o

all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) $(LIBSYMLINKS) 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: dlls $(EMUOBJS)
	$(CC) -o wine $(EMUOBJS) -L$(DLLDIR) $(IMPORTS:%=-l%) $(LIBWINE) $(LIBUNICODE) $(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) $(PROGRAMS) $(LIBPROGRAMS) $(LIBRARIES): dummy
	@cd `dirname $@` && $(MAKE) `basename $@`

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

libwine_tsx11.$(LIBEXT): tsx11/libwine_tsx11.$(LIBEXT)
	$(RM) $@ && $(LN_S) tsx11/libwine_tsx11.$(LIBEXT) $@

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

libwine_uuid.a: ole/libwine_uuid.a
	$(RM) $@ && $(LN_S) ole/libwine_uuid.a $@

# Dependencies between directories

$(PROGRAMS): tools

$(EMUOBJS): tools dlls

$(LIBPROGRAMS): tools dlls wine

server tools: unicode/libwine_unicode.$(LIBEXT)

dlls: tools $(LIBRARIES)

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

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

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

checklink::
	@cd dlls && $(MAKE) checklink
	@cd debugger && $(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 programs/Makeprog.rules include/config.h documentation/wine.man documentation/wine.conf.man tools/winelauncher
	$(RM) `find . \( -name Makefile -o -size 0 \) -print`

### Dependencies:
