Autoconf updates:
[dyninst.git] / make.library.tmpl
1 # -*- makefile -*-
2 # This file defines the things that should be common to all "libraries"
3 # in the paradyn build tree.  It depends on things like SRCS and
4 # TARGET being set correctly in the module-specific template and the
5 # architecture-specific Makefile.
6
7 # $Id: make.library.tmpl,v 1.31 2008/03/12 20:08:25 legendre Exp $
8 #
9
10 BUILD_ID= -s $(SUITE_NAME) -v $(RELEASE_NUM)$(BUILD_MARK)$(BUILD_NUM)
11
12 XTARGET = $(basename $(basename $(TARGET)))
13 VOUCHER = V_$(XTARGET)
14
15 $(VOUCHER):
16         @echo Updating build voucher information: $(VOUCHER)
17         $(BUILDSTAMP) $(BUILD_ID) $(XTARGET)
18         $(MODCC) -c $(MODCFLAGS) $(VOUCHER).c
19
20 VPATH           += ../src
21
22 ifndef NO_STD_OBJS
23 OBJS +=         $(filter %.o, $(patsubst %.C, %.o, $(filter %.C,$(notdir $(SRCS)))) \
24                 $(patsubst %.c, %.o, $(filter %.c,$(notdir $(SRCS)))) \
25                 $(patsubst %.y, %.o, $(filter %.y,$(notdir $(SRCS)))) \
26                 $(patsubst %.l, %.o, $(filter %.l,$(notdir $(SRCS)))) \
27                 $(patsubst %.s, %.o, $(filter %.s,$(notdir $(SRCS)))) \
28                 $(patsubst %.S, %.o, $(filter %.S,$(notdir $(SRCS)))) \
29                 $(IGEN_GEN_SRCS:%.C=%.o))
30 endif
31
32 XLC_DEPFILES =  $(filter %.u, $(patsubst %.u, %.o, $(filter %.u,$(notdir $(SRCS)))))
33
34 # specify build prerequisite dependencies (for parallel make)
35 ifdef PREREQUISITES
36 $(OBJS): $(PREREQUISITES)
37 endif
38
39 XTARGET= $(basename $(basename $(TARGET)))
40 VOUCHER= V_$(XTARGET)
41
42 ifdef STATIC_COMPS
43 STATIC_LIBRARY = true
44 endif
45
46 ifndef OVERRIDE_LINK
47 ifndef STATIC_LIBRARY
48 $(TARGET): $(OBJS) $(EXTRA_LIBS)
49         @$(RM) $(TARGET)
50         @$(MAKE) $(VOUCHER)
51         $(LD) $(LDFLAGS) -o $(TARGET) $(VOUCHER).o $(OBJS) $(LIBS)
52 else # build a static lib
53 $(TARGET): $(OBJS) $(EXTRA_LIBS)
54         @$(RM) $(TARGET)
55         @$(MAKE) $(VOUCHER)
56         $(AR) rcs $(TARGET) $(VOUCHER).o $(OBJS)
57 endif # STATIC_LIBRARY
58 endif  # OVERRIDE_LINK
59
60 ifdef PUBLIC_H
61 $(INCLUDE_DEST)/%.h: $(TO_INC)/%.h
62         $(CP) $^ $(INCLUDE_DEST)
63
64 public_includes: $(patsubst %,$(INCLUDE_DEST)/%,$(PUBLIC_H))
65 else
66 public_includes:
67 endif 
68
69 ifndef DEST
70 DEST            = $(LIBRARY_DEST)
71 endif
72
73 echo:
74         echo $(OBJS)
75
76 clean:
77         $(RM) *.o *.[hC] *.a *.so* .__afs* $(TARGET) 
78
79 distclean: clean
80         $(RM) DEPENDS
81
82 $(DEST)/$(TARGET): $(TARGET)
83         -$(CP) $(TARGET) $(DEST)
84
85 install_generic: $(DEST)/$(TARGET) public_includes
86
87 # A definition of OVERRIDE_INSTALL will skip this definition, so it shouldn't contain
88 # anything other than "install_generic". 
89 ifndef OVERRIDE_INSTALL
90 install: install_generic
91 endif
92
93 #
94 # dependency generation definitions
95 #
96
97 .PHONY : depend
98 depend:
99         $(RM) DEPENDS
100         $(MAKE) DEPENDS
101
102
103 # Define DEPENDS dependencies such that the DEPENDS files depends on
104 # the .I files, not the .[Ch] files; otherwise, DEPENDS get rebuilt
105 # all the time.  We do need to build the Igen-generated files before
106 # updating DEPENDS, however,
107 #
108 ifndef DEPENDFLAGS
109   DEPENDFLAGS = -MM
110 endif
111 ifdef IGEN_ISRCS
112 ifdef EXPLICIT_DEPENDS
113 DEPENDS:
114 else
115 DEPENDS: $(SRCS) $(IGEN_ISRCS)
116 endif
117         touch DEPENDS
118         $(MAKE) $(IGEN_GEN_SRCS)
119         $(MAKE) $(SRCS)
120         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) $(filter %.C,$(IGEN_GEN_SRCS)) > DEPENDS
121 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS) $(IGEN_SRCS) $(NOPED_SRCS)
122 else
123 ifdef EXPLICIT_DEPENDS
124 DEPENDS:
125 else
126 DEPENDS: $(SRCS)
127 endif
128         touch DEPENDS
129         $(MAKE) $(SRCS)
130 ### TODO: remove this in favor of native compiler support
131 ifeq ($(MODCC),cc)
132         $(GCC) -MM $(MODCFLAGS) $(SRCS) > DEPENDS
133 else
134 ifdef IBM_BPATCH_COMPAT
135   ifeq ($(DEPCC), xlC)
136         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
137         cat *.u > DEPENDS
138         rm -f *.u
139   else
140         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
141   endif #aix/power platform
142 else
143         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
144 endif #IBM_BPATCH_COMPAT
145 endif
146 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS)
147 endif
148
149
150 #.depend.% %.C:
151 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS)
152
153 pure:
154
155 %.C: %.y
156         $(YACC) $(YFLAGS) $<
157         $(MV) y.tab.c $@
158
159 %.C: %.l
160         $(LEX) -t $(LFLAGS) $< > $@
161
162 #
163 # A few pattern rules for simplicity in handling igen-generated files.
164 #
165
166 %.mrnet.CLNT.C %.mrnet.CLNT.h %.mrnet.SRVR.C %.mrnet.SRVR.h %.mrnet.h %.mrnet.temp.C: %.I
167         $(IGEN) -mrnet $(ICFLAGS) $<
168
169 %.xdr.C %.xdr.CLNT.C %.xdr.CLNT.h %.xdr.SRVR.C %.xdr.SRVR.h %.xdr.h %.xdr.temp.C: %.I
170
171         $(IGEN) -xdr $(ICFLAGS) $<
172
173 %.thread.C %.thread.CLNT.h %.thread.SRVR.h %.thread.h: %.I
174         $(IGEN) -thread $(ICFLAGS) $<
175
176
177 #
178 # include the dependencies.
179 #
180 ifneq ($(MAKECMDGOALS),distclean)
181 include DEPENDS
182 endif
183
184 # platform-specific options
185 include $(TO_CORE)/make.platform.tmpl