File: Makefile

package info (click to toggle)
urlview 1e-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 276 kB
  • sloc: ansic: 876; cpp: 295; sh: 119; makefile: 82
file content (87 lines) | stat: -rw-r--r-- 4,010 bytes parent folder | download
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
# SPDX-License-Identifier: 0BSD

# gcc -DPACKAGE=\"urlview\" -DVERSION=\"0.9\" -DHAVE_CURS_SET=1 -DHAVE_NCURSES_H=1 -DHAVE_SNPRINTF=1 -DHAVE_REGEX_H=1 -DHAVE_STDARG_H=1  -I. -I.      -g -O2 -DURLVIEW -Dunix -c urlview.c
# gcc  -g -O2 -DURLVIEW -Dunix  -o urlview  urlview.o enter.o dokey.o quote.o  -lncurses

CC ?= cc
CXX ?= c++
LOCALLOC ?=
SHELLCHECK ?= $(shell command -v shellcheck 2>/dev/null || echo @#)
NOLOCREGEN ?=
CURSESCONF ?= ncursesw6-config  # can be "pkgconf ncursesw" too, or "echo -lcurses #"
VERSION ?= $(shell git describe)
DATE_EPOCH = LC_ALL=C date $(shell date -d @0 > /dev/null 2>&1 && echo "-d @" || echo "-r ")
SOURCE_DATE_EPOCH ?= $(shell git log -1 --no-show-signature --format=%at "urlview.1.in")
MANUAL_DATE ?= $(shell $(DATE_EPOCH)$(SOURCE_DATE_EPOCH) +"%B %e, %Y")
PREFIX ?= /usr/local

DEFAULT_COMMAND ?= url_handler.sh#    Debian uses: /etc/urlview/url_handler.sh
SYSTEM_INITFILE ?= /etc/urlview.conf# Debian uses: /etc/urlview/system.urlview
DEFAULT_REGEXP  ?= ((http|https|ftp|gopher|gemini|mailto):(//)?[^ <>"\t]*|(www|ftp)[0-9]?\.[-a-z0-9.]+)[^ .,;\t\n\r<">\):]?[^, <>"\t]*[^ .,;\t\n\r<">\):]
export DEFAULT_COMMAND
export SYSTEM_INITFILE
export DEFAULT_REGEXP


ADD_L := $(shell $(CURSESCONF) --cflags 2>/dev/null) -O3 -g -Wall -Wextra

CPPFLAGS += -DNCURSES_WIDECHAR -D_GNU_SOURCE
CFLAGS   += $(ADD_L)
CXXFLAGS += $(ADD_L) -fno-exceptions -fno-rtti -std=c++2b  # c++23 isn't understood by everyone
LDLIBS   += $(shell $(CURSESCONF) --libs 2>/dev/null || echo -lncursesw)

CPPFLAGS += -DVERSION='"$(VERSION)"' -DDEFAULT_COMMAND='"$(DEFAULT_COMMAND)"' -DSYSTEM_INITFILE='"$(SYSTEM_INITFILE)"' -DDEFAULT_REGEXP='"$(shell printf '%s\n' '$(subst ','\'',$(DEFAULT_REGEXP))' | sed -e 's/\\\([^nrtf]\)/\\\\\1/g' -e 's/"/\\"/g' -e "s/'/'\\\\''/g")"' -DTEXTDOMAIN_DIRNAME='"$(if $(LOCALLOC),loc,$(PREFIX)/share/locale)"'
# syntax highlighter fix: )'


ifneq (,$(shell command -v msgfmt))
	LOCALES := $(wildcard *.po)
endif

.PHONY: all check clean install

all: urlview urlview.1 sample.urlview $(patsubst %.po,loc/%/LC_MESSAGES/urlview-ng.mo,$(LOCALES))
check: quote
	$(SHELLCHECK) url_handler.sh
	./quote
clean:
	rm -rf *.o urlview quote urlview.1 sample.urlview loc


loc/urlview-ng.pot: urlview.c url_handler.sh
	@mkdir -p $(@D)
	$(NOLOCREGEN)xgettext --from-code=UTF-8 -c -io- $^ | sed -n '/^#[:.]/,$$p' > $@
	$(NOLOCREGEN)$(foreach l,$(LOCALES),msgmerge --backup=off --no-wrap -Uiq $(l) $@ &&) :
	@>> $@

loc/%/LC_MESSAGES/urlview-ng.mo : %.po loc/urlview-ng.pot
	@mkdir -p $(@D)
	msgfmt --statistics --check-format --check-domain -o $@ $<

ifneq (,$(findstring /,$(DEFAULT_COMMAND)))
  DEFAULT_COMMAND_DEST := $(DESTDIR)$(DEFAULT_COMMAND)
else
  DEFAULT_COMMAND_DEST := $(DESTDIR)$(PREFIX)/bin/$(DEFAULT_COMMAND)
endif
install: all
	mkdir -p $(DESTDIR)$(PREFIX)/bin $(dir $(DEFAULT_COMMAND_DEST) $(DESTDIR)$(SYSTEM_INITFILE)) $(DESTDIR)$(PREFIX)/share/man/man1 $(DESTDIR)$(PREFIX)/share/locale
	cp urlview $(DESTDIR)$(PREFIX)/bin
	cp url_handler.sh $(DEFAULT_COMMAND_DEST)
	[ -e "$(DESTDIR)$(SYSTEM_INITFILE)" ] || cp sample.urlview $(DESTDIR)$(SYSTEM_INITFILE)
	cp urlview.1 $(DESTDIR)$(PREFIX)/share/man/man1
ifneq (,$(LOCALES))
	cp -r $(patsubst %.po,loc/%,$(LOCALES)) $(DESTDIR)$(PREFIX)/share/locale
endif

%: %.in
	awk '{gsub(/@DEFAULT_COMMAND@/, ENVIRON["DEFAULT_COMMAND"]); gsub(/@SYSTEM_INITFILE@/, ENVIRON["SYSTEM_INITFILE"]); if(/@DEFAULT_REGEXP@/) { gsub(/@DEFAULT_REGEXP@/, ENVIRON["DEFAULT_REGEXP"]); $(DEFAULT_REGEXP_SPECIAL); } $(AWKADD) print}' < $< > $@
urlview.1: DEFAULT_REGEXP_SPECIAL=gsub(/\\/, "\\\\")
urlview.1: AWKADD=gsub(/ \^/, " \\(ha"); gsub(/ ~/, " \\(ti"); if($$1 == ".Dd") $$2 = "$(MANUAL_DATE)"; if($$1 == ".Dt") print ".ds doc-volume-operating-system"; if($$1 == ".Os") $$2 = "urlview-ng $(VERSION)";

urlview: urlview.o enter.o enter.o dokey.o quote.o
urlview.o dokey.o enter.o: enter.h
urlview.o quote.o:         quote.h

quote: CPPFLAGS+=-DTEST
quote: quote.cpp
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $< $(LOADLIBES) $(LDLIBS) -o $@