# Installation:
#  make distclean
#  make config
#  make
#  make install

Package=2UTF
package=2utf

SHELL = /bin/sh

CC      = cc

# Don't use multibyte functions from Linux libc5 - use files from `tcs' instead!
# Uncomment this if your mbtowc() and wctomb() are not broken,
#then make distclean.
#USE_LIBC=yes

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

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

include Makefile.config
#.include "Makefile.config"

BIN     = 2UTF
BINalias = fromUTF
DEBDIST	= ../$(package)_$(VERSION)_$(ARCHITECTURE).changes \
	../$(package)_$(VERSION)_$(ARCHITECTURE).deb \
	../$(package)_$(VERSION).dsc \
	../$(package)_$(VERSION).tar.gz
DEBIAN	= debian/changelog debian/control.in debian/copyright debian/rules 
DOCS    = TODO copyright changelog BSD_style_license
EXAMPLES = examples/IBM771.gz examples/IBM772.gz examples/LatArCyrHeb.uni.gz \
	examples/Makefile examples/Minicom examples/README \
	examples/linux+utf8.ti examples/procmailrc \
	examples/set_sticky_palette_for_linux-gr+utf8_terminal
# comment this out if you don't want compressed man pages and docs:
GZIPDOCS = yes
MAN1	= $(BIN).1
MAN1alias = $(BINalias).1
MAN1alias2 = toUTF.1
SRCS    = $(BIN).c $(BIN).h utf.c hdr.h plan9.h mimedecode.c
OBJS   = utf.o mimedecode.o
prefix  = /usr/local
var_prefix  = /var/local
# remove trailing /
#prefix := $(prefix:/=)
exec_prefix = $(prefix)
localstatedir = $(var_prefix)/lib
ALIASES = $(localstatedir)/$(BIN).aliases
bindir  = $(exec_prefix)/bin
docsdir  = $(prefix)/doc/$(Package)
examplesdir = $(docsdir)/examples
charmaps_localdatadir  = /usr/local/share/i18n/charmaps
man1dir  = $(prefix)/man/man1
# for terminal initialization script
sbindir  = $(exec_prefix)/sbin
sysconfdir = $(prefix)/etc
term_init_script = examples/set_sticky_palette_for_linux-gr+utf8_terminal
# ~ is not expanded. String must end with \0
CONFIG_PATHNAMES = $(sysconfdir)/$(BIN).config\0/usr/local/etc/$(BIN).config\0/usr/etc/$(BIN).config\0/etc/$(BIN).config\0\0
DEFS    = '-DALIASES="$(ALIASES)"' '-DPATH="$(charmaps_localdatadir)"' \
	 '-DCONFIG_PATHNAMES="$(CONFIG_PATHNAMES)"' '-DVERSION="$(VERSION)"' \
	 $(USE_LIBC_DEF)

# flags for your C compilator:
#OPT = -g3 -O0
OPT = -O2
WARN = -Wall -W -Wconversions -Wbad-function-cast
CFLAGS  = $(OPT) $(WARN) $(DEFS)
LDFLAGS = #none

all:	$(BIN) linux+utf8.ti

config:
	echo \# Generated by \`make config\' >Makefile.config
	set -xe; \
		if [ $(USE_LIBC)_ = yes_ ] \
		|| { [ $(USE_LIBC)_ != no_ ] && [ $(USE_LIBC)x = x ] \
		  && OS=`uname -s` && [ $${OS%%[Ll][Ii][Nn][Uu][Xx]}x = x ] \
		  && z=`ldd \`type $(CC) | { read a b c; echo $$c; }\`` \
		  && [ $${z%%*libc.so.[6789]*}x = x ]; } \
		   then \
			echo USE_LIBC_DEF = \'-DUSE_LIBC=yes\'; \
			echo '$$(BIN): mimedecode.o' >Makefile.2; \
		   else \
			echo \# USE_LIBC_DEF = \'-DUSE_LIBC=yes\'; \
			echo '$$(BIN): utf.o mimedecode.o' >>Makefile.2; \
			echo utf.o: hdr.h plan9.h >>Makefile.2; \
		fi >>Makefile.config
	echo VERSION = `{ pwd -P || pwd; } | \
		sed -e 's!.*/\($(Package)\|$(package)\)-!!'` >>Makefile.config
	ARCHITECTURE="`if test -x /usr/bin/dpkg; \
		then dpkg --print-architecture; else uname -m; fi`" \
	&& if [ "$${ARCHITECTURE%%i?86}"y = y ]; then ARCHITECTURE=i386; fi \
	&& echo ARCHITECTURE = "$$ARCHITECTURE" >>Makefile.config 

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

