]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libbsd/lib/contrib/Makefile
eac96f3c1eeeba4877a1ea78b0dbac70d1ebf2c1
[l4.git] / l4 / pkg / libbsd / lib / contrib / Makefile
1 LIB_NAME := libbsd
2 LIB_VERSION_MAJOR := 0
3 LIB_VERSION_MINOR := 1
4 LIB_VERSION_MICRO := 4
5 LIB_VERSION := $(LIB_VERSION_MAJOR).$(LIB_VERSION_MINOR).$(LIB_VERSION_MICRO)
6
7 LIB_PKGCONFIG := $(LIB_NAME).pc
8 LIB_STATIC := $(LIB_NAME).a
9 LIB_SHARED_SO := $(LIB_NAME).so
10 LIB_SONAME := $(LIB_SHARED_SO).$(LIB_VERSION_MAJOR)
11 LIB_SHARED := $(LIB_SONAME).$(LIB_VERSION_MINOR).$(LIB_VERSION_MICRO)
12
13 TAR_NAME := $(LIB_NAME)-$(LIB_VERSION)
14 TAR_FILE := $(TAR_NAME).tar.gz
15
16 LIB_DIST := \
17         Makefile \
18         README \
19         ChangeLog \
20         Versions \
21         $(LIB_PKGCONFIG).in
22
23 LIB_SRCS := \
24         arc4random.c \
25         bsd_getopt.c \
26         err.c \
27         fgetln.c \
28         heapsort.c \
29         humanize_number.c \
30         inet_net_pton.c \
31         hash/md5.c hash/md5hl.c \
32         setmode.c \
33         strmode.c \
34         strlcat.c strlcpy.c \
35         fmtcheck.c \
36         nlist.c \
37         progname.c \
38         vis.c unvis.c
39 LIB_SRCS := $(patsubst %,src/%,$(LIB_SRCS))
40
41 LIB_GEN_SRCS := \
42         man/md5.3bsd \
43         src/hash/md5hl.c
44
45 LIB_INCLUDES := \
46         bsd/err.h \
47         bsd/getopt.h \
48         bsd/inet.h \
49         bsd/ip_icmp.h \
50         bsd/random.h \
51         bsd/queue.h \
52         bsd/md5.h \
53         bsd/string.h \
54         bsd/bsd.h \
55         bsd/cdefs.h \
56         bsd/stdlib.h \
57         nlist.h \
58         vis.h \
59         libutil.h
60
61 LIB_MANS := \
62         arc4random.3 \
63         arc4random_addrandom.3 \
64         arc4random_stir.3 \
65         strlcpy.3 \
66         strlcat.3 \
67         fgetln.3 \
68         humanize_number.3 \
69         fmtcheck.3 \
70         nlist.3 \
71         setmode.3 \
72         getmode.3 \
73         strmode.3 \
74         md5.3bsd
75 LIB_MANS := $(patsubst %,man/%,$(LIB_MANS))
76
77 LIB_STATIC_OBJS := $(LIB_SRCS:%.c=%.o)
78 LIB_SHARED_OBJS := $(LIB_SRCS:%.c=%.lo)
79
80 # Set default value for compilation
81 CFLAGS ?= -g -Wall -Wextra -Wno-unused-variable
82
83 MK_CFLAGS := -Iinclude/ -include bsd/bsd.h -D_GNU_SOURCE -D__REENTRANT
84
85 prefix          = /usr
86 exec_prefix     =
87 libdir          = ${exec_prefix}/lib
88 usrlibdir       = ${prefix}/lib
89 includedir      = ${prefix}/include
90 pkgconfigdir    = ${usrlibdir}/pkgconfig
91 mandir          = ${prefix}/share/man
92
93 .PHONY: libs
94 libs: $(LIB_STATIC) $(LIB_SHARED_SO) $(LIB_PKGCONFIG)
95
96 .PHONY: man
97 man: $(LIB_MANS)
98
99 %.lo: %.c
100         $(CC) -o $@ $(MK_CFLAGS) $(CFLAGS) -DPIC -fPIC -c $<
101
102 %.o: %.c
103         $(CC) -o $@ $(MK_CFLAGS) $(CFLAGS) -c $<
104
105 man/md5.3bsd:  man/mdX.3
106         sed -e 's/mdX/md5/g' -e 's/mdY/md4/g' -e 's/MDX/MD5/g' $< > $@
107
108 src/hash/md5hl.c: src/hash/helper.c
109         sed -e 's:hashinc:bsd/md5.h:g' -e 's:HASH:MD5:g' $< > $@
110
111 $(LIB_PKGCONFIG): $(LIB_PKGCONFIG).in
112         sed -e 's:@VERSION@:$(LIB_VERSION):' \
113             -e 's:@prefix@:$(value prefix):' \
114             -e 's:@exec_prefix@:$(value exec_prefix):' \
115             -e 's:@libdir@:$(value usrlibdir):' \
116             -e 's:@includedir@:$(value includedir):' \
117             $< > $@
118
119 $(LIB_STATIC): $(LIB_STATIC_OBJS)
120         ar rcs $@ $^
121
122 $(LIB_SHARED_SO): $(LIB_SONAME)
123         ln -fs $^ $@
124
125 $(LIB_SONAME): $(LIB_SHARED)
126         ln -fs $^ $@
127
128 $(LIB_SHARED): $(LIB_SHARED_OBJS)
129         gcc -shared \
130           -Wl,-soname -Wl,$(LIB_SONAME) \
131           -Wl,--version-script=Versions \
132           -o $@ $^
133
134 .PHONY: ChangeLog
135 ChangeLog:
136         -git log --stat -C >$@
137
138 .PHONY: dist
139 dist: ChangeLog
140         mkdir $(TAR_NAME)
141         cp -a include src man $(LIB_DIST) $(TAR_NAME)
142         tar czf $(TAR_FILE) --exclude=.gitignore $(TAR_NAME)
143         rm -rf $(TAR_NAME)
144         gpg -a -b $(TAR_FILE)
145
146 .PHONY: install
147 install: libs man
148         mkdir -p $(DESTDIR)/$(libdir)
149         mkdir -p $(DESTDIR)/$(usrlibdir)
150         mkdir -p $(DESTDIR)/$(includedir)/bsd/
151         mkdir -p $(DESTDIR)/$(mandir)/man3
152         mkdir -p $(DESTDIR)/$(pkgconfigdir)
153         install -m644 $(LIB_STATIC) $(DESTDIR)/$(usrlibdir)
154         install -m644 $(LIB_SHARED) $(DESTDIR)/$(libdir)
155         for i in $(LIB_INCLUDES); do \
156           install -m644 include/$$i $(DESTDIR)/$(includedir)/$$i; \
157         done
158         install -m644 $(LIB_MANS) $(DESTDIR)/$(mandir)/man3
159         install -m644 $(LIB_PKGCONFIG) $(DESTDIR)/$(pkgconfigdir)
160 ifeq ($(libdir),$(usrlibdir))
161         # If both dirs are the same, do a relative symlink.
162         ln -sf $(LIB_SHARED) $(DESTDIR)/$(usrlibdir)/$(LIB_SHARED_SO)
163 else
164         # Otherwise, do an absolute one.
165         ln -sf $(libdir)/$(LIB_SHARED) $(DESTDIR)/$(usrlibdir)/$(LIB_SHARED_SO)
166 endif
167         ln -sf $(LIB_SHARED) $(DESTDIR)/$(libdir)/$(LIB_SONAME)
168
169 .PHONY: clean
170 clean:
171         rm -f $(LIB_PKGCONFIG)
172         rm -f $(LIB_GEN_SRCS)
173         rm -f $(LIB_STATIC_OBJS)
174         rm -f $(LIB_STATIC)
175         rm -f $(LIB_SHARED_OBJS)
176         rm -f $(LIB_SHARED) $(LIB_SONAME) $(LIB_SHARED_SO)
177