Updated with Tizen:Base source codes
[external/procps.git] / proc / module.mk
1 # This file gets included into the main Makefile, in the top directory.
2
3 # Ideally, we want something like this:
4 #
5 # /lib/libproc.so.w        ELF soname ('w' is a digit, starting from 1)
6 # /lib/procps-x.y.z.so     file itself (x.y.z is the procps version)
7 # /lib/libproc.so          for linking, UNSUPPORTED
8 # /usr/lib/libproc.a       for linking, UNSUPPORTED
9 # proc/libproc.so.w        as above, if testing with LD_LIBRARY_PATH
10 # proc/whatever            if testing with LD_PRELOAD
11 # proc/libproc.a           for static build
12 #
13 # Without a stable ABI, there's no point in having any of that.
14 # Without a stable API, there's no point in having the *.a file.
15 #
16 # A new ELF soname is required for every big ABI change. To conserve
17 # numbers for future use, the ELF soname can be set equal to the
18 # file name until some future date when a stable ABI is declared.
19
20 SHARED     := 1
21
22 # for lib$(NAME).so and /usr/include/($NAME) and such
23 NAME       :=  proc
24
25 LIBVERSION := $(VERSION).$(SUBVERSION).$(MINORVERSION)
26 ABIVERSION := 0
27
28 SOFILE     := lib$(NAME)-$(LIBVERSION).so
29 ifneq ($(ABIVERSION),0)
30 SOLINK     := lib$(NAME).so
31 SONAME     := lib$(NAME).so.$(ABIVERSION)
32 else
33 SONAME     := $(SOFILE)
34 SOLINK     := $(SOFILE)
35 endif
36
37 ANAME      := lib$(NAME).a
38
39 ############
40
41 FPIC       := -fpic
42
43 ifeq ($(SHARED),1)
44 ALL        += proc/$(SONAME)
45 INSTALL    += ldconfig
46 LIBFLAGS   := -DSHARED=1 $(FPIC)
47 # This is in gcc 3.5, but exported functions must be marked.
48 #LIBFLAGS += $(call check_gcc,-fvisibility=hidden,)
49 LIBPROC    := proc/$(SONAME)
50 else
51 ALL        += proc/$(ANAME)
52 #INSTALL    += $(usr/lib)$(ANAME)
53 LIBFLAGS   := -DSHARED=0
54 LIBPROC    := proc/$(ANAME)
55 endif
56
57 LIBSRC :=  $(wildcard proc/*.c)
58 LIBHDR :=  $(wildcard proc/*.h)
59 LIBOBJ :=  $(LIBSRC:.c=.o)
60
61 # Separate rule for this directory, to use -fpic or -fPIC
62 $(filter-out proc/version.o,$(LIBOBJ)): proc/%.o: proc/%.c
63         $(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(LIBFLAGS) $< -o $@
64
65 LIB_X := COPYING module.mk library.map
66 TARFILES += $(LIBSRC) $(LIBHDR) $(addprefix proc/,$(LIB_X))
67
68
69 # Clean away all output files, .depend, and symlinks.
70 # Use wildcards in case the version has changed.
71 CLEAN += proc/.depend proc/lib*.so* proc/lib*.a $(LIBOBJ)
72 DIRS  += proc/
73
74 proc/$(ANAME): $(LIBOBJ)
75         $(AR) rcs $@ $^
76
77 #proc/$(SONAME): proc/library.map
78 proc/$(SONAME): $(LIBOBJ)
79         $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) -shared -Wl,-soname,$(SONAME) -Wl,--version-script=proc/library.map -o $@ $^ -lc
80
81
82 # AUTOMATIC DEPENDENCY GENERATION -- GCC AND GNUMAKE DEPENDENT
83 proc/.depend: $(LIBSRC) $(LIBHDR)
84         $(strip $(CC) $(ALL_CPPFLAGS) $(LIB_CFLAGS) -MM -MG $(LIBSRC) > $@)
85
86 ifneq ($(MAKECMDGOALS),clean)
87 ifneq ($(MAKECMDGOALS),tar)
88 ifneq ($(MAKECMDGOALS),extratar)
89 ifneq ($(MAKECMDGOALS),beta)
90 -include proc/.depend
91 endif
92 endif
93 endif
94 endif
95
96 #################### install rules ###########################
97
98 $(lib)$(SOFILE) : proc/$(SONAME)
99         $(install) --mode a=rx $< $@
100
101 ifneq ($(SOLINK),$(SOFILE))
102 .PHONY: $(lib)$(SOLINK)
103 $(lib)$(SOLINK) : $(lib)$(SOFILE)
104         cd $(lib) && $(ln_sf) $(SOFILE) $(SOLINK)
105 endif
106
107 ifneq ($(SONAME),$(SOFILE))
108 .PHONY: $(lib)$(SONAME)
109 $(lib)$(SONAME) : $(lib)$(SOFILE)
110         cd $(lib) && $(ln_sf) $(SOFILE) $(SONAME)
111 endif
112
113 .PHONY: ldconfig
114 ldconfig : $(lib)$(SONAME) $(lib)$(SOLINK)
115         $(ldconfig)
116
117 $(usr/lib)$(ANAME) : proc/$(ANAME)
118         $(install) --mode a=r $< $@
119
120 # Junk anyway... supposed to go in /usr/include/$(NAME)
121 #INSTALL += $(addprefix $(include),$(HDRFILES))
122 #
123 #$(addprefix $(include),$(HDRFILES)): $(include)% : proc/%
124 #$(include)% : proc/%
125 #       $(install) --mode a=r $< $@
126
127 ##################################################################
128
129 proc/version.o: proc/version.c proc/version.h
130         $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(LIBFLAGS) -DVERSION=\"$(VERSION)\" -DSUBVERSION=\"$(SUBVERSION)\" -DMINORVERSION=\"$(MINORVERSION)\" -c -o $@ $<