21df837596dbaa2cabfad742b8498372444c8af0
[sip-router] / Makefile.libs
1 #
2 # $Id$
3 #
4 # module Makefile
5 #(to be included from each library makefile)
6 #
7 # History:
8 # --------
9 #  2007-03-16  created by andrei
10 #  2007-05-19  rebuild on changed install name on darwin  (andrei)
11 #  2008-06-27  make cfg / config.mak support (andrei)
12
13 # NAME, MAJOR_VER and MINOR_VER should be pre-defined in the library 
14 # makefile
15 #
16
17 ifneq ($(makefile_defs_included), 1)
18 $(error "the local makefile does not include Makefile.defs!")
19 endif
20
21 ifneq   (,$(filter install% %install install, $(MAKECMDGOALS)))
22 compile_for_install:=yes
23 $(info install mode)
24 endif
25
26 ifeq ($(NAME),)
27 $(error NAME, MAJOR_VER and MINOR_VER must be defined in the library Makefile)
28 endif
29 ifeq ($(MAJOR_VER),)
30 $(error NAME, MAJOR_VER and MINOR_VER must be defined in the library Makefile)
31 endif
32 ifeq ($(MINOR_VER),)
33 $(error NAME, MAJOR_VER and MINOR_VER must be defined in the library Makefile)
34 endif
35 ifeq ($(BUGFIX_VER),)
36         BUGFIX_VER:=0
37 endif
38
39 # if config was not loaded (makefile_defs!=1) ignore
40 # the rest of makefile and try only to remake the config
41 ifeq ($(makefile_defs),1)
42
43
44 ifeq ($(OS), darwin)
45         LIB_NAME:= \
46         $(LIB_PREFIX)$(NAME).$(MAJOR_VER).$(MINOR_VER).$(BUGFIX_VER)$(LIB_SUFFIX)
47         LIB_RUNTIME_NAME:=$(LIB_PREFIX)$(NAME).$(MAJOR_VER)$(LIB_SUFFIX)
48         LIB_LINK_NAME:=$(LIB_PREFIX)$(NAME)$(LIB_SUFFIX)
49         # on darwin we add an extra dependency on a file containing the install 
50         # name (we want to rebuild the library if the install path changed)
51         # this is needed because instead of a rpath link option, on darwin the
52         # path to a linked library is taken from the library itself (the path
53         # is built-in the library)
54         LIBINAME_F:=libiname.lst
55         NAME_LD_FLAGS= -compatibility_version $(MAJOR_VER).$(MINOR_VER) \
56                                         -current_version $(MAJOR_VER).$(MINOR_VER).$(BUGFIX_VER) \
57                                         -install_name $(LIB_INSTALL_NAME)
58
59 else
60         LIB_NAME:=$(LIB_PREFIX)$(NAME)$(LIB_SUFFIX).$(MAJOR_VER).$(MINOR_VER)
61         LIB_RUNTIME_NAME:=$(LIB_PREFIX)$(NAME)$(LIB_SUFFIX).$(MAJOR_VER)
62         LIB_LINK_NAME:=$(LIB_PREFIX)$(NAME)$(LIB_SUFFIX)
63         NAME_LD_FLAGS= $(LIB_SONAME)$(LIB_RUNTIME_NAME)
64         LIBINAME_F:=
65 endif
66
67 ifeq    ($(strip $(compile_for_install)),yes)
68         LIB_INSTALL_NAME:=$(lib_target)/$(LIB_RUNTIME_NAME)
69 else
70         LIB_INSTALL_NAME:=$(shell pwd)/$(LIB_RUNTIME_NAME)
71 endif
72
73
74 COREPATH ?=../..
75
76 ALLDEP=Makefile $(COREPATH)/Makefile.sources $(COREPATH)/Makefile.rules \
77  $(COREPATH)/Makefile.libs $(COREPATH)/config.mak
78
79
80 ifeq ($(MAKELEVEL), 0)
81 # make called directly in the library dir!
82 else
83 # called by the main Makefile
84
85 ALLDEP+=$(COREPATH)/Makefile $(COREPATH)/Makefile.defs
86
87 endif
88
89 include $(COREPATH)/Makefile.sources
90
91
92 CFLAGS:=$(LIB_CFLAGS)
93 LDFLAGS:=$(LIB_LDFLAGS) $(NAME_LD_FLAGS)
94 NAME:=$(LIB_NAME)
95
96
97 include $(COREPATH)/Makefile.targets
98 include $(COREPATH)/Makefile.rules
99
100 ifeq    (,$(filter clean %clean clean% proper %proper proper%, $(MAKECMDGOALS)))
101 ifneq ($(strip $(LIBINAME_F)),)
102 -include $(LIBINAME_F)
103 ifneq ($(strip $(LIB_INSTALL_NAME)), $(strip $(COMPILED_INAME)))
104 $(shell rm -f $(LIBINAME_F))
105 endif
106 endif
107 endif
108
109 $(NAME): $(LIB_RUNTIME_NAME) $(LIB_LINK_NAME) $(LIBINAME_F)
110
111 $(LIB_RUNTIME_NAME):
112         -@ln -s $(LIB_NAME) $(LIB_RUNTIME_NAME)
113
114 $(LIB_LINK_NAME):
115 ifeq ($(OS), freebsd)
116         -@ln -s $(LIB_RUNTIME_NAME) $(LIB_LINK_NAME)
117 else
118         -@ln -s $(LIB_NAME) $(LIB_LINK_NAME)
119 endif
120
121 .PHONY: link_clean
122 link_clean:
123         -@rm -f $(LIB_RUNTIME_NAME)
124         -@rm -f $(LIB_LINK_NAME)
125
126 local-clean: link_clean
127
128 .PHONY: libiname_clean
129 libiname_clean:
130         -@rm -f libiname.lst
131
132 local-clean: libiname_clean
133
134 $(lib_prefix)/$(lib_dir):
135         mkdir -p $(lib_prefix)/$(lib_dir)
136
137 .PHONY: install
138 install: $(LIB_NAME) $(lib_prefix)/$(lib_dir) $(LIBINAME_F)
139 ifeq ($(OS), freebsd)
140         $(INSTALL_TOUCH) $(lib_prefix)/$(lib_dir)/$(LIB_RUNTIME_NAME)
141         $(INSTALL_LIB) $(LIB_NAME) $(lib_prefix)/$(lib_dir)/$(LIB_RUNTIME_NAME)
142         rm -f $(lib_prefix)/$(lib_dir)/$(LIB_LINK_NAME)
143         cd $(lib_prefix)/$(lib_dir) ; ln -s $(LIB_RUNTIME_NAME) $(LIB_LINK_NAME)
144 else
145         $(INSTALL_TOUCH) $(lib_prefix)/$(lib_dir)/$(LIB_NAME)
146         $(INSTALL_LIB) $(LIB_NAME) $(lib_prefix)/$(lib_dir)
147         rm -f $(lib_prefix)/$(lib_dir)/$(LIB_RUNTIME_NAME) \
148                         $(lib_prefix)/$(lib_dir)/$(LIB_LINK_NAME) 
149         cd $(lib_prefix)/$(lib_dir) ; ln -s $(LIB_NAME) $(LIB_RUNTIME_NAME) 
150         cd $(lib_prefix)/$(lib_dir) ; ln -s $(LIB_NAME) $(LIB_LINK_NAME) 
151 endif
152
153
154 .PHONY:install-if-newer
155 install-if-newer: $(lib_prefix)/$(lib_dir)/$(LIB_RUNTIME_NAME)
156
157 $(lib_prefix)/$(lib_dir)/$(LIB_RUNTIME_NAME): $(LIB_NAME) $(LIBINAME_F)
158         @$(MAKE) install
159
160
161 ifneq ($(strip $(LIBINAME_F)),)
162 $(LIBINAME_F): $(ALLDEP)
163         @echo "COMPILED_INAME:=$(LIB_INSTALL_NAME)" > $(LIBINAME_F)
164 endif
165
166 endif # ifeq ($(makefile_defs),1)
167 include $(COREPATH)/Makefile.cfg