$(Package)-$(VERSION).spec:	$(Package).spec.in
	-rm -f $(Package)*.spec
	[ $(VERSION)x != x ]
	Summary="`sed -n -e 's/^Description:[[:space:]]*//p' \
						$(Package).lsm.in`" \
	&& Copying="`sed -n -e 's/^Copying-policy:[[:space:]]*//p' \
						$(Package).lsm.in`" \
	&& sed -e 's/$${version}/$(VERSION)/g; s/$${summary}/'"$${Summary}"'/g; \
		 s/$${copying}/'"$${Copying}"/g \
		 $< >tmp
	sed -n -e '1,/^%description/p' tmp >$@
	sed -n -e '/^Description:/,/^[^[:space:]]/!d; /^[[:space:]]/p' \
		$(Package).lsm.in >>$@
	sed -n -e '1,/^%description/!p' tmp >>$@
	rm -f tmp

$(BIN).o: $(BIN).h approx.c

include Makefile.2
#.include Makefile.2

approx.c: approx.c.in0 approx.c.in1 approx.c.in2 approx.c.in3
	echo -n 'char approx2ascii[][5] = { ' >$@
	sed -e 's/"/\\042/g; s/^\(....\)[[:space:]]*$$/\1 x /; s/^.... [^[:space:]][^[:space:]]*[[:space:]]*$$/& \\0/; s/^.... [^[:space:]][^[:space:]]*[[:space:]][[:space:]]*\([^[:space:]][^[:space:]]*\)/"\1",/' approx.c.in[0-3] >>$@ || { rm $@; false; }
	echo '};' >>$@

clean:
	-rm  -R -f *.o *~ *.bak 1 2 t t2 tt tags tmp \#*\# errors* \
		core* linux+utf8.ti \
		a.out approx.c ./stdin ./stdout typescript filelist \
		debian/control debian/tmp debian/files* debian/substvars* \
		$(BIN) $(Package)-*.spec $(Package)-*.lsm lsm

debdist $(DEBDIST):	examples $(DEBIAN) $(DOCS) $(MAN1) $(SRCS)
	[ $(VERSION)x != x ]
	test -r $$HOME/.pgp/secring.pgp
	dpkg-buildpackage
	$(MAKE) config

dist tar: $(DEBIAN) distclean examples $(DOCS) $(MAN1) $(SRCS) $(Package)-$(VERSION).lsm $(Package)-$(VERSION).spec
	[ $(VERSION)x != x ]
	-rm -f -R /tmp/$(Package)-$(VERSION)/
	mkdir /tmp/$(Package)-$(VERSION)
	tar -cf- ./ | { cd /tmp/$(Package)-$(VERSION) && tar -xpf -; }
	cd ../ && xPWD="`pwd`" \
		&& cd /tmp/ && tar -cvzf "$$xPWD"/$(Package)-$(VERSION).tar.gz \
				$(Package)-$(VERSION)/
	-rm -f -R /tmp/$(Package)-$(VERSION)/
	$(MAKE) config

distclean: clean
	-rm -f ../$(package)_$(VERSION)_$(ARCHITECTURE).deb
	echo make_from_scratch: distclean config myself >Makefile.config 
	echo >Makefile.2

