blob: 334794511550e96a7a155c9efb484b546f684ed1 [file] [log] [blame]
James Kuszmaul82f6c042021-01-17 11:30:16 -08001#
2# re.mk - common make rules
3#
4# Copyright (C) 2010 Creytiv.com
5#
6# Imported variables:
7#
8# ARCH Target architecture
9# CC Compiler
10# CROSS_COMPILE Cross-compiler prefix (optional)
11# EXTRA_CFLAGS Extra compiler flags appended to CFLAGS
12# EXTRA_LFLAGS Extra linker flags appended to LFLAGS
13# GCOV If non-empty, enable GNU Coverage testing
14# GPROF If non-empty, enable GNU Profiling
15# OPT_SIZE If non-empty, optimize for size
16# OPT_SPEED If non-empty, optimize for speed
17# PROJECT Project name
18# RELEASE Release build
19# SYSROOT System root of library and include files
20# SYSROOT_ALT Alternative system root of library and include files
21# USE_OPENSSL If non-empty, link to libssl library
22# USE_ZLIB If non-empty, link to libz library
23# VERSION Version number
24#
25# Exported variables:
26#
27# APP_LFLAGS Linker flags for applications using modules
28# BIN_SUFFIX Suffix for binary executables
29# CC Compiler
30# CCACHE Compiler ccache tool
31# CFLAGS Compiler flags
32# DFLAGS Dependency generator flags
33# LFLAGS Common linker flags
34# LIBS Libraries to link against
35# LIB_SUFFIX Suffix for shared libraries
36# MOD_LFLAGS Linker flags for dynamic modules
37# MOD_SUFFIX Suffix for dynamic modules
38# SH_LFLAGS Linker flags for shared libraries
39# USE_TLS Defined if TLS is available
40# USE_DTLS Defined if DTLS is available
41#
42
43
44ifneq ($(RELEASE),)
45CFLAGS += -DRELEASE
46OPT_SPEED=1
47endif
48
49
50# Default system root
51ifeq ($(SYSROOT),)
52SYSROOT := /usr
53endif
54
55# Alternative Systemroot
56ifeq ($(SYSROOT_ALT),)
57SYSROOT_ALT := $(shell [ -d /sw/include ] && echo "/sw")
58endif
59ifeq ($(SYSROOT_ALT),)
60SYSROOT_ALT := $(shell [ -d /opt/local/include ] && echo "/opt/local")
61endif
62
63ifneq ($(SYSROOT_ALT),)
64CFLAGS += -I$(SYSROOT_ALT)/include
65LFLAGS += -L$(SYSROOT_ALT)/lib
66endif
67
68
69##############################################################################
70#
71# Compiler section
72#
73# find compiler name & version
74
75ifeq ($(CC),)
76 CC := gcc
77endif
78ifeq ($(CC),cc)
79 CC := gcc
80endif
81LD := $(CC)
82CC_LONGVER := $(shell if $(CC) -v 2>/dev/null; then \
83 $(CC) -v 2>&1 ;\
84 else \
85 $(CC) -V 2>&1 ; \
86 fi )
87
88# find-out the compiler's name
89
90ifneq (,$(findstring gcc, $(CC_LONGVER)))
91 CC_NAME := gcc
92 CC_VER := $(word 1,$(CC)) $(shell $(CC) - --version|head -n 1|\
93 cut -d" " -f 3|\
94 sed -e 's/^.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/'\
95 -e 's/^[^0-9].*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/')
96 # sun sed is a little brain damaged => this complicated expression
97 MKDEP := $(CC) -MM
98 #transform gcc version into 2.9x, 3.x or 4.x
99 CC_SHORTVER := $(shell echo "$(CC_VER)" | cut -d" " -f 2| \
100 sed -e 's/[^0-9]*-\(.*\)/\1/'| \
101 sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-3]\..*/3.0/' -e \
102 's/3\.[0-3]/3.0/' -e 's/3\.[4-9]\..*/3.4/' -e\
103 's/3\.[4-9]/3.4/' -e 's/4\.[0-9]\..*/4.x/' -e\
104 's/4\.[0-9]/4.x/' )
105endif
106
107ifeq ($(CC_NAME),)
108ifneq (,$(findstring clang, $(CC_LONGVER)))
109 CC_NAME := clang
110 CC_SHORTVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
111 sed -e 's/.*version \([0-9]\.[0-9]\).*/\1/g' )
112 CC_VER := $(CC) $(CC_SHORTVER)
113 MKDEP := $(CC) -MM
114endif
115endif
116
117ifeq ($(CC_NAME),)
118ifneq (, $(findstring Sun, $(CC_LONGVER)))
119 CC_NAME := suncc
120 CC_SHORTVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
121 sed -e 's/.*\([0-9]\.[0-9]\).*/\1/g' )
122 CC_VER := $(CC) $(CC_SHORTVER)
123 MKDEP := $(CC) -xM1
124endif
125endif
126
127ifeq ($(CC_NAME),)
128ifneq (, $(findstring Intel(R) C++ Compiler, $(CC_LONGVER)))
129 # very nice: gcc compatible
130 CC_NAME := icc
131 CC_FULLVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
132 sed -e 's/.*Version \([0-9]\.[0-9]\.[0-9]*\).*/\1/g')
133 CC_SHORTVER := $(shell echo "$(CC_FULLVER)" | cut -d. -f1,2 )
134 CC_VER := $(CC) $(CC_FULLVER)
135 MKDEP := $(CC) -MM
136endif
137endif
138
139
140ifeq (,$(CC_NAME))
141#not found
142 CC_NAME := $(CC)
143 CC_SHORTVER := unknown
144 CC_VER := unknown
145 MKDEP := gcc -MM
146$(warning Unknown compiler $(CC)\; supported compilers: \
147 gcc, clang, sun cc, intel icc )
148endif
149
150
151# Compiler warning flags
152CFLAGS += -Wall
153CFLAGS += -Wmissing-declarations
154CFLAGS += -Wmissing-prototypes
155CFLAGS += -Wstrict-prototypes
156CFLAGS += -Wbad-function-cast
157CFLAGS += -Wsign-compare
158CFLAGS += -Wnested-externs
159CFLAGS += -Wshadow
160CFLAGS += -Waggregate-return
161CFLAGS += -Wcast-align
162
163
164ifeq ($(CC_SHORTVER),4.x)
165CFLAGS += -Wextra
166CFLAGS += -Wold-style-definition
167CFLAGS += -Wdeclaration-after-statement
168endif
169
170CFLAGS += -g
171ifneq ($(OPT_SPEED),)
172CFLAGS += -O3 # Optimize for speed - takes longer to compile!
173OPTIMIZE := 1
174endif
175ifneq ($(OPT_SIZE),)
176CFLAGS += -Os # Optimize for size - takes longer to compile!
177OPTIMIZE := 1
178endif
179
180ifneq ($(OPTIMIZE),)
181CFLAGS += -Wuninitialized
182ifneq ($(CC_SHORTVER), 2.9x)
183CFLAGS += -Wno-strict-aliasing
184endif
185endif
186
187# Compiler dependency flags
188ifeq ($(CC_SHORTVER), 2.9x)
189 DFLAGS = -MD
190else
191 DFLAGS = -MD -MF $(@:.o=.d) -MT $@
192endif
193
194
195##############################################################################
196#
197# OS section
198#
199
200MACHINE := $(shell $(CC) -dumpmachine)
201
202ifeq ($(CROSS_COMPILE),)
203OS := $(shell uname -s | sed -e s/SunOS/solaris/ | tr "[A-Z]" "[a-z]")
204endif
205
206
207ifneq ($(strip $(filter i386-mingw32 i486-mingw32 i586-mingw32msvc \
208 i686-w64-mingw32 x86_64-w64-mingw32 mingw32, \
209 $(MACHINE))),)
210 OS := win32
211ifeq ($(MACHINE), mingw32)
212 CROSS_COMPILE :=
213endif
214endif
215
216
217# default
218LIB_SUFFIX := .so
219MOD_SUFFIX := .so
220BIN_SUFFIX :=
221
222ifeq ($(OS),solaris)
223 CFLAGS += -fPIC -DSOLARIS
224 LIBS += -ldl -lresolv -lsocket -lnsl
225 LFLAGS += -fPIC
226 SH_LFLAGS += -G
227 MOD_LFLAGS +=
228 APP_LFLAGS +=
229 AR := ar
230 AFLAGS := cru
231endif
232ifeq ($(OS),linux)
233 CFLAGS += -fPIC -DLINUX
234 LIBS += -ldl
235 LFLAGS += -fPIC
236 SH_LFLAGS += -shared
237 MOD_LFLAGS +=
238 APP_LFLAGS += -rdynamic
239 AR := ar
240 AFLAGS := crD
241endif
242ifeq ($(OS),gnu)
243 CFLAGS += -fPIC -DGNU
244 LIBS += -ldl
245 LFLAGS += -fPIC
246 SH_LFLAGS += -shared
247 MOD_LFLAGS +=
248 APP_LFLAGS += -rdynamic
249 AR := ar
250 AFLAGS := cru
251endif
252ifeq ($(OS),darwin)
253 CFLAGS += -fPIC -dynamic -DDARWIN
254ifneq (,$(findstring Apple, $(CC_LONGVER)))
255 CFLAGS += -Wshorten-64-to-32
256endif
257 DFLAGS := -MD
258 LIBS += -lresolv
259 LFLAGS += -fPIC
260 SH_LFLAGS += -dynamiclib
261ifeq ($(CC_NAME),gcc)
262 SH_LFLAGS += -dylib
263endif
264ifneq ($(VERSION),)
265 SH_LFLAGS += -current_version $(VERSION)
266 SH_LFLAGS += -compatibility_version $(VERSION)
267endif
268 MOD_LFLAGS += -undefined dynamic_lookup
269 APP_LFLAGS +=
270 AR := ar
271 AFLAGS := cru
272 LIB_SUFFIX := .dylib
273 HAVE_KQUEUE := 1
274endif
275ifeq ($(OS),netbsd)
276 CFLAGS += -fPIC -DNETBSD
277 LFLAGS += -fPIC
278 SH_LFLAGS += -shared
279 MOD_LFLAGS +=
280 APP_LFLAGS += -rdynamic
281 AR := ar
282 AFLAGS := cru
283 HAVE_KQUEUE := 1
284endif
285ifeq ($(OS),freebsd)
286 CFLAGS += -fPIC -DFREEBSD
287 LFLAGS += -fPIC
288 SH_LFLAGS += -shared
289 MOD_LFLAGS +=
290 APP_LFLAGS += -rdynamic
291 AR := ar
292 AFLAGS := cru
293 HAVE_KQUEUE := 1
294endif
295ifeq ($(OS),gnu/kfreebsd)
296 CFLAGS += -fPIC -DKFREEBSD -D_GNU_SOURCE
297 LFLAGS += -fPIC
298 SH_LFLAGS += -shared
299 MOD_LFLAGS +=
300 APP_LFLAGS += -rdynamic
301 AR := ar
302 AFLAGS := cru
303 HAVE_KQUEUE := 1
304endif
305ifeq ($(OS),dragonfly)
306 CFLAGS += -fPIC -DDRAGONFLY
307 LFLAGS += -fPIC
308 SH_LFLAGS += -shared
309 MOD_LFLAGS +=
310 APP_LFLAGS += -rdynamic
311 AR := ar
312 AFLAGS := cru
313 HAVE_KQUEUE := 1
314endif
315ifeq ($(OS),openbsd)
316 CFLAGS += -fPIC -DOPENBSD
317 LFLAGS += -fPIC
318 SH_LFLAGS += -shared
319 MOD_LFLAGS +=
320 APP_LFLAGS += -rdynamic
321 AR := ar
322 AFLAGS := cru
323 HAVE_KQUEUE := 1
324 HAVE_ARC4RANDOM := 1
325endif
326ifeq ($(OS),win32)
327 CFLAGS += -DWIN32 -D_WIN32_WINNT=0x0501 -D__ssize_t_defined
328 LIBS += -lwsock32 -lws2_32 -liphlpapi
329 LFLAGS +=
330 SH_LFLAGS += -shared
331 MOD_LFLAGS +=
332 APP_LFLAGS += -Wl,--export-all-symbols
333 AR := ar
334 AFLAGS := cru
335 CROSS_COMPILE ?= $(MACHINE)-
336 RANLIB := $(CROSS_COMPILE)ranlib
337 LIB_SUFFIX := .dll
338 MOD_SUFFIX := .dll
339 BIN_SUFFIX := .exe
340 SYSROOT := /usr/$(MACHINE)/
341endif
342
343CFLAGS += -DOS=\"$(OS)\"
344
345ifeq ($(CC_SHORTVER),2.9x)
346CFLAGS += -Wno-long-long
347else
348CFLAGS += -std=c99
349PEDANTIC := 1
350endif # CC_SHORTVER
351
352ifneq ($(PEDANTIC),)
353CFLAGS += -pedantic
354endif
355
356
357ifeq ($(OS),)
358$(warning Could not detect OS)
359endif
360
361
362##############################################################################
363#
364# Architecture section
365#
366
367
368ifeq ($(ARCH),)
369ifeq ($(CC_NAME),$(filter $(CC_NAME),gcc clang))
370PREDEF := $(shell $(CC) -dM -E -x c $(EXTRA_CFLAGS) $(CFLAGS) /dev/null)
371
372ifneq ($(strip $(filter i386 __i386__ __i386 _M_IX86 __X86__ _X86_, \
373 $(PREDEF))),)
374ARCH := i386
375endif
376
377ifneq ($(strip $(filter __i486__,$(PREDEF))),)
378ARCH := i486
379endif
380
381ifneq ($(strip $(filter __i586__,$(PREDEF))),)
382ARCH := i586
383endif
384
385ifneq ($(strip $(filter __i686__ ,$(PREDEF))),)
386ARCH := i686
387endif
388
389ifneq ($(strip $(filter __amd64__ __amd64 __x86_64__ __x86_64, \
390 $(PREDEF))),)
391ARCH := x86_64
392endif
393
394ifneq ($(strip $(filter __arm__ __thumb__,$(PREDEF))),)
395
396ifneq ($(strip $(filter __ARM_ARCH_6__,$(PREDEF))),)
397ARCH := arm6
398else
399ARCH := arm
400endif
401
402endif
403
404ifneq ($(strip $(filter __arm64__ ,$(PREDEF))),)
405ARCH := arm64
406endif
407
408ifneq ($(strip $(filter __mips__ __mips, $(PREDEF))),)
409ARCH := mips
410endif
411
412ifneq ($(strip $(filter __powerpc __powerpc__ __POWERPC__ __ppc__ \
413 _ARCH_PPC, $(PREDEF))),)
414ARCH := ppc
415endif
416
417ifneq ($(strip $(filter __ppc64__ _ARCH_PPC64 , $(PREDEF))),)
418ARCH := ppc64
419endif
420
421ifneq ($(strip $(filter __sparc__ __sparc __sparcv8 , $(PREDEF))),)
422
423ifneq ($(strip $(filter __sparcv9 __sparc_v9__ , $(PREDEF))),)
424ARCH := sparc64
425else
426ARCH := sparc
427endif
428
429endif
430
431endif
432endif
433
434
435ifeq ($(ARCH),)
436$(warning Could not detect ARCH)
437endif
438
439
440CFLAGS += -DARCH=\"$(ARCH)\"
441
442ifeq ($(ARCH),mipsel)
443CFLAGS += -march=mips32
444endif
445
446
447##############################################################################
448#
449# External libraries section
450#
451
452USE_OPENSSL := $(shell [ -f $(SYSROOT)/include/openssl/ssl.h ] || \
453 [ -f $(SYSROOT)/local/include/openssl/ssl.h ] || \
454 [ -f $(SYSROOT_ALT)/include/openssl/ssl.h ] && echo "yes")
455
456ifneq ($(USE_OPENSSL),)
457CFLAGS += -DUSE_OPENSSL -DUSE_TLS
458LIBS += -lssl -lcrypto
459USE_TLS := yes
460
461USE_OPENSSL_DTLS := $(shell [ -f $(SYSROOT)/include/openssl/dtls1.h ] || \
462 [ -f $(SYSROOT)/local/include/openssl/dtls1.h ] || \
463 [ -f $(SYSROOT_ALT)/include/openssl/dtls1.h ] && echo "yes")
464
465USE_OPENSSL_SRTP := $(shell [ -f $(SYSROOT)/include/openssl/srtp.h ] || \
466 [ -f $(SYSROOT)/local/include/openssl/srtp.h ] || \
467 [ -f $(SYSROOT_ALT)/include/openssl/srtp.h ] && echo "yes")
468
469ifneq ($(USE_OPENSSL_DTLS),)
470CFLAGS += -DUSE_OPENSSL_DTLS -DUSE_DTLS
471USE_DTLS := yes
472endif
473
474ifneq ($(USE_OPENSSL_SRTP),)
475CFLAGS += -DUSE_OPENSSL_SRTP -DUSE_DTLS_SRTP
476USE_DTLS_SRTP := yes
477endif
478
479USE_OPENSSL_AES := yes
480USE_OPENSSL_HMAC := yes
481
482endif
483
484
485USE_ZLIB := $(shell [ -f $(SYSROOT)/include/zlib.h ] || \
486 [ -f $(SYSROOT)/local/include/zlib.h ] || \
487 [ -f $(SYSROOT_ALT)/include/zlib.h ] && echo "yes")
488
489ifneq ($(USE_ZLIB),)
490CFLAGS += -DUSE_ZLIB
491LIBS += -lz
492endif
493
494
495ifneq ($(OS),win32)
496
497HAVE_PTHREAD := $(shell [ -f $(SYSROOT)/include/pthread.h ] && echo "1")
498ifneq ($(HAVE_PTHREAD),)
499HAVE_PTHREAD_RWLOCK := 1
500CFLAGS += -DHAVE_PTHREAD
501HAVE_LIBPTHREAD := 1
502ifneq ($(HAVE_LIBPTHREAD),)
503LIBS += -lpthread
504endif
505endif
506
507ifneq ($(ARCH),mipsel)
508HAVE_GETIFADDRS := $(shell [ -f $(SYSROOT)/include/ifaddrs.h ] && echo "1")
509ifneq ($(HAVE_GETIFADDRS),)
510CFLAGS += -DHAVE_GETIFADDRS
511endif
512endif
513
514HAVE_STRERROR_R := 1
515ifneq ($(HAVE_STRERROR_R),)
516CFLAGS += -DHAVE_STRERROR_R
517endif
518
519endif
520
521HAVE_GETOPT := $(shell [ -f $(SYSROOT)/include/getopt.h ] && echo "1")
522ifneq ($(HAVE_GETOPT),)
523CFLAGS += -DHAVE_GETOPT
524endif
525HAVE_INTTYPES_H := $(shell [ -f $(SYSROOT)/include/inttypes.h ] && echo "1")
526ifneq ($(HAVE_INTTYPES_H),)
527CFLAGS += -DHAVE_INTTYPES_H
528endif
529HAVE_NET_ROUTE_H := $(shell [ -f $(SYSROOT)/include/net/route.h ] && echo "1")
530ifneq ($(HAVE_NET_ROUTE_H),)
531CFLAGS += -DHAVE_NET_ROUTE_H
532endif
533HAVE_SYS_SYSCTL_H := \
534 $(shell [ -f $(SYSROOT)/include/sys/sysctl.h ] || \
535 [ -f $(SYSROOT)/include/$(MACHINE)/sys/sysctl.h ] \
536 && echo "1")
537ifneq ($(HAVE_SYS_SYSCTL_H),)
538CFLAGS += -DHAVE_SYS_SYSCTL_H
539endif
540
541CFLAGS += -DHAVE_STDBOOL_H
542
543HAVE_INET6 := 1
544ifneq ($(HAVE_INET6),)
545CFLAGS += -DHAVE_INET6
546endif
547
548ifeq ($(OS),win32)
549CFLAGS += -DHAVE_SELECT
550CFLAGS += -DHAVE_IO_H
551else
552HAVE_SYSLOG := $(shell [ -f $(SYSROOT)/include/syslog.h ] && echo "1")
553HAVE_DLFCN_H := $(shell [ -f $(SYSROOT)/include/dlfcn.h ] && echo "1")
554ifneq ($(OS),darwin)
555HAVE_EPOLL := $(shell [ -f $(SYSROOT)/include/sys/epoll.h ] || \
556 [ -f $(SYSROOT)/include/$(MACHINE)/sys/epoll.h ] \
557 && echo "1")
558endif
559
560HAVE_RESOLV := $(shell [ -f $(SYSROOT)/include/resolv.h ] && echo "1")
561
562ifneq ($(HAVE_RESOLV),)
563CFLAGS += -DHAVE_RESOLV
564endif
565ifneq ($(HAVE_SYSLOG),)
566CFLAGS += -DHAVE_SYSLOG
567endif
568
569HAVE_INET_NTOP := 1
570
571CFLAGS += -DHAVE_FORK
572
573ifneq ($(HAVE_INET_NTOP),)
574CFLAGS += -DHAVE_INET_NTOP
575endif
576CFLAGS += -DHAVE_PWD_H
577ifneq ($(OS),darwin)
578CFLAGS += -DHAVE_POLL # Darwin: poll() does not support devices
579HAVE_INET_PTON := 1
580endif
581ifneq ($(HAVE_INET_PTON),)
582CFLAGS += -DHAVE_INET_PTON
583endif
584CFLAGS += -DHAVE_SELECT -DHAVE_SELECT_H
585CFLAGS += -DHAVE_SETRLIMIT
586CFLAGS += -DHAVE_SIGNAL
587CFLAGS += -DHAVE_SYS_TIME_H
588ifneq ($(HAVE_EPOLL),)
589CFLAGS += -DHAVE_EPOLL
590endif
591ifneq ($(HAVE_KQUEUE),)
592CFLAGS += -DHAVE_KQUEUE
593endif
594CFLAGS += -DHAVE_UNAME
595CFLAGS += -DHAVE_UNISTD_H
596CFLAGS += -DHAVE_STRINGS_H
597endif
598
599ifneq ($(HAVE_ARC4RANDOM),)
600CFLAGS += -DHAVE_ARC4RANDOM
601endif
602
603
604##############################################################################
605#
606# Misc tools section
607#
608CCACHE := $(shell [ -e /usr/bin/ccache ] 2>/dev/null \
609 || [ -e /opt/local/bin/ccache ] \
610 && echo "ccache")
611CFLAGS += -DVERSION=\"$(VERSION)\"
612CFLAGS += \
613 -DVER_MAJOR=$(VER_MAJOR) \
614 -DVER_MINOR=$(VER_MINOR) \
615 -DVER_PATCH=$(VER_PATCH)
616
617
618# Enable gcov Coverage testing
619#
620# - generated during build: .gcno files
621# - generated during exec: .gcda files
622#
623ifneq ($(GCOV),)
624CFLAGS += -fprofile-arcs -ftest-coverage
625LFLAGS += -fprofile-arcs -ftest-coverage
626# Disable ccache
627CCACHE :=
628endif
629
630# gprof - GNU Profiling
631#
632# - generated during exec: gmon.out
633#
634ifneq ($(GPROF),)
635CFLAGS += -pg
636LFLAGS += -pg
637# Disable ccache
638CCACHE :=
639endif
640
641CC := $(CCACHE) $(CC)
642CFLAGS += $(EXTRA_CFLAGS)
643LFLAGS += $(EXTRA_LFLAGS)
644
645BUILD := build-$(ARCH)
646
647
648default: all
649
650.PHONY: distclean
651distclean:
652 @rm -rf build* *core*
653 @rm -f *stamp $(BIN)
654 @rm -f `find . -name "*.[oda]"` `find . -name "*.so"`
655 @rm -f `find . -name "*~"` `find . -name "\.\#*"`
656 @rm -f `find . -name "*.orig"` `find . -name "*.rej"`
657 @rm -f `find . -name "*.previous"` `find . -name "*.gcov"`
658 @rm -f `find . -name "*.exe"` `find . -name "*.dll"`
659 @rm -f `find . -name "*.dylib"`
660
661.PHONY: info
662info:
663 @echo "info - $(PROJECT) version $(VERSION)"
664 @echo " MODULES: $(MODULES)"
665# @echo " SRCS: $(SRCS)"
666 @echo " MACHINE: $(MACHINE)"
667 @echo " ARCH: $(ARCH)"
668 @echo " OS: $(OS)"
669 @echo " BUILD: $(BUILD)"
670 @echo " CCACHE: $(CCACHE)"
671 @echo " CC: $(CC_NAME) $(CC_SHORTVER)"
672 @echo " CFLAGS: $(CFLAGS)"
673 @echo " DFLAGS: $(DFLAGS)"
674 @echo " LFLAGS: $(LFLAGS)"
675 @echo " SH_LFLAGS: $(SH_LFLAGS)"
676 @echo " MOD_LFLAGS: $(MOD_LFLAGS)"
677 @echo " APP_LFLAGS: $(APP_LFLAGS)"
678 @echo " LIBS: $(LIBS)"
679 @echo " LIBRE_MK: $(LIBRE_MK)"
680 @echo " LIBRE_INC: $(LIBRE_INC)"
681 @echo " LIBRE_SO: $(LIBRE_SO)"
682 @echo " USE_OPENSSL: $(USE_OPENSSL)"
683 @echo " USE_OPENSSL_AES: $(USE_OPENSSL_AES)"
684 @echo " USE_OPENSSL_HMAC: $(USE_OPENSSL_HMAC)"
685 @echo " USE_TLS: $(USE_TLS)"
686 @echo " USE_DTLS: $(USE_DTLS)"
687 @echo " USE_DTLS_SRTP: $(USE_DTLS_SRTP)"
688 @echo " USE_ZLIB: $(USE_ZLIB)"
689 @echo " GCOV: $(GCOV)"
690 @echo " GPROF: $(GPROF)"
691 @echo " CROSS_COMPILE: $(CROSS_COMPILE)"
692 @echo " SYSROOT: $(SYSROOT)"
693 @echo " SYSROOT_ALT: $(SYSROOT_ALT)"
694 @echo " LIB_SUFFIX: $(LIB_SUFFIX)"
695 @echo " MOD_SUFFIX: $(MOD_SUFFIX)"
696 @echo " BIN_SUFFIX: $(BIN_SUFFIX)"
697
698
699##############################################################################
700#
701# Packaging section
702#
703TAR_SRC := $(PROJECT)-$(VERSION)
704
705release:
706 @rm -rf ../$(TAR_SRC)
707 @svn export . ../$(TAR_SRC)
708 @if [ -f ../$(TAR_SRC)/mk/exclude ]; then \
709 cat ../$(TAR_SRC)/mk/exclude \
710 | sed 's|^|../$(TAR_SRC)/|' | xargs -t rm -rf ; \
711 rm -f ../$(TAR_SRC)/mk/exclude ; \
712 fi
713 @cd .. && rm -f $(TAR_SRC).tar.gz \
714 && tar -zcf $(TAR_SRC).tar.gz $(TAR_SRC) \
715 && echo "created release tarball `pwd`/$(TAR_SRC).tar.gz"
716
717tar:
718 @rm -rf ../$(TAR_SRC)
719 @svn export . ../$(TAR_SRC)
720 @cd .. && rm -f $(TAR_SRC).tar.gz \
721 && tar -zcf $(TAR_SRC).tar.gz $(TAR_SRC) \
722 && echo "created source tarball `pwd`/$(TAR_SRC).tar.gz"
723
724
725git_release:
726 git archive --format=tar --prefix=$(PROJECT)-$(VERSION)/ v$(VERSION) \
727 | gzip > ../$(PROJECT)-$(VERSION).tar.gz
728
729
730git_snapshot:
731 git archive --format=tar --prefix=$(PROJECT)-$(VERSION)/ HEAD \
732 | gzip > ../$(PROJECT)-$(VERSION).tar.gz
733
734
735# Debian
736.PHONY: deb
737deb:
738 dpkg-buildpackage -rfakeroot
739
740.PHONY: debclean
741debclean:
742 @rm -rf build-stamp configure-stamp debian/files debian/$(PROJECT) \
743 debian/lib$(PROJECT) debian/lib$(PROJECT)-dev debian/tmp \
744 debian/.debhelper debian/*.debhelper debian/*.debhelper.log \
745 debian/*.substvars
746
747# RPM
748RPM := $(shell [ -d /usr/src/rpm ] 2>/dev/null && echo "rpm")
749ifeq ($(RPM),)
750RPM := $(shell [ -d /usr/src/redhat ] 2>/dev/null && echo "redhat")
751endif
752.PHONY: rpm
753rpm: tar
754 sudo cp ../$(PROJECT)-$(VERSION).tar.gz /usr/src/$(RPM)/SOURCES
755 sudo rpmbuild -ba rpm/$(PROJECT).spec
756
757
758##############################################################################
759#
760# Library and header files location section - in prioritised order
761#
762# - relative path
763# - local installation
764# - system installation
765#
766
767LIBRE_PATH := ../re
768
769# Include path
770LIBRE_INC := $(shell [ -f $(LIBRE_PATH)/include/re.h ] && \
771 echo "$(LIBRE_PATH)/include")
772ifeq ($(LIBRE_INC),)
773LIBRE_INC := $(shell [ -f /usr/local/include/re/re.h ] && \
774 echo "/usr/local/include/re")
775endif
776ifeq ($(LIBRE_INC),)
777LIBRE_INC := $(shell [ -f /usr/include/re/re.h ] && echo "/usr/include/re")
778endif
779
780# Library path
781LIBRE_SO := $(shell [ -f $(LIBRE_PATH)/libre$(LIB_SUFFIX) ] \
782 && echo "$(LIBRE_PATH)")
783ifeq ($(LIBRE_SO),)
784LIBRE_SO := $(shell [ -f /usr/local/lib/libre$(LIB_SUFFIX) ] \
785 && echo "/usr/local/lib")
786endif
787ifeq ($(LIBRE_SO),)
788LIBRE_SO := $(shell [ -f /usr/lib/libre$(LIB_SUFFIX) ] && echo "/usr/lib")
789endif
790ifeq ($(LIBRE_SO),)
791LIBRE_SO := $(shell [ -f /usr/lib64/libre$(LIB_SUFFIX) ] && echo "/usr/lib64")
792endif
793
794
795###############################################################################
796#
797# Clang section
798#
799
800CLANG_OPTIONS := -Iinclude -I$(LIBRE_INC) $(CFLAGS)
801CLANG_IGNORE :=
802CLANG_SRCS += $(filter-out $(CLANG_IGNORE), $(patsubst %,src/%,$(SRCS)))
803
804clang:
805 @clang --analyze $(CLANG_OPTIONS) $(CLANG_SRCS)
806 @rm -f *.plist
807
808
809###############################################################################
810#
811# Documentation section
812#
813DOX_DIR=../$(PROJECT)-dox
814DOX_TAR=$(PROJECT)-dox-$(VERSION)
815
816$(DOX_DIR):
817 @mkdir $@
818
819$(DOX_DIR)/Doxyfile: mk/Doxyfile Makefile
820 @cp $< $@
821 @perl -pi -e 's/PROJECT_NUMBER\s*=.*/PROJECT_NUMBER = $(VERSION)/' \
822 $(DOX_DIR)/Doxyfile
823
824.PHONY:
825dox: $(DOX_DIR) $(DOX_DIR)/Doxyfile
826 @doxygen $(DOX_DIR)/Doxyfile 2>&1 | grep -v DEBUG_ ; true
827 @cd .. && rm -f $(DOX_TAR).tar.gz && \
828 tar -zcf $(DOX_TAR).tar.gz $(PROJECT)-dox > /dev/null && \
829 echo "Doxygen docs in `pwd`/$(DOX_TAR).tar.gz"