# Global rules for building a Winelib program     -*-Makefile-*-
#
# Each individual makefile should define the following variables:
# MODULE       : name of the main module being built
# EXTRALIBS    : extra libraries to link in (optional)
# EXTRADEFS    : extra symbol definitions, like -DWINELIB (optional)
#
# plus all variables required by the global Make.rules.in
#

DEFS        = @DLLFLAGS@ -DSTRICT -DNONAMELESSUNION -DNONAMELESSSTRUCT $(EXTRADEFS)
LDDLLFLAGS  = @LDDLLFLAGS@
ALL_OBJS    = $(MODULE).spec.o $(OBJS)
ALL_LIBS    = $(LIBWINE) $(EXTRALIBS) $(LIBS)
SYMBOLFILE  = $(MODULE).tmp.o
TESTIMPORTS = $(DELAYIMPORTS) $(IMPORTS)

all: $(MODULE)

@MAKE_RULES@

# Rules for main module

$(MODULE).so: $(ALL_OBJS) Makefile.in
	$(LDSHARED) $(LDDLLFLAGS) $(ALL_OBJS) -o $@ $(ALL_LIBS)

$(MODULE): $(MODULE).so
	$(RM) $(MODULE) && $(LN_S) $(TOPOBJDIR)/wine $(MODULE)

# Rules for checking that no imports are missing

checklink:: $(MODULE).so
	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c $(MODULE).so && $(RM) checklink

# Rules for testing

$(TESTRESULTS): $(MODULE).so

# Rules for debug channels

debug_channels: dummy
	$(TOPSRCDIR)/tools/make_debug $(MODULE).spec $(C_SRCS)

# Rules for installation

install:: $(MODULE).so
	$(MKINSTALLDIRS) $(bindir)
	$(INSTALL_PROGRAM) $(MODULE).so $(bindir)/$(MODULE).so
	cd $(bindir) && $(RM) $(MODULE) && $(LN_S) wine $(MODULE)

uninstall::
	$(RM) $(bindir)/$(MODULE) $(bindir)/$(MODULE).so

clean::
	$(RM) $(MODULE)
