1# Makefile for authoring less.
2
3EMAIL = bug-less@gnu.org
4HOMEPAGE = https://greenwoodsoftware.com/less
5SHELL = /bin/sh
6GIT = git
7NROFF = nroff -t -man
8
9srcdir = .
10REL := $(shell sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q ${srcdir}/version.c)
11
12ifeq ($(USE_PYTHON),1)
13          MKHELP = mkhelp.py
14else
15          MKHELP = mkhelp.pl
16endif
17
18SRC = \
19          main.c screen.c brac.c ch.c charset.c cmdbuf.c \
20          command.c cvt.c decode.c edit.c filename.c forwback.c \
21          help.c ifile.c input.c jump.c line.c linenum.c \
22          lsystem.c mark.c optfunc.c option.c opttbl.c os.c \
23          output.c pattern.c position.c prompt.c search.c signal.c \
24          tags.c ttyin.c version.c xbuf.c
25DISTFILES_W = \
26          defines.ds  Makefile.dsb Makefile.dsg Makefile.dsu \
27          defines.o2  Makefile.o2e \
28          defines.o9  Makefile.o9c Makefile.o9u \
29          defines.wn  Makefile.wnm Makefile.wnb Makefile.wng \
30          configure
31UNICODE_FILES = \
32          compose.uni fmt.uni ubin.uni wide.uni
33DISTFILES = \
34          ${SRC} regexp.c regexp.h \
35          COPYING INSTALL LICENSE Makefile.in Makefile.aut NEWS README \
36          configure.ac lesskey.c lesskey_parse.c lessecho.c scrsize.c \
37          charset.h cmd.h funcs.h lglob.h less.h lesskey.h option.h \
38          pckeys.h pattern.h position.h xbuf.h \
39          install.sh defines.h.in mkinstalldirs \
40          less.nro less.man lesskey.nro lesskey.man lessecho.nro lessecho.man \
41          less.hlp \
42          mkhelp.pl \
43          mkhelp.py \
44          mkutable $(UNICODE_FILES) \
45          $(shell ${MAKE} -s -f ${srcdir}/lesstest/Makefile echo_distfiles srcdir=${srcdir}/lesstest) \
46          ${DISTFILES_W}
47
48
49all: help.c funcs.h $(UNICODE_FILES) ${srcdir}/configure
50
51release: .FORCE
52          @if ${srcdir}/ready_to_release -d ${srcdir}; then :; else exit 1; fi
53          ${MAKE} -f Makefile.aut tagall
54          ${MAKE} -f Makefile.aut all
55          ${MAKE} -f Makefile.aut clean
56          ${MAKE} -f Makefile.aut dist
57
58.FORCE:
59
60help.c: less.hlp
61          -mv -f ${srcdir}/help.c ${srcdir}/help.c.old
62          rm -rf help.c
63          ${srcdir}/${MKHELP} < less.hlp > help.c
64          if cmp -s help.c help.c.old; then mv -f help.c.old help.c; fi
65
66${srcdir}/configure ${srcdir}/defines.h.in: ${srcdir}/configure.ac ${srcdir}/Makefile.in
67          cd ${srcdir}; autoheader; autoconf
68
69funcs.h: ${SRC:%=${srcdir}/%}
70          -mv -f ${srcdir}/funcs.h ${srcdir}/funcs.h.old
71          grep -h '^public [^;]*$$' ${SRC:%=${srcdir}/%} | sed 's/$$/;/' >${srcdir}/funcs.h
72
73lint:
74          lint -I. ${CPPFLAGS} ${SRC}
75
76clean:
77          rm -f Makefile config.status config.log config.cache defines.h stamp-h \
78                    configure defines.h.in funcs.h help.c \
79                    less.nro less.man lesskey.nro lesskey.man lessecho.nro lessecho.man
80
81distclean: clean
82realclean: clean
83
84REPLACE_VERSION = \
85          DT=`date '+%d %h %Y'`; \
86          echo "Stuffing version number ${REL} into $@"; \
87          rm -f $@; \
88          sed \
89                    -e "s;@@VERSION@@;${REL};" \
90                    -e "s;@@DATE@@;$$DT;" >$@
91
92${srcdir}/less.nro: ${srcdir}/less.nro.VER ${srcdir}/version.c
93          ${REPLACE_VERSION} ${srcdir}/less.nro.VER
94${srcdir}/lesskey.nro: ${srcdir}/lesskey.nro.VER ${srcdir}/version.c
95          ${REPLACE_VERSION} ${srcdir}/lesskey.nro.VER
96${srcdir}/lessecho.nro: ${srcdir}/lessecho.nro.VER ${srcdir}/version.c
97          ${REPLACE_VERSION} ${srcdir}/lessecho.nro.VER
98
99${srcdir}/less.man: ${srcdir}/less.nro
100          ${NROFF} ${srcdir}/less.nro >${srcdir}/less.man
101${srcdir}/lesskey.man: ${srcdir}/lesskey.nro
102          ${NROFF} ${srcdir}/lesskey.nro >${srcdir}/lesskey.man
103${srcdir}/lessecho.man: ${srcdir}/lessecho.nro
104          ${NROFF} ${srcdir}/lessecho.nro >${srcdir}/lessecho.man
105
106compose.uni: unicode/UnicodeData.txt
107          ./mkutable -f2 Mn Me -- unicode/UnicodeData.txt > $@
108fmt.uni: unicode/UnicodeData.txt
109          ./mkutable -f2 Cf -- unicode/UnicodeData.txt > $@
110ubin.uni: unicode/UnicodeData.txt
111          ./mkutable -f2 Cc Cs Co Zl Zp -- unicode/UnicodeData.txt > $@
112wide.uni: unicode/EastAsianWidth.txt
113          ./mkutable -f1 W F -- unicode/EastAsianWidth.txt > $@
114
115unicode-check:
116          rm -rf unicode-old
117          mv -f unicode unicode-old
118          ${MAKE} -f Makefile.aut unicode/UnicodeData.txt unicode/EastAsianWidth.txt
119          @if diff -q unicode-old unicode >/dev/null; then rm -rf unicode; mv -f unicode-old unicode; echo "unicode files already up to date"; else echo "unicode files updated"; fi
120
121unicode/UnicodeData.txt:
122          mkdir -p unicode
123          lftp -c 'open -u "anonymous:${EMAIL}" ftp.unicode.org ; get Public/UNIDATA/UnicodeData.txt -o $@'
124          touch $@
125unicode/EastAsianWidth.txt:
126          mkdir -p unicode
127          lftp -c 'open -u "anonymous:${EMAIL}" ftp.unicode.org ; get Public/UNIDATA/EastAsianWidth.txt -o $@'
128          touch $@
129
130distfiles: ${DISTFILES}
131
132echo_distfiles:
133          @echo $(subst .nro,.nro.VER,${DISTFILES})
134
135dist: ${DISTFILES}
136          if [ ! -d ${srcdir}/release ]; then mkdir ${srcdir}/release; fi
137          @LESSREL=less-${REL} && RELDIR=release/$$LESSREL && \
138          TARF=$$LESSREL-beta.tar.gz && ZIPF=$$LESSREL-beta.zip && \
139          cd ${srcdir} && \
140          rm -rf $$RELDIR && mkdir $$RELDIR && \
141          echo "Preparing $$LESSREL" && \
142          rm -rf $$LESSREL && mkdir $$LESSREL && \
143          for f in ${DISTFILES}; do mkdir -p $$(dirname $$LESSREL/$$f); cp $$f $$LESSREL/$$f; done && \
144          cd $$LESSREL && chmod -w * && chmod +w ${DISTFILES_W} lesstest && chmod +x configure && cd .. && \
145          echo "Creating $$RELDIR/$$TARF" && \
146          tar -cf - $$LESSREL | gzip -c >$$RELDIR/$$TARF && \
147          echo "Signing $$RELDIR/$$TARF" && \
148          gpg --detach-sign $$RELDIR/$$TARF && \
149          mv $$RELDIR/$$TARF.sig $$RELDIR/$$LESSREL.sig && \
150          echo "Creating $$RELDIR/$$ZIPF" && \
151          zip -rq $$RELDIR/$$ZIPF $$LESSREL && \
152          rm -rf $$LESSREL
153
154tagall:
155          echo "tagging v${REL}"; \
156          $(GIT) tag -a -f -m "v${REL}" "v${REL}"
157
158gnu_upload:
159          @if [ -z "${REL}" ]; then echo "Please set REL=nnn"; exit 1; fi; \
160          LESSREL=less-${REL} && RELDIR=release/$$LESSREL && \
161          TARF=$$LESSREL.tar.gz && \
162          if [ ! -s $$RELDIR/$$TARF ]; then echo "$$RELDIR/$$TARF does not exist"; exit 1; fi; \
163          cd $$RELDIR && \
164          gpg -b $$TARF && \
165          ( echo "version: 1.2"; echo "directory: less"; echo "filename: $$TARF" ) > $$TARF.directive && \
166          gpg --clearsign $$TARF.directive && \
167          echo "upload ready: cd $$RELDIR; ftp ftp-upload.gnu.org; cd /incoming/ftp; put $$TARF $$TARF.sig $$TARF.directive.asc"
168