blob: f732073fd622cf99c526c3a17d57489e729dbc7c [file] [log] [blame]
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +00001# Global rules for building dlls -*-Makefile-*-
2#
3# Each individual makefile should define the following variables:
4# MODULE : name of the main module being built
Alexandre Julliard82a2b182000-03-05 13:08:24 +00005# ALTNAMES : alternate names for this dll (optional)
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +00006# IMPORTS : dlls to import (optional)
Alexandre Julliarde1e75372000-04-24 17:17:49 +00007# EXTRALIBS : extra libraries to link in (optional)
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +00008#
9# plus all variables required by the global Make.rules.in
10#
11
12DEFS = @DLLFLAGS@ -D__WINE__
13LIBEXT = @LIBEXT@
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000014SONAME = lib$(MODULE).so
15IMPORTLIBS = $(IMPORTS:%=$(DLLDIR)/lib%.$(LIBEXT))
Alexandre Julliard82a2b182000-03-05 13:08:24 +000016ALLNAMES = lib$(MODULE).so $(ALTNAMES:%=lib%.so)
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000017SPEC_SRCS = $(ALTNAMES:%=%.spec)
Alexandre Julliard218188c2000-12-02 20:38:47 +000018ALL_OBJS = $(MODULE).spec.o $(OBJS)
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000019ALL_LIBS = -L$(TOPOBJDIR) -lwine $(EXTRALIBS) $(LIBS)
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000020
Alexandre Julliard82a2b182000-03-05 13:08:24 +000021all: lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT))
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000022
23@MAKE_RULES@
24
Alexandre Julliard82a2b182000-03-05 13:08:24 +000025# Rules for .so files
26
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000027lib$(MODULE).so: $(ALL_OBJS) Makefile.in
28 $(LDSHARED) $(LDDLLFLAGS) $(ALL_OBJS) -o $@ -L$(DLLDIR) $(IMPORTS:%=-l%) $(ALL_LIBS)
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000029
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000030$(ALTNAMES:%=lib%.$(LIBEXT)): lib$(MODULE).$(LIBEXT)
31 $(RM) $@ && $(LN_S) lib$(MODULE).$(LIBEXT) $@
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000032
Alexandre Julliard82a2b182000-03-05 13:08:24 +000033# Rules for .a files
34
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000035lib$(MODULE).a: $(ALL_OBJS) Makefile.in
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000036 $(RM) $@
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000037 $(AR) $@ $(ALL_OBJS)
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000038 $(RANLIB) $@
39
40# Rules for checking that no imports are missing
41
Alexandre Julliard6c9d83a2000-08-03 00:04:24 +000042checklink:: lib$(MODULE).$(LIBEXT)
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000043 $(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -l$(MODULE) $(ALL_LIBS) && $(RM) checklink
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000044
Alexandre Julliardeb58e1d2000-11-05 04:53:07 +000045# Rules for debug channels
46
47debug_channels: dummy
48 $(TOPSRCDIR)/tools/make_debug $(MODULE).spec $(C_SRCS) $(SUBDIRS:%=%/*.c)
49
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000050# Rules for installation
51
52.PHONY: install_so install_a
53
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000054$(ALTNAMES:%=_install_/lib%.$(LIBEXT)): $(LIBEXT:%=install_%)
55 cd $(libdir) && $(RM) `basename $@` && $(LN_S) lib$(MODULE).$(LIBEXT) `basename $@`
56
57install_so: lib$(MODULE).so
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000058 [ -d $(libdir) ] || $(MKDIR) $(libdir)
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000059 $(INSTALL_PROGRAM) lib$(MODULE).so $(libdir)/lib$(MODULE).so
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000060
61install_a: lib$(MODULE).a
62 [ -d $(libdir) ] || $(MKDIR) $(libdir)
63 $(INSTALL_DATA) lib$(MODULE).a $(libdir)/lib$(MODULE).a
64
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000065install:: $(LIBEXT:%=install_%) $(ALTNAMES:%=_install_/lib%.$(LIBEXT))
Alexandre Julliardd0edc5f2000-03-04 22:31:27 +000066
67uninstall::
Alexandre Julliard64e0ded2000-11-10 20:35:39 +000068 cd $(libdir) && $(RM) lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT))