# 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@
LDSHARED  = @LDSHARED@
LDCONFIG  = @LDCONFIG@
MODULE    = wine
SOVERSION = 1.0
SONAME    = libwine.so

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

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

# Sub-directories to run make depend/clean into
SUBDIRS = \
	console \
	controls \
	debugger \
	dlls \
	dlls/advapi32 \
	dlls/ntdll \
	documentation \
	files \
	graphics \
	graphics/enhmetafiledrv \
	graphics/metafiledrv \
	graphics/win16drv \
	if1632 \
	include \
	library \
	libtest \
	loader \
	loader/dos \
	loader/ne \
	memory \
	misc \
	miscemu \
	msdos \
	objects \
	ole \
	programs \
	relay32 \
	resources \
	scheduler \
	server \
	tools \
	unicode \
	win32 \
	windows

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

LIBOBJS = \
	controls/controls.o \
	console/console.o \
	dlls/advapi32/advapi32.o \
	dlls/ntdll/ntdll.o \
	files/files.o \
	graphics/graphics.o \
	graphics/enhmetafiledrv/enhmetafiledrv.o \
	graphics/metafiledrv/metafiledrv.o \
	graphics/win16drv/win16drv.o \
	if1632/if1632.o \
	loader/loader.o \
	loader/ne/ne.o \
	loader/dos/dos.o \
	memory/memory.o \
	misc/misc.o \
	msdos/msdos.o \
	objects/objects.o \
	ole/ole.o \
	relay32/relay32.o \
	resources/resources.o \
	scheduler/scheduler.o \
	unicode/unicode.o \
	win32/win32.o \
	windows/windows.o

EMUOBJS = \
	miscemu/miscemu.o

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

EXTRA_OBJS = $(LIBOBJS)

all: Make.rules $(PROGRAMS) $(LIBPROGRAMS) wine
	@echo "Wine build complete."

LIBLINTS = $(LIBOBJS:.o=.ln) 
EMULINTS = $(EMUOBJS:.o=.ln)

lint:: llib-lwine.ln $(EMULINTS)
	$(LINT) $(ALLLINTFLAGS) -L. -lwine $(EMULINTS)

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: lib$(MODULE).$(LIBEXT) $(DLLDIR) $(EMUOBJS)
	$(CC) -o wine $(EMUOBJS) $(DLL_LINK) $(LIBS)

llib-lwine.ln : $(LIBLINTS)
	$(LINT) $(ALLLINTFLAGS) -owine $(LIBLINTS)

install_so: lib$(MODULE).so.$(SOVERSION)
	[ -d $(libdir) ] || $(MKDIR) $(libdir)
	$(INSTALL_PROGRAM) lib$(MODULE).so.$(SOVERSION) $(libdir)/lib$(MODULE).so.$(SOVERSION)
	cd $(libdir) && $(RM) lib$(MODULE).so && $(LN_S) lib$(MODULE).so.$(SOVERSION) lib$(MODULE).so

install_a: lib$(MODULE).a
	[ -d $(libdir) ] || $(MKDIR) $(libdir)
	$(INSTALL_DATA) lib$(MODULE).a $(libdir)/lib$(MODULE).a

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

uninstall:: $(INSTALLSUBDIRS:%=%/__uninstall__)
	cd $(libdir) && $(RM) libwine.a libwine.so libwine.so.$(SOVERSION)
	cd $(bindir) && $(RM) wine dosmod

lib$(MODULE).so.$(SOVERSION): $(OBJS) Makefile.in Make.rules.in
	$(LDSHARED) $(OBJS) -o $@

lib$(MODULE).so: lib$(MODULE).so.$(SOVERSION)
	$(RM) $@ && $(LN_S) lib$(MODULE).so.$(SOVERSION) $@

lib$(MODULE).a: $(OBJS) Makefile.in Make.rules.in
	$(RM) $@
	$(AR) $@ $(OBJS)
	$(RANLIB) $@

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

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

$(LIBPROGRAMS): tools dlls lib$(MODULE).$(LIBEXT)

$(LIBLINTS) $(EMULINTS): dummy
	@cd `dirname $@` && $(MAKE) lint

checklink::
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -lwine $(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 libwine.so.1.0 TAGS

distclean: clean
	$(RM) config.* Make.rules dlls/Makedll.rules include/config.h documentation/wine.man documentation/wine.conf.man
	$(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:
