# © Ričardas Čepas <rch@WriteMe.Com>. Copying policy: Berkeley style.
#
#   `getunimap' patch already included in kbd 0.95, so it is not installed by
# default.

USE_LIBC=USE_LIBC

# remove comment from this line if you want to compile `getunimap' with libc5:
#USE_LIBC=DONT_USE_LIBC

# install files with this ownership:
owner=root
group=staff

bindir = /usr/local/bin
sbindir = /usr/sbin
KBD_SRC_DIR = /usr/src/kbd-0.94/src
Xbasedir = /usr/X11R6

SHELL = /bin/bash
package	= linux-lt
Package	= linux-lt
VERSION := $(shell pwd -P |sed -ne 's/.*\([0-9]\.[0-9]*\)/\1/p')
SOURCES := Makefile glyphs.c locale2unimap \
	testUTF8.c testUTF-8.c showfonts \
	$(wildcard README*) ChangeLog \
	 getunimap.c.patch psfcat psfheader psfsplit \
	psfmerge utf.c plan9.h make512 \
	getunimap.old.libc5 linux+utf8.ti \
	set_sticky_palette_for_linux-gr+utf8_terminal \
	BSD_style_license
KEYMAPS = lt.map lt.l4.map
FONTS = lat4u-08.psf lat4u-10.psf lat4u-12.psf lat4u-14.psf lat4u-16.psf \
	lat4u-19.psf lat4u-16+.psf lat4u.uni vga2iso
FONTS2 = lat4-08.psf lat4-10.psf lat4-12.psf lat4-14.psf lat4-16.psf \
	lat4-19.psf lat4-16+.psf lat4.uni
FONTS512 = LatArCyrHeb-08.psf LatArCyrHeb-14.psf LatArCyrHeb-16.psf \
		 LatArCyrHeb-19.psf LatArCyrHeb-16+.psf
#		 LatArCyrHeb.uni
PGP	= pgp-i/
LOCALE  = share/
BINARIES = glyphs testUTF-8
BINARIES2 = getunimap
CONTENTS-source = $(SOURCES) $(FONTS) \
	lt.map.in lt.compose.map \
	$(PGP) $(LOCALE) \
	$(package)-$(VERSION).lsm $(package).lsm.in X11R6/ XFree86 \
	BSD/ examples/ scripts/ yudit/ $(wildcard ttf2pt1*) ttmkfontdir/
CONTENTS = $(CONTENTS-source) $(BINARIES) $(BINARIES2) \
	$(FONTS2) $(FONTS512) $(KEYMAPS)
CC	= gcc
CFLAGS	= -Wall -O2
CFLAGS	+= -D$(USE_LIBC)=$(USE_LIBC)

install_own = -o $(owner) -g $(group)

all:		testUTF-8 glyphs $(FONTS2)

testUTF-8:	testUTF8.o

glyphs:		testUTF8.o

getunimap:	getunimap.c.patch
		make512 getunimap CFLAGS="$(CFLAGS)" \
			KBD_SRC_DIR=$(KBD_SRC_DIR) $(USE_LIBC)=$(USE_LIBC)

