blob: 0df5537d7aa105f648fdd042eeb4c3050b5ca2e2 (
about) (
plain) (
blame)
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
|
# pacredir - redirect pacman requests, assisted by mDNS Service Discovery
PREFIX := /usr
SOURCE_DATE_EPOCH ?= $(shell date +%s)
# commands
CC := gcc
CP := cp
INSTALL := install
LN := ln
MD := markdown
RM := rm
SED := sed
# flags
CFLAGS += -std=c11 -O2 -fPIC -Wall -Werror
CFLAGS_EXTRA += $(shell pkg-config --libs --cflags libsystemd)
CFLAGS_EXTRA += $(shell pkg-config --libs --cflags libcurl)
CFLAGS_EXTRA += $(shell pkg-config --libs --cflags libmicrohttpd)
CFLAGS_EXTRA += $(shell pkg-config --libs --cflags iniparser)
LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
# the distribution ID
ARCH := $(shell shopt -u extglob && source /etc/makepkg.conf && echo $$CARCH)
ID := $(shell shopt -u extglob && source /etc/os-release && echo $$ID)
# this is just a fallback in case you do not use git but downloaded
# a release tarball...
DISTVER := 0.7.5
VERSION ?= $(shell git describe --long 2>/dev/null || echo $(DISTVER))
SERVICESIN = $(wildcard */*.service.in)
SERVICES = $(SERVICESIN:.in=)
MARKDOWN = $(wildcard *.md)
HTML = $(MARKDOWN:.md=.html)
all: pacredir $(SERVICES) $(HTML)
pacredir: pacredir.c pacredir.h config.h favicon.h html.h version.h
$(CC) $< $(CFLAGS) $(CFLAGS_EXTRA) $(LDFLAGS) -o $@
config.h: config.def.h
$(CP) $< $@
version.h: $(wildcard .git/HEAD .git/index .git/refs/tags/*) Makefile
printf '#ifndef VERSION_H\n#define VERSION_H\n#define VERSION\t"%s"\n#define ARCH\t"%s"\n#define ID\t"%s"\n#endif\n' "${VERSION}" "$(ARCH)" "$(ID)" > $@
favicon.png: logo.svg Makefile
rsvg-convert --width 32 --height 32 $< | oxipng - > $@
favicon.h: favicon.png Makefile
printf '#ifndef FAVICON_H\n#define FAVICON_H\nstatic unsigned char favicon[] = {\n' > $@
od -t x1 -A n -v < $< | sed 's/\([0-9a-f]\{2\}\)/0x\1,/g' >> $@
printf '};\n#define FAVICON_SHA1 "%s"\n#define FAVICON_DATE "%s"\n#endif\n' "$(shell sha1sum $< | cut -d' ' -f1)" "$(shell date --utc --date=@$(SOURCE_DATE_EPOCH) '+%a, %d %b %Y %H:%M:%S GMT')" >> $@
%.service: %.service.in
$(SED) 's/%ARCH%/$(ARCH)/; s/%ARCH_BYTES%/$(shell (printf $(ARCH) | wc -c; printf $(ARCH) | od -t d1 -A n) | tr -s " ")/; s/%ID%/$(ID)/; s/%ID_BYTES%/$(shell (printf $(ID) | wc -c; printf $(ID) | od -t d1 -A n) | tr -s " ")/' $< > $@
%.html: %.md Makefile
markdown $< | sed 's/href="\([-[:alnum:]]*\)\.md"/href="\1.html"/g' > $@
install: install-bin install-doc
install-bin: pacredir systemd/pacserve.service
$(INSTALL) -D -m0755 pacredir $(DESTDIR)$(PREFIX)/bin/pacredir
$(LN) -s darkhttpd $(DESTDIR)$(PREFIX)/bin/pacserve
$(INSTALL) -D -m0644 etc/pacredir.conf $(DESTDIR)/etc/pacredir.conf
$(INSTALL) -D -m0644 etc/pacserve.conf $(DESTDIR)/etc/pacserve.conf
$(INSTALL) -D -m0644 etc/01-pacredir-MulticastDNS-yes.conf $(DESTDIR)/etc/systemd/resolved.conf.d/01-pacredir-MulticastDNS-yes.conf
$(INSTALL) -D -m0644 pacman/pacredir $(DESTDIR)/etc/pacman.d/pacredir
$(INSTALL) -D -m0644 systemd/pacredir.service $(DESTDIR)$(PREFIX)/lib/systemd/system/pacredir.service
$(INSTALL) -D -m0644 systemd/pacserve.service $(DESTDIR)$(PREFIX)/lib/systemd/system/pacserve.service
$(INSTALL) -D -m0644 systemd/sysusers.conf $(DESTDIR)$(PREFIX)/lib/sysusers.d/pacredir.conf
$(INSTALL) -D -m0644 systemd/tmpfiles.conf $(DESTDIR)$(PREFIX)/lib/tmpfiles.d/pacredir.conf
$(INSTALL) -D -m0644 desktop/pacredir-status.desktop $(DESTDIR)$(PREFIX)/share/applications/pacredir-status.desktop
$(INSTALL) -D -m0644 logo.png $(DESTDIR)$(PREFIX)/share/pixmaps/pacredir.png
$(INSTALL) -D -m0644 dispatch/dhcpcd $(DESTDIR)$(PREFIX)/lib/dhcpcd/dhcpcd-hooks/80-pacredir
$(INSTALL) -D -m0755 dispatch/networkd $(DESTDIR)$(PREFIX)/lib/networkd-dispatcher/routable.d/80-pacredir
$(INSTALL) -D -m0755 dispatch/networkmanager $(DESTDIR)$(PREFIX)/lib/NetworkManager/dispatcher.d/80-pacredir
install-doc: $(HTML)
$(INSTALL) -d -m0755 $(DESTDIR)$(PREFIX)/share/doc/pacredir/
$(INSTALL) -D -m0644 $(MARKDOWN) $(HTML) logo.svg -t $(DESTDIR)$(PREFIX)/share/doc/pacredir/
$(INSTALL) -d -m0755 $(DESTDIR)$(PREFIX)/share/doc/pacredir/README.d/
$(INSTALL) -D -m0644 $(wildcard README.d/*) -t $(DESTDIR)$(PREFIX)/share/doc/pacredir/README.d/
$(INSTALL) -d -m0755 $(DESTDIR)$(PREFIX)/share/doc/pacredir/FLOW.d/
$(INSTALL) -D -m0644 $(wildcard FLOW.d/*) -t $(DESTDIR)$(PREFIX)/share/doc/pacredir/FLOW.d/
install-avahi: compat/pacserve-announce.service
$(INSTALL) -D -m0644 compat/avahi.conf $(DESTDIR)$(PREFIX)/lib/systemd/system/pacserve.service.d/avahi.conf
$(INSTALL) -D -m0644 compat/pacserve-announce.service $(DESTDIR)$(PREFIX)/lib/systemd/system/pacserve-announce.service
$(INSTALL) -D -m0644 compat/02-pacredir-avahi-MulticastDNS-resolve.conf $(DESTDIR)/etc/systemd/resolved.conf.d/02-pacredir-avahi-MulticastDNS-resolve.conf
clean:
$(RM) -f *.o *~ pacredir $(SERVICES) $(HTML) favicon.png favicon.h version.h
distclean:
$(RM) -f *.o *~ pacredir $(SERVICES) $(HTML) version.h config.h
release:
git archive --format=tar.xz --prefix=pacredir-$(DISTVER)/ $(DISTVER) > pacredir-$(DISTVER).tar.xz
gpg --armor --detach-sign --comment pacredir-$(DISTVER).tar.xz pacredir-$(DISTVER).tar.xz
git notes --ref=refs/notes/signatures/tar add -C $$(git archive --format=tar --prefix=pacredir-$(DISTVER)/ $(DISTVER) | gpg --armor --detach-sign --comment pacredir-$(DISTVER).tar | git hash-object -w --stdin) $(DISTVER)
|