summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 42ca1e7123a5444117de86546ed823bb4d17361a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Install prefix
PREFIX ?= /usr
CRDA_PATH ?= $(PREFIX)/lib/crda
CRDA_KEY_PATH ?= $(CRDA_PATH)/pubkeys
FIRMWARE_PATH ?= /lib/firmware

MANDIR ?= $(PREFIX)/share/man/

SHA1SUM ?= /usr/bin/sha1sum
LSB_RELEASE ?= /usr/bin/lsb_release
WHOAMI ?= /usr/bin/whoami

# Distro name: Ubuntu, Debian, Fedora, if not present you get
# "custom-distro", if your distribution does not have the LSB stuff,
# then set this variable when calling make if you don't want "custom-distro"
LSB_ID ?= $(shell if [ -f $(LSB_RELEASE) ]; then \
			$(LSB_RELEASE) -i -s; \
		else \
			echo custom-distro; \
		fi)

DISTRO_PRIVKEY ?= ~/.wireless-regdb-$(LSB_ID).key.priv.pem
DISTRO_PUBKEY ?= ~/.wireless-regdb-$(LSB_ID).key.priv.pem

REGDB_AUTHOR ?= $(shell if [ -f $(DISTRO_PRIVKEY) ]; then \
			echo $(LSB_ID) ; \
		elif [ -f $(WHOAMI) ]; then \
			$(WHOAMI); \
		else \
			echo custom-user; \
		fi)

REGDB_PRIVKEY ?= ~/.wireless-regdb-$(REGDB_AUTHOR).key.priv.pem
REGDB_PUBKEY ?= $(REGDB_AUTHOR).key.pub.pem
REGDB_PUBCERT ?= $(REGDB_AUTHOR).x509.pem

REGDB_UPSTREAM_PUBKEY ?= wens.key.pub.pem

REGDB_CHANGED = $(shell $(SHA1SUM) -c --status sha1sum.txt >/dev/null 2>&1; \
        if [ $$? -ne 0 ]; then \
                echo maintainer-clean $(REGDB_PUBKEY) $(REGDB_PUBCERT); \
        fi)

.PHONY: all clean mrproper install maintainer-clean install-distro-key

all: $(REGDB_CHANGED) regulatory.bin sha1sum.txt regulatory.db.p7s

clean:
	@rm -f *.pyc *.gz

maintainer-clean: clean
	@rm -f regulatory.bin regulatory.db regulatory.db.p7s

mrproper: clean maintainer-clean
	@echo Removed public key, regulatory.bin, regulatory.db* and compressed man pages
	@rm -f $(REGDB_PUBKEY) $(REGDB_PUBCERT) .custom

regulatory.bin: db.txt $(REGDB_PRIVKEY) $(REGDB_PUBKEY)
	@echo Generating $@ digitally signed by $(REGDB_AUTHOR)...
	./db2bin.py regulatory.bin db.txt $(REGDB_PRIVKEY)

regulatory.db: db.txt db2fw.py
	@echo "Generating $@"
	./db2fw.py regulatory.db db.txt

regulatory.db.p7s: regulatory.db $(REGDB_PRIVKEY) $(REGDB_PUBCERT)
	@echo "Signing regulatory.db (by $(REGDB_AUTHOR))..."
	@openssl smime -sign \
		-signer $(REGDB_PUBCERT) \
		-inkey $(REGDB_PRIVKEY) \
		-in $< -nosmimecap -binary \
		-noattr \
		-outform DER -out $@

sha1sum.txt: db.txt
	sha1sum $< > $@

$(REGDB_PUBKEY): $(REGDB_PRIVKEY)
	@echo "Generating public key for $(REGDB_AUTHOR)..."
	openssl rsa -in $(REGDB_PRIVKEY) -out $(REGDB_PUBKEY) -pubout -outform PEM

$(REGDB_PUBCERT): $(REGDB_PRIVKEY)
	@echo "Generating certificate for $(REGDB_AUTHOR)..."
	./gen-pubcert.sh $(REGDB_PRIVKEY) $(REGDB_PUBCERT) $(REGDB_AUTHOR)
	@echo $(REGDB_PUBKEY) > .custom


$(REGDB_PRIVKEY):
	@echo "Generating private key for $(REGDB_AUTHOR)..."
	openssl genrsa -out $(REGDB_PRIVKEY) 2048

ifneq ($(shell test -e $(DISTRO_PRIVKEY) && echo yes),yes)
$(DISTRO_PRIVKEY):
	@echo "Generating private key for $(LSB_ID) packager..."
	openssl genrsa -out $(DISTRO_PRIVKEY) 2048
endif

install-distro-key: maintainer-clean $(DISTRO_PRIVKEY)

%.gz: %
	gzip < $< > $@

# Users should just do:
#	sudo make install
#
# Developers should do:
#	make maintainer-clean
#	make
#	sudo make install
#
# Distributions packagers should do only once:
#	make install-distro-key
# This will create a private key for you and install it into
# ~/.wireless-regdb-$(LSB_ID).key.priv.pem
# To make new releaes just do:
#	make maintainer-clean
#	make
#	sudo make install
install: regulatory.bin.5.gz regulatory.db.5.gz
	install -m 755 -d $(DESTDIR)/$(CRDA_PATH)
	install -m 755 -d $(DESTDIR)/$(CRDA_KEY_PATH)
	install -m 755 -d $(DESTDIR)/$(FIRMWARE_PATH)
	if [ -f .custom ]; then \
		install -m 644 -t $(DESTDIR)/$(CRDA_KEY_PATH)/ $(shell cat .custom); \
	fi
	install -m 644 -t $(DESTDIR)/$(CRDA_KEY_PATH)/ $(REGDB_UPSTREAM_PUBKEY)
	install -m 644 -t $(DESTDIR)/$(CRDA_PATH)/ regulatory.bin
	install -m 644 -t $(DESTDIR)/$(FIRMWARE_PATH) regulatory.db regulatory.db.p7s
	install -m 755 -d $(DESTDIR)/$(MANDIR)/man5/
	install -m 644 -t $(DESTDIR)/$(MANDIR)/man5/ regulatory.bin.5.gz regulatory.db.5.gz