# 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

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

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

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

LIBOBJS = \
	console/console.o \
	dlls/ntdll/ntdll.o \
	files/files.o \
	if1632/if1632.o \
	loader/loader.o \
	loader/ne/ne.o \
	loader/dos/dos.o \
	memory/memory.o \
	misc/misc.o \
	msdos/msdos.o \
	ole/ole.o \
	relay32/relay32.o \
	scheduler/scheduler.o \
	win32/win32.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: libwine.$(LIBEXT) libwine_unicode.$(LIBEXT) dlls $(EMUOBJS)
	$(CC) -o wine $(EMUOBJS) $(DLL_LINK) $(LIBS)

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

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

install_a: libwine.a
	[ -d $(libdir) ] || $(MKDIR) $(libdir)
	$(INSTALL_DATA) libwine.a $(libdir)/libwine.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

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

libwine.so: libwine.so.$(SOVERSION)
	$(RM) $@ && $(LN_S) libwine.so.$(SOVERSION) $@

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

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

# Dependencies between directories

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

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

server tools dlls: libwine_unicode.$(LIBEXT)

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

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

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 libwine.so.$(SOVERSION) 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:
