# 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