disttest:	$(DEBDIST)
	cp $(addprefix ../$(package)_$(VERSION).,dsc tar.gz) /tmp/
	cd /tmp && tar -xvzf $(package)_$(VERSION).tar.gz
	cd /tmp/$(package)-$(VERSION) && make \
		&& make install test uninstall
	rm -R -f /tmp/$(package)-$(VERSION)
	cd /tmp && dpkg-source -x $(package)_$(VERSION).dsc
	cd /tmp/$(package)-$(VERSION) && \
		dpkg-buildpackage -B
	dpkg --contents /tmp/$(package)_$(VERSION)_$(ARCHITECTURE).deb
	-rpm --erase --allmatches $(Package)
	dpkg --install  /tmp/$(package)_$(VERSION)_$(ARCHITECTURE).deb
	cd /tmp/$(package)-$(VERSION) && rm $(DEBDIST)
	rm -R -f /tmp/$(package)-$(VERSION)

examples:
	if test -d ../linux-lt-current; then cd examples && make all; fi

install:	all $(DOCS) $(MAN1) $(EXAMPLES) $(term_init_script)
	install -d $(install_own) -m 2775 $(bindir)
	install -s $(install_own) -m 775  $(BIN)      $(bindir)
	cd $(bindir) && ln -f -s $(BIN) $(BINalias)
	install -d $(install_own) -m 2775 $(docsdir)
	install    $(install_own) -m 664  $(DOCS)     $(docsdir)
	install -d $(install_own) -m 2775 $(examplesdir)
	install    $(install_own) -m 664  $(EXAMPLES) $(examplesdir)
	install -d $(install_own) -m 2775 $(man1dir)
	install -d $(install_own) -m 2775	$(charmaps_localdatadir)
	install    $(install_own) -m 664  $(MAN1)     $(man1dir)
	install -d $(install_own) -m 2775 $(sysconfdir)
	cmp -s $(sysconfdir)/$(BIN).config  $(BIN).config; exit_code=$$?; \
	if [ _$$exit_code != _0 ]; then \
		if [ _$$exit_code = _1 ]; then suffix=.new; fi; \
		install    $(install_own) -m 664 \
			$(BIN).config $(sysconfdir)/$(BIN).config$$suffix; \
	fi
	if [ $(GZIPDOCS) = yes ]; \
	then \
		gzip --best --force --verbose \
			$(docsdir)/changelog $(man1dir)/$(MAN1); \
		cd $(man1dir) && ln -f -s $(MAN1).gz $(MAN1alias).gz \
		&& ln -f -s $(MAN1).gz $(MAN1alias2).gz; \
	else \
		cd $(man1dir) && ln -f -s $(MAN1) $(MAN1alias) \
		&& ln -f -s $(MAN1) $(MAN1alias2); \
	fi
	install -d $(install_own) -m 2775 `dirname $(ALIASES)`
	# check if this is install in temporary directory:
	set -xe; \
	if prefix=$(prefix) && \
			[ $${prefix%%/*}x != x -o $(tmpdir_install)_ = yes_ ]; \
	then \
		dd bs=11000 count=1 </dev/zero >$(ALIASES); \
		chown $(owner).$(group) $(ALIASES); chmod 664 $(ALIASES); \
		if [ $${prefix##debian*}y != y ]; \
		then \
		    TERMINFO=; tic linux+utf8.ti; \
		    install -d $(install_own) -m 2775 \
			    $(prefix)/share/terminfo/l/; \
		    cp /usr/share/terminfo/l/linux+utf8 \
			    /usr/share/terminfo/l/linux-gr+utf8 \
				    $(prefix)/share/terminfo/l/; \
		fi; \
	else \
		$(bindir)/$(BIN) --create-aliases; \
		tic linux+utf8.ti; \
	fi; \
	if [ $${prefix%%debian*}y != y ]; \
	then \
		install -d $(install_own) -m 2775 $(sbindir); \
		install $(install_own) -m 775 $(term_init_script) $(sbindir); \
	fi
	# you can specify directory for tic, but that doesn't work :-(

linux+utf8.ti:	examples/linux+utf8.ti
	sed -e 's!/usr/sbin!$(sbindir)!' $< >$@

myself:
	$(MAKE) all

realclean: distclean
	-rm -f $(DEBDIST)

rpm:		tar $(Package)-$(VERSION).spec
		cp ../$(Package)-$(VERSION).tar.gz /usr/src/redhat/SOURCES
		rpm -v -ba $(Package)-$(VERSION).spec

rpmi:
		rpm -vv -bi --short-circuit $(Package)-$(VERSION).spec

rpmsign:
	test -r $$HOME/.pgp/secring.pgp
	rpm -vv --resign \
		/usr/src/redhat/SRPMS/$(Package)-$(VERSION)-*.src.rpm \
		/usr/src/redhat/RPMS/$(ARCHITECTURE)/$(Package)-$(VERSION)-*.$(ARCHITECTURE).rpm

rpmdist:	rpm rpmsign

tags:	$(SRCS)
	ctags *.[ch]

test check:
	$(bindir)/$(BINalias) --help
	$(bindir)/$(BIN) --show-charmap --verbose 88591
	@echo -n "Press <enter> ... "
	@read a

uninstall:
	-rm -f $(ALIASES) $(bindir)/$(BIN) $(bindir)/$(BINalias)
	cd $(man1dir) \
		&& for f in $(MAN1) $(MAN1alias) $(MAN1alias2); \
			do rm -f  $$f $$f.gz; done
	cd $(docsdir) \
		&& for f in $(DOCS); do rm -f $$f $$f.gz; done
	cd $(examplesdir) \
		&& for f in $(EXAMPLES); \
			do rm -f $${f##*/} $${f##*/}.gz; done
	-rmdir $(examplesdir)
	-rmdir $(docsdir)

UPHOST=sunsite.unc.edu
upload: #dist debdist ../$(Package)-$(VERSION).tar.gz $(Package)-$(VERSION).lsm
	[ $(VERSION)x != x ]
	[ "`rpm --checksig \
		/usr/src/redhat/SRPMS/$(Package)-$(VERSION)-*.src.rpm \
		/usr/src/redhat/RPMS/$(ARCHITECTURE)/$(Package)-$(VERSION)-*.$(ARCHITECTURE).rpm \
	| grep -c 'pgp md5 OK$$'`" = 2 ]
	set -x; xPWD=`pwd` && echo -e open -r -d 10 ftp.redhat.com\\n \
	   cd /pub/Incoming\\n \
	   mput /usr/src/redhat/SRPMS/$(Package)-$(VERSION)-*.src.rpm \
	    /usr/src/redhat/RPMS/$(ARCHITECTURE)/$(Package)-$(VERSION)-*.rpm\\n \
	   dir $(Package)-$(VERSION)-0.src.rpm $(Package)-$(VERSION)-0.i386.rpm\\n \
	   redir \>$$xPWD/../$(Package)-$(VERSION).ftp.redhat.com\\n \
	| ncftp
	set -x; xPWD=`pwd` && echo -e open -r -d 10 $(UPHOST)\\n \
	   cd /incoming/Linux\\n \
	   lcd $$xPWD\\n \
	   mput ../$(Package)-$(VERSION).tar.gz $(Package)-$(VERSION).lsm\\n \
	   dir $(Package)*\\n \
	   redir $(Package)* \>../$(Package)-$(VERSION).$(UPHOST)\\n \
	| ncftp
	dupload --to erlangen ../$(package)_$(VERSION)_$(ARCHITECTURE).changes
	echo -ne \\a
	sleep 1s
	echo -ne \\a

# vi: set noexpandtab:

