# Global rules for building dlls     -*-Makefile-*-
#
# Each individual makefile should define the following variables:
# MODULE       : name of the main module being built
# EXTRALIBS    : extra libraries to link in (optional)
# SPEC_SRCS16  : interface definition files for 16-bit dlls (optional)
# SUBSYSTEM    : (optional) subsystem (for native dlls)
#
# plus all variables required by the global Make.rules.in
#

DLLDEFS     = @DLLDEFS@
DLLFLAGS    = @DLLFLAGS@
DLLEXT      = @DLLEXT@
DEFS        = -D__WINESRC__ $(DLLDEFS) $(EXTRADEFS)
MAINSPEC    = $(MODULE:%.dll=%).spec
SPEC_DEF    = $(MAINSPEC).def
WIN16_FILES = $(SPEC_SRCS16:.spec=.spec.o) $(C_SRCS16:.c=.o) $(EXTRA_OBJS16)
ALL_OBJS    = @WIN16_FILES@ $(OBJS) $(MODULE).dbg.o
ALL_LIBS    = $(LIBWINE) $(EXTRALIBS) $(LIBPORT) $(LDFLAGS) $(LIBS)
IMPORTLIBS  = $(DELAYIMPORTS:%=$(DLLDIR)/lib%.$(IMPLIBEXT)) $(IMPORTS:%=$(DLLDIR)/lib%.$(IMPLIBEXT))

all: $(MODULE)$(DLLEXT) $(SUBDIRS)

@MAKE_RULES@

# Rules for .so files

$(MODULE).so: $(MAINSPEC) $(RC_SRCS:.rc=.res) $(ALL_OBJS) $(IMPORTLIBS) Makefile.in
	$(WINEGCC) -B$(TOOLSDIR)/tools/winebuild -shared $(SRCDIR)/$(MAINSPEC) $(ALL_OBJS) $(RC_SRCS:.rc=.res) $(SUBSYSTEM:%=-Wb,--subsystem,%) -o $@ -L$(DLLDIR) $(DELAYIMPORTS:%=-Wb,-d%) $(IMPORTS:%=-l%) $(ALL_LIBS)

# Rules for .dll files

$(MODULE): $(RCOBJS) $(OBJS) $(MODULE).dbg.o $(SPEC_DEF) $(IMPORTLIBS) Makefile.in
	$(DLLWRAP) -k --def $(SPEC_DEF) -o $@ $(RCOBJS) $(OBJS) $(MODULE).dbg.o -L$(DLLDIR) $(DELAYIMPORTS:%=-l%) $(IMPORTS:%=-l%) $(ALL_LIBS)

$(SPEC_DEF): $(WINEBUILD)

# Rules for checking that no imports are missing

.PHONY: checklink16 $(WIN16_FILES:%=__checklink16__%)

$(WIN16_FILES:%=__checklink16__%): checklink16

checklink16:: $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o dummy
	$(CC) -o checklink -Wl,-rpath,$(TOPOBJDIR)/libs $(TOPSRCDIR)/dlls/checklink.c $(MAINSPEC).o $(OBJS) $(MODULE).dbg.o -L$(DLLDIR) $(ALL_LIBS) -lm && $(RM) checklink $(MAINSPEC).c $(MAINSPEC).o

checklink:: $(WIN16_FILES:%=__checklink16__%)

# Rules for testing

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

crosstest:: $(SUBDIRS:%=%/__crosstest__)

# Rule to explicitly generate the .spec.c for debugging

$(MAINSPEC).c: $(MAINSPEC) $(RC_SRCS:.rc=.res) $(ALL_OBJS) $(IMPORTLIBS) $(WINEBUILD)
	$(WINEBUILD) $(DEFS) $(DLLFLAGS) -o $@ --dll $(SRCDIR)/$(MAINSPEC) $(SUBSYSTEM:%=--subsystem %) $(RC_SRCS:.rc=.res) $(ALL_OBJS) -L$(DLLDIR) $(DELAYIMPORTS:%=-d%) $(IMPORTS:%=-l%)

# Rules for auto documentation

man: $(C_SRCS)
	$(C2MAN) -o $(TOPOBJDIR)/documentation/man$(api_manext) -R$(TOPOBJDIR) -S$(api_manext) $(INCLUDES) $(MAINSPEC:%=-w %) $(SPEC_SRCS16:%=-w %) $(C_SRCS) $(C_SRCS16)

doc-html: $(C_SRCS)
	$(C2MAN) -o $(TOPOBJDIR)/documentation/html -R$(TOPSRCDIR) $(INCLUDES) -Th $(MAINSPEC:%=-w %) $(SPEC_SRCS16:%=-w %) $(C_SRCS) $(C_SRCS16)

doc-sgml: $(C_SRCS)
	$(C2MAN) -o $(TOPOBJDIR)/documentation/api-guide -R$(TOPSRCDIR) $(INCLUDES) -Ts $(MAINSPEC:%=-w %) $(SPEC_SRCS16:%=-w %) $(C_SRCS) $(C_SRCS16)

.PHONY: man doc-html doc-sgml

# Rules for installation

EXE_SPECS16 = $(SPEC_SRCS16:.exe.spec=.exe)
DRV_SPECS16 = $(EXE_SPECS16:.drv.spec=.drv)
ALL_SPECS16 = $(DRV_SPECS16:.spec=.dll)

WIN16_INSTALL = $(ALL_SPECS16:%=_install_/%)

.PHONY: install_lib $(ALL_SPECS16:%=_install_/%) $(ALL_SPECS16:%=_uninstall_/%)

$(ALL_SPECS16:%=_install_/%): install_lib
	cd $(dlldir) && $(RM) `basename $@`$(DLLEXT) && $(LN_S) $(MODULE)$(DLLEXT) `basename $@`$(DLLEXT)

$(ALL_SPECS16:%=_uninstall_/%): dummy
	$(RM) $(dlldir)/`basename $@`$(DLLEXT)

install_lib: $(MODULE)$(DLLEXT)
	$(MKINSTALLDIRS) $(dlldir)
	$(INSTALL_PROGRAM) $(MODULE)$(DLLEXT) $(dlldir)/$(MODULE)$(DLLEXT)

install:: install_lib @WIN16_INSTALL@

uninstall:: $(ALL_SPECS16:%=_uninstall_/%)
	$(RM) $(dlldir)/$(MODULE)$(DLLEXT)

# Misc. rules

$(SPEC_SRCS16:.spec=.spec.c): $(WINEBUILD)

# End of global dll rules