#	$(foreach height, 08 14 16 16+ 19, lat4u-$(height).psf):
lat4u-%.psf:	LatArCyrHeb-%.psf lat4u.uni
	{ ./psfheader 256 $$((10#$*+0)); \
		dd ibs=1 skip=4 count=$$((256 * 10#$*+0)) if=$<; } \
		| psfaddtable - lat4u.uni $@

lat4u-10.psf lat4u-12.psf:	lat4u.uni
	test -s $@
	psfaddtable $@ $< $@.tmp
	mv --backup -f $@.tmp $@

LatArCyrHeb.uni:
	psfgettable LatArCyrHeb-16.psf >$@
	test -s $@
	touch --reference=LatArCyrHeb-16.psf $@
	rm --force $@.bak

LatArCyrHeb.uni.bak: LatArCyrHeb.uni
	test -s $<
	loadunimap $< || { t=`tty` && [ ${t##/dev/ttyp} != $t ] \
		&& echo '**** You shoud use plain console, i.e. /dev/tty*' \
and not /dev/ttyp'*' !; false; }
	./getunimap |sort >$@
	test -s $@
	touch --reference=$< $@
	cp --backup --force --preserve $@ $<

$(package)-$(VERSION).lsm:	$(package).lsm.in .
	rm -f $(package)*.lsm
	sed -e 's/$${date}/'`LC_ALL=C date +%d%b%y |tr a-z A-Z`'/g; \
		s/$${version}/$(VERSION)/g' \
		$< >$(package)-$(VERSION).lsm

$(FONTS512):	LatArCyrHeb.uni.bak
	test -s $@
	psfaddtable $@ LatArCyrHeb.uni $@.tmp
	mv --backup -f $@.tmp $@

$(FONTS2):	$(FONTS) $(SOURCES) $(BINARIES) $(BINARIES2)
	sed -e "s/^0x[cC]/0xC/;s/^0x[dD]/0xD/;s/^0x8/0xc/;s/^0x9/0xd/;s/^0xC/0x8/;s/^0xD/0x9/;/^#/d" \
		lat4u.uni >lat4.uni
	set -o errexit; \
	for f in $(filter %.psf, $(FONTS)); do \
	 psfstriptable $$f >/dev/null; \
	 size=$${f#lat4u-}; size=$${size%+.psf}; size=$${size%.psf}; \
	 size=$${size#0}; \
	 (dd if=$$f ibs=1 count=$$(( 4 + $$size * 0x80 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 0xC0 )) count=$$(( $$size * 0x20 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 0xA0 )) count=$$(( $$size * 0x20 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 0x80 )) count=$$(( $$size * 0x20 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 0xE0 )) \
	 ) | psfaddtable - lat4.uni lat4$${f#lat4u}; \
	done

lt.l4.map lt.map: lt.map.in README.keymap lt.compose.map
	echo '#encoding "UTF-8"' >lt.map
	echo "#" >>lt.map
	echo "# version $(VERSION)." >>lt.map
	cat README.keymap lt.map.in lt.compose.map >>lt.map

	echo 'charset "iso-8859-4"' >lt.l4.map
	echo "#" >>lt.l4.map
	echo "# version $(VERSION)." >>lt.l4.map
	cat README.keymap |fromUTF iso-8859-4 >>lt.l4.map
	cat lt.map.in |perl -pe ' \
s/U\+0105/+aogonek/gi; s/U\+0104/+Aogonek/gi; \
s/U\+010d/+ccaron/gi; s/U\+010c/+Ccaron/gi; \
s/U\+0119/+eogonek/gi; s/U\+0118/+Eogonek/gi; \
s/U\+0117/+eabovedot/gi; s/U\+0116/+Eabovedot/gi; \
s/U\+012f/+iogonek/gi; s/U\+012e/+Iogonek/gi; \
s/U\+0161/+scaron/gi; s/U\+0160/+Scaron/gi; \
s/U\+0173/+uogonek/gi; s/U\+0172/+Uogonek/gi; \
s/U\+016b/+umacron/gi; s/U\+016a/+Umacron/gi; \
s/U\+201e/0x90/gi; s/U\+201c/0x91/gi; \
s/U\+017e/+zcaron/gi; s/U\+017d/+Zcaron/gi; \
s/U\+201d/quotedbl/gi; \
s/U\+00a0/nobreakspace/gi; \
s/U\+00ad/hyphen/gi; \
s/U\+2011/minus/gi; \
s/U\+2015/minus/gi; \
' |fromUTF iso-8859-4 >>lt.l4.map
	cat lt.compose.map >>lt.l4.map

READMEs:	README.lt.latin4	README.lt.utf8
	if [ README.lt.latin4 -ot README.lt.utf8 ]; then \
		fromUTF iso-8859-4 <README.lt.utf8 >README.lt.latin4; \
		touch -r README.lt.utf8 README.lt.latin4; \
	elif [ README.lt.utf8 -ot README.lt.latin4 ]; then \
		2UTF iso-8859-4 <README.lt.latin4 >README.lt.utf8; \
		touch -r README.lt.utf8 README.lt.latin4; \
	fi

README.lt.ascii:	READMEs
	fromUTF us-ascii <README.lt.utf8 >README.lt.ascii

README.ps:	READMEs
	LC_TIME=C; export LC_TIME; a2ps --medium A4 -1 --font-size=13 -o README.ps --encoding=iso4 --version-control=off README.lt.latin4

clean:
	rm -f *.o *.tmp *~ tst $(BINARIES) $(FONTS2) LatArCyrHeb.uni.bak \
		$(package)*.lsm \
		$(foreach height, 08 14 16 16+ 19, lat4u-$(height).psf)
	touch -d 01/01/1980 README.lt.ascii README.ps
	cd ttmkfontdir && make mostlyclean
	cd ttf2pt1 && make veryclean

realclean:	clean
	rm -f $(BINARIES2) kbd_share_dir.h

dist dist-source:	$(CONTENTS)
	set -o errexit; cd ..; \
	  for f in LatArCyrHeb.uni $(CONTENTS$(subst dist,,$@)); \
	  do echo $(package)-$(VERSION)/$$f; \
	  done \
	  | tar --create --gzip --verbose \
	  	--file=./$(package)$(subst dist,,$@)-$(VERSION).tar.gz \
		--files-from=-
	#cp --verbose --force $(package)-$(VERSION).lsm ../
	pgps -bu rch@pub.osf.lt \
		../$(package)$(subst dist,,$@)-$(VERSION).tar.gz

check test: 
	-testUTF-8
	-glyphs
	showfonts $(filter %.psf, $(FONTS512) $(FONTS) $(FONTS2) )
	./make512 test

install-getunimap: getunimap
	@echo Installing getunimap...
	install --strip $(install_own) \
			--mode=ug=rwx,o=rx getunimap $(bindir); \

install:
	test "`whoami`" = "root"
	set -o errexit; \
		for group in $(group) wheel staff bin root; \
		do if install -d -g $$group ./tstdir; \
		   then \
			Group=$$group; export Group; \
			rmdir ./tstdir; \
			break; \
		   fi; \
		done; \
	test -d /usr/local/share && install -d -o $(owner) -g $$Group -m 2775 /usr/local/share; \
	install -d -o $(owner) -g $$Group -m 2775 /usr/local/share/x-lt; \
	install -c -o $(owner) -g $$Group -m 775 scripts/profile /usr/local/share/x-lt; \
	install -c -o $(owner) -g $$Group -m 664 X11R6/Xresources /usr/local/share/x-lt; \
	OS=`uname -s`; echo Running on $$OS...; \
	has_localedef=0; \
	if type localedef; then \
		has_localedef=1; \
		echo Installing locales...; \
		localedef -i share/i18n/locales/lt_LT.UTF-8 \
			-f share/i18n/charmaps/UTF-8 lt_LT.UTF-8; \
		localedef -i share/i18n/locales/lt_LT \
			-f share/i18n/charmaps/ISO-8859-4 lt_LT.ISO_8859-4; \
	fi; \
	if [ $${OS%%[Ll][Ii][Nn][Uu][Xx]}x = x ]; \
	then \
		if [ _$$has_localedef = _0 ]; then \
			echo 'Must install localedef command (comes with libc) !'; \
			false; \
		fi; \
		$(MAKE) install-linux group=$$Group; \
	fi; \
	if [ $${OS%%*Free[Bb][Ss][Dd]*}x = x ]; \
	then \
		$(MAKE) install-BSD group=$$Group; \
	fi; \
	echo -n 'Do you have XFree (X-Window) installed? [Y/n]' && read a e; \
	if [ "$${a#[Nn]}" = "$$a" ]; then \
		Xbasedir=/usr/X11R6; \
		cd X11R6 && $(MAKE) install Xbasedir=$$Xbasedir bindir=$(bindir) install_own="-o $(owner) -g $$Group"; \
		cd ..; \
	else \
		Xbasedir=NO_X11; \
	fi; \
	export Xbasedir; \
	scripts/make_install.sh

install-BSD:
	-cat BSD/*patch \
	| { cd / && patch -p0 --forward --version-control=numbered; }
	mtree -deU -f BSD/BSD.usr.share.dist -p ${DESTDIR}/usr/share
	mtree -deU -f BSD/BSD.usr.local.share.nls.dist \
		-p ${DESTDIR}/usr/local/share/nls
	set -x; cd BSD && for f in `find src -type f`; do \
		mv /usr/$$f /usr/$$f.old || : ; \
		install -c $(install_own) -m 644 $$f /usr/$$f; \
	done;
	cd /usr/src/etc && make distrib-dirs
	cd /usr/src/usr.bin/mklocale/data && make all install
	cd /usr/src/usr.bin/colldef/data && make all install
	cd /usr/src/share/timedef/data && make all install
	cd /usr/src/share/syscons && make all install
	cd /usr/src/release/sysinstall && make all install

BSD-patch:
	for f in `find /usr/src -name \*.x-lt.orig`; \
		do diff -u $$f $${f%.x-lt.orig} || [ $$? = 1 ]; done \
			> BSD/lt_LT.patch

BSD-patch-restore:
	for f in `find /usr/src -name \*.x-lt.orig`; \
		do cp -p $$f $${f%.x-lt.orig}; done

BSD-fonts:
	for f in lat4u-08.psf lat4u-14.psf lat4u-16.psf lat4u-16+.psf; do \
	 size=$${f%+.psf}; wide=; [ $$size = $$f ] || wide="-wide"; \
	 size=$${size%.psf}; size=$${size#lat4u-}; \
	 size=$${size#0}; \
	 { dd if=$$f ibs=1 skip=4 count=$$(( $$size * 192 )); \
	  uudecode -p /usr/share/syscons/fonts/iso-8x$$size.fnt \
		| dd ibs=1 skip=$$(( $$size * 128 )) count=$$(( $$size * 32 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 224 )) count=$$(( $$size * 32 )); \
	 } | { echo Use with vga2iso.scm screen map; uuencode lat4u-8x$$size; } \
		>BSD/src/share/syscons/fonts/lat4u$${wide}-8x$$size.fnt; \
	 { dd if=$$f ibs=1 skip=4 count=$$(( $$size * 128 )); \
	  uudecode -p /usr/share/syscons/fonts/iso-8x$$size.fnt \
		| dd ibs=1 skip=$$(( $$size * 128 )) count=$$(( $$size * 32 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 160 )) count=$$(( $$size * 32 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 128 )) count=$$(( $$size * 32 )); \
	  dd if=$$f ibs=1 skip=$$(( 4 + $$size * 224 )) count=$$(( $$size * 32 )); \
	 } |tee BSD/lat4-8x$$size | uuencode lat4-8x$$size >BSD/src/share/syscons/fonts/lat4$${wide}-8x$$size.fnt; \
	done

install-linux:
	set -x; kbdVERSION="`loadkeys -h 2>&1 </dev/null |sed --quiet --expression \
	 's/^.*[Vv]ersion[[:blank:]]\([[:digit:]]\)\.\([[:digit:]]\{1,5\}\).*/\1\2/p'`" && \
		if [ "$$kbdVERSION" -lt 093 ]; \
		then echo -e "\\a \\n \
Looks like your \`kbd\' package version $$kbdVERSION is out of date! \\n\
Get newer from you distribution or \\n\
from ftp.win.tue.nl:/pub/linux/utils/kbd/ \\n \
Press <Enter>.." && read a; \
		fi
	set -x; if test ! -r kbd_share_dir.h || \
		! kbd_share_dir="`cat kbd_share_dir.h`" || \
		test ! -d "$$kbd_share_dir"/consolefonts; \
	  then \
		if test -d /usr/share/kbd/consolefonts; \
		then kbd_share_dir=/usr/share/kbd; \
		else kbd_share_dir=/usr/lib/kbd; \
		fi; \
		set +x; while ! test -d "$$kbd_share_dir"/consolefonts; \
		do \
		  echo No \`consolefonts/\' subdirectory \
			in \`"$$kbd_share_dir"\' ; \
		  read -ep ' Enter `kbd'\'' shared data directory: ' \
			kbd_share_dir; \
		done && echo "$$kbd_share_dir" >kbd_share_dir.h; \
	  fi && \
	if test -d "$$kbd_share_dir"/keymaps/i386/qwerty; \
	then keytables=keymaps/i386/qwerty; \
	else keytables=keytables; \
	fi && \
	install $(install_own) --mode=ug=rw,o=r \
		$(filter %.psf, $(FONTS) $(FONTS2) $(FONTS512)) \
				 $$kbd_share_dir/consolefonts/ && \
	install $(install_own) --mode=ug=rw,o=r \
		$(filter-out %.psf, $(FONTS) $(FONTS2) $(FONTS512)) \
				 $$kbd_share_dir/consoletrans/ && \
	install $(install_own) --mode=ug=rw,o=r \
				$(KEYMAPS) $$kbd_share_dir/$$keytables/ && \
	cd $$kbd_share_dir/consoletrans/ && \
		for f in $(filter %.uni, $(FONTS) $(FONTS2) $(FONTS512)); \
		do \
			ln --symbolic --force $$f $${f%.uni}.sfm; \
			rm -f $$f.gz $$f.bz2  $${f%.uni}.sfm.gz  $${f%.uni}.sfm.bz2 vga2iso.gz vga2iso.bz2; \
		done && \
	cd $$kbd_share_dir/consolefonts/ && \
		for f in $(filter %.psf, $(FONTS) $(FONTS2) $(FONTS512)); \
		do \
			rm -f $$f.gz $$f.bz2; \
		done && \
	cd $$kbd_share_dir/$$keytables/ && \
		for f in $(KEYMAPS); \
		do \
			ln --symbolic --force $$f $${f%.map}.kmap; \
			rm -f $$f.gz $$f.bz2  $${f%.map}.kmap.gz  $${f%.map}.kmap.bz2; \
		done

	@echo Installing terminfo entries...
	sed --expression='s!/usr/sbin!$(sbindir)!' <linux+utf8.ti >linux+utf8.ti.tmp
	tic linux+utf8.ti.tmp
	rm linux+utf8.ti.tmp
	install $(install_own) --mode=u=rwx,go=rx \
		set_sticky_palette_for_linux-gr+utf8_terminal* $(sbindir)

	@echo Installing utilities...
	install --strip $(install_own) --mode=ug=rwx,o=rx \
		glyphs testUTF-8 $(bindir)
	install $(install_own) --mode=ug=rwx,o=rx \
		showfonts $(bindir)

	@echo '*' Please read README* how to install and configure \
				 everything else '*'.

UPHOST=sunsite.unc.edu
upload:
	[ $(VERSION)x != x ]
	set -x; xPWD=`pwd` && echo -e open -r -d 10 $(UPHOST) \\n \
	   cd /incoming/Linux \\n \
	   lcd $$xPWD \\n \
	   mput $(Package)-$(VERSION).lsm \\n \
	   lcd .. \\n \
	   mput $(Package)-$(VERSION).tar.gz{,.sig} \\n \
	   dir $(Package)* \\n \
	   redir $(Package)* \>$(Package)-$(VERSION).$(UPHOST) \\n \
	| ncftp
	echo -ne \\a
	sleep 1s
	echo -ne \\a

.PHONY: all backup check clean dist dist-source install install-X \
	install-getunimap test updateLatArCyrHeb.uni

# vi: set noexpandtab:

