Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 1 | # 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 Julliard | 82a2b18 | 2000-03-05 13:08:24 +0000 | [diff] [blame] | 5 | # ALTNAMES : alternate names for this dll (optional) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 6 | # IMPORTS : dlls to import (optional) |
Alexandre Julliard | e1e7537 | 2000-04-24 17:17:49 +0000 | [diff] [blame] | 7 | # EXTRALIBS : extra libraries to link in (optional) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 8 | # |
| 9 | # plus all variables required by the global Make.rules.in |
| 10 | # |
| 11 | |
| 12 | DEFS = @DLLFLAGS@ -D__WINE__ |
| 13 | LIBEXT = @LIBEXT@ |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 14 | SONAME = lib$(MODULE).so |
| 15 | IMPORTLIBS = $(IMPORTS:%=$(DLLDIR)/lib%.$(LIBEXT)) |
Alexandre Julliard | 82a2b18 | 2000-03-05 13:08:24 +0000 | [diff] [blame] | 16 | ALLNAMES = lib$(MODULE).so $(ALTNAMES:%=lib%.so) |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 17 | SPEC_SRCS = $(ALTNAMES:%=%.spec) |
Alexandre Julliard | 218188c | 2000-12-02 20:38:47 +0000 | [diff] [blame^] | 18 | ALL_OBJS = $(MODULE).spec.o $(OBJS) |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 19 | ALL_LIBS = -L$(TOPOBJDIR) -lwine $(EXTRALIBS) $(LIBS) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 20 | |
Alexandre Julliard | 82a2b18 | 2000-03-05 13:08:24 +0000 | [diff] [blame] | 21 | all: lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT)) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 22 | |
| 23 | @MAKE_RULES@ |
| 24 | |
Alexandre Julliard | 82a2b18 | 2000-03-05 13:08:24 +0000 | [diff] [blame] | 25 | # Rules for .so files |
| 26 | |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 27 | lib$(MODULE).so: $(ALL_OBJS) Makefile.in |
| 28 | $(LDSHARED) $(LDDLLFLAGS) $(ALL_OBJS) -o $@ -L$(DLLDIR) $(IMPORTS:%=-l%) $(ALL_LIBS) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 29 | |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 30 | $(ALTNAMES:%=lib%.$(LIBEXT)): lib$(MODULE).$(LIBEXT) |
| 31 | $(RM) $@ && $(LN_S) lib$(MODULE).$(LIBEXT) $@ |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 32 | |
Alexandre Julliard | 82a2b18 | 2000-03-05 13:08:24 +0000 | [diff] [blame] | 33 | # Rules for .a files |
| 34 | |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 35 | lib$(MODULE).a: $(ALL_OBJS) Makefile.in |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 36 | $(RM) $@ |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 37 | $(AR) $@ $(ALL_OBJS) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 38 | $(RANLIB) $@ |
| 39 | |
| 40 | # Rules for checking that no imports are missing |
| 41 | |
Alexandre Julliard | 6c9d83a | 2000-08-03 00:04:24 +0000 | [diff] [blame] | 42 | checklink:: lib$(MODULE).$(LIBEXT) |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 43 | $(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -l$(MODULE) $(ALL_LIBS) && $(RM) checklink |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 44 | |
Alexandre Julliard | eb58e1d | 2000-11-05 04:53:07 +0000 | [diff] [blame] | 45 | # Rules for debug channels |
| 46 | |
| 47 | debug_channels: dummy |
| 48 | $(TOPSRCDIR)/tools/make_debug $(MODULE).spec $(C_SRCS) $(SUBDIRS:%=%/*.c) |
| 49 | |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 50 | # Rules for installation |
| 51 | |
| 52 | .PHONY: install_so install_a |
| 53 | |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 54 | $(ALTNAMES:%=_install_/lib%.$(LIBEXT)): $(LIBEXT:%=install_%) |
| 55 | cd $(libdir) && $(RM) `basename $@` && $(LN_S) lib$(MODULE).$(LIBEXT) `basename $@` |
| 56 | |
| 57 | install_so: lib$(MODULE).so |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 58 | [ -d $(libdir) ] || $(MKDIR) $(libdir) |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 59 | $(INSTALL_PROGRAM) lib$(MODULE).so $(libdir)/lib$(MODULE).so |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 60 | |
| 61 | install_a: lib$(MODULE).a |
| 62 | [ -d $(libdir) ] || $(MKDIR) $(libdir) |
| 63 | $(INSTALL_DATA) lib$(MODULE).a $(libdir)/lib$(MODULE).a |
| 64 | |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 65 | install:: $(LIBEXT:%=install_%) $(ALTNAMES:%=_install_/lib%.$(LIBEXT)) |
Alexandre Julliard | d0edc5f | 2000-03-04 22:31:27 +0000 | [diff] [blame] | 66 | |
| 67 | uninstall:: |
Alexandre Julliard | 64e0ded | 2000-11-10 20:35:39 +0000 | [diff] [blame] | 68 | cd $(libdir) && $(RM) lib$(MODULE).$(LIBEXT) $(ALTNAMES:%=lib%.$(LIBEXT)) |