Fix a build dependency error
[platform/upstream/crda.git] / Makefile
1 # Modify as you see fit, note this is built into crda,
2 # so if you change it here you will have to change crda.c
3 REG_BIN?=/usr/lib/crda/regulatory.bin
4 REG_GIT?=git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-regdb.git
5
6 PREFIX ?= /usr/
7 MANDIR ?= $(PREFIX)/share/man/
8
9 SBINDIR ?= /usr/sbin/
10
11 # Use a custom CRDA_UDEV_LEVEL when callling make install to
12 # change your desired level for the udev regulatory.rules
13 CRDA_UDEV_LEVEL?=85
14 UDEV_LEVEL=$(CRDA_UDEV_LEVEL)-
15 # You can customize this if your distributions uses
16 # a different location.
17 UDEV_RULE_DIR?=/usr/lib/udev/rules.d/
18
19 # If your distribution requires a custom pubkeys dir
20 # you must update this variable to reflect where the
21 # keys are put when building. For example you can run
22 # with make PUBKEY_DIR=/usr/lib/crda/pubkeys
23 PUBKEY_DIR?=pubkeys
24 RUNTIME_PUBKEY_DIR?=/etc/wireless-regdb/pubkeys
25
26 # Apply ASLR
27 CFLAGS += -fPIE
28 LDFLAGS += -pie
29
30 CFLAGS += -Wall -g
31
32 all: all_noverify verify
33
34 all_noverify: crda intersect regdbdump
35
36 ifeq ($(USE_OPENSSL),1)
37 CFLAGS += -DUSE_OPENSSL -DPUBKEY_DIR=\"$(RUNTIME_PUBKEY_DIR)\" `pkg-config --cflags openssl`
38 LDLIBS += `pkg-config --libs openssl`
39
40 reglib.o: keys-ssl.c
41
42 else
43 CFLAGS += -DUSE_GCRYPT
44 LDLIBS += -lgcrypt
45
46 reglib.o: keys-gcrypt.c
47
48 endif
49 MKDIR ?= mkdir -p
50 INSTALL ?= install
51
52 NL1FOUND := $(shell pkg-config --atleast-version=1 libnl-1 && echo Y)
53 NL2FOUND := $(shell pkg-config --atleast-version=2 libnl-2.0 && echo Y)
54 NL3FOUND := $(shell pkg-config --atleast-version=3 libnl-3.0 && echo Y)
55 NL32FOUND := $(shell pkg-config --atleast-version=3 libnl-3.2 && echo Y)
56
57 ifeq ($(NL32FOUND),Y)
58 CFLAGS += -DCONFIG_LIBNL30
59 NLLIBS += $(shell pkg-config --libs libnl-genl-3.2)
60 NLLIBNAME = libnl-3.2
61 else
62         ifeq ($(NL3FOUND),Y)
63         CFLAGS += -DCONFIG_LIBNL30
64         NLLIBS += $(shell pkg-config --libs libnl-genl-3.0)
65         NLLIBNAME = libnl-3.0
66         else
67                 ifeq ($(NL2FOUND),Y)
68                 CFLAGS += -DCONFIG_LIBNL20
69                 NLLIBS += -lnl-genl
70                 NLLIBNAME = libnl-2.0
71                 else
72                         ifeq ($(NL1FOUND),Y)
73                         NLLIBNAME = libnl-1
74                         endif
75                 endif
76         endif
77 endif
78
79 ifeq ($(NLLIBNAME),)
80 $(error Cannot find development files for any supported version of libnl)
81 endif
82
83 NLLIBS += `pkg-config --libs $(NLLIBNAME)`
84 CFLAGS += `pkg-config --cflags $(NLLIBNAME)`
85
86 ifeq ($(V),1)
87 Q=
88 NQ=@true
89 else
90 Q=@
91 NQ=@echo
92 endif
93
94 $(REG_BIN):
95         $(NQ) '  EXIST ' $(REG_BIN)
96         $(NQ)
97         $(NQ) ERROR: The file: $(REG_BIN) is missing. You need this in place in order
98         $(NQ) to verify CRDA. You can get it from:
99         $(NQ)
100         $(NQ) $(REG_GIT)
101         $(NQ)
102         $(NQ) "Once cloned (no need to build) cp regulatory.bin to $(REG_BIN)"
103         $(NQ) "Use \"make noverify\" to disable verification"
104         $(NQ)
105         $(Q) exit 1
106
107 keys-%.c: utils/key2pub.py $(wildcard $(PUBKEY_DIR)/*.pem)
108         $(NQ) '  GEN ' $@
109         $(NQ) '  Trusted pubkeys:' $(wildcard $(PUBKEY_DIR)/*.pem)
110         $(Q)./utils/key2pub.py --$* $(wildcard $(PUBKEY_DIR)/*.pem) $@
111
112 %.o: %.c regdb.h reglib.h
113         $(NQ) '  CC  ' $@
114         $(Q)$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
115
116 crda: reglib.o crda.o
117         $(NQ) '  LD  ' $@
118         $(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(NLLIBS)
119
120 regdbdump: reglib.o regdbdump.o print-regdom.o
121         $(NQ) '  LD  ' $@
122         $(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
123
124 intersect: reglib.o intersect.o print-regdom.o
125         $(NQ) '  LD  ' $@
126         $(Q)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
127
128 verify: $(REG_BIN) regdbdump
129         $(NQ) '  CHK  $(REG_BIN)'
130         $(Q)./regdbdump $(REG_BIN) >/dev/null
131
132 %.gz: %
133         @$(NQ) ' GZIP' $<
134         $(Q)gzip < $< > $@
135
136 install: crda crda.8.gz regdbdump.8.gz
137         $(NQ) '  INSTALL  crda'
138         $(Q)$(MKDIR) $(DESTDIR)/$(SBINDIR)
139         $(Q)$(INSTALL) -m 755 -t $(DESTDIR)/$(SBINDIR) crda
140         $(NQ) '  INSTALL  regdbdump'
141         $(Q)$(INSTALL) -m 755 -t $(DESTDIR)/$(SBINDIR) regdbdump
142         $(NQ) '  INSTALL  $(UDEV_LEVEL)regulatory.rules'
143         $(Q)$(MKDIR) $(DESTDIR)/$(UDEV_RULE_DIR)/
144         @# This removes the old rule you may have, we were not
145         @# putting it in the right place.
146         $(Q)rm -f $(DESTDIR)/etc/udev/rules.d/regulatory.rules
147         $(Q)sed 's:$$(SBINDIR):$(SBINDIR):' udev/regulatory.rules > udev/regulatory.rules.parsed
148         $(Q)ln -sf regulatory.rules.parsed udev/$(UDEV_LEVEL)regulatory.rules
149         $(Q)$(INSTALL) -m 644 -t \
150                 $(DESTDIR)/$(UDEV_RULE_DIR)/ \
151                 udev/$(UDEV_LEVEL)regulatory.rules
152         $(NQ) '  INSTALL  crda.8.gz'
153         $(Q)$(MKDIR) $(DESTDIR)$(MANDIR)/man8/
154         $(Q)$(INSTALL) -m 644 -t $(DESTDIR)/$(MANDIR)/man8/ crda.8.gz
155         $(NQ) '  INSTALL  regdbdump.8.gz'
156         $(Q)$(INSTALL) -m 644 -t $(DESTDIR)/$(MANDIR)/man8/ regdbdump.8.gz
157
158 clean:
159         $(Q)rm -f crda regdbdump intersect *.o *~ *.pyc keys-*.c *.gz \
160         udev/$(UDEV_LEVEL)regulatory.rules udev/regulatory.rules.parsed