# Installation:
#  make distclean
#  make config
#  make
#  make install
# (c) Ricardas Cepas <rch@pub.osf.lt>. Copying policy: Berkeley style

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 is defined by `make config' (staff wheel bin root).
# You can override it at command line:
#   make ... group=staff

install_own = -o $(owner) -g $(group)
INSTALL_DATA = install -c	$(install_own) -m 664
INSTALL_MAN = $(INSTALL_DATA)
INSTALL_PROGRAM = install -c -s $(install_own) -m 775
INSTALL_SCRIPT =  install -c $(install_own) -m 775
MKDIR = install -d $(install_own) -m 2775

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   = $(BIN).o mimedecode.o
PREFIX  = /usr/local
prefix  = ${PREFIX}
var_prefix  = /var
# remove trailing /
#prefix := $(prefix:/=)
exec_prefix = $(prefix)
localstatedir = $(var_prefix)/lib
ALIASES = $(localstatedir)/$(BIN).aliases
bindir  = $(exec_prefix)/bin
docsdir  = $(prefix)/share/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 OptionalObjectFiles = ; \
		   else \
			echo \# USE_LIBC_DEF = \'-DUSE_LIBC=yes\'; \
			echo OptionalObjectFiles = utf.o; \
		fi >>Makefile.config
	set -xe; \
		for group in staff wheel bin root; \
		do if install -d -g $$group ./tstdir; \
		   then \
			echo group=$$group >>Makefile.config; \
			rmdir ./tstdir; \
			break; \
		   fi; \
		done;
	echo VERSION = `{ pwd -P || pwd; } | \
		sed -e 's!.*/$(Package)-!!;s!.*$(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 

FreeBSD_port/$(Package)/Makefile:	FreeBSD_port/$(Package)/Makefile.in
	[ $(VERSION)x != x ]
	sed -e 's/$${version}/$(VERSION)/g'  $? >FreeBSD_port/$(Package)/Makefile

$(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

$(BIN): $(OBJS) $(OptionalObjectFiles)
	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(OptionalObjectFiles) -o $@

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 tst* \#*\# 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 \
		FreeBSD_port/$(Package)/work \
		FreeBSD_port/$(Package)/Makefile

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 FreeBSD_port/$(Package)/Makefile
	[ $(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 

disttest:	$(DEBDIST)
	rm -R -f /tmp/$(package)-$(VERSION)
	cp $(addprefix ../$(package)_$(VERSION).,dsc tar.gz) /tmp/
	cd /tmp && tar -xvzf $(package)_$(VERSION).tar.gz
	make rpm
	rpm --install --force --nodeps /usr/src/redhat/RPMS/$(ARCHITECTURE)/$(Package)-$(VERSION)-0.$(ARCHITECTURE).rpm
	rpm -qisv $(Package)
	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)
	dpkg --purge $(package)
	cp $(addprefix ../$(package)_$(VERSION).,dsc tar.gz) /tmp/
	cd /tmp && tar -xvzf $(package)_$(VERSION).tar.gz
	cd /tmp/$(package)-$(VERSION) && pmake \
		&& pmake install test uninstall && make install SHELL=/bin/ash
	rm -R -f /tmp/$(package)-$(VERSION)
	$(MAKE) tar

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

install:	all $(DOCS) $(MAN1) $(EXAMPLES) $(term_init_script)
	test -e $(bindir) || $(MKDIR) $(bindir)
	$(INSTALL_PROGRAM)  $(BIN)      $(bindir)
	cd $(bindir) && ln -f -s $(BIN) $(BINalias)
	test -e $(docsdir) || $(MKDIR) $(docsdir)
	$(INSTALL_MAN)  $(DOCS)     $(docsdir)
	test -e $(examplesdir) || $(MKDIR) $(examplesdir)
	$(INSTALL_MAN)  $(EXAMPLES) $(examplesdir)
	test -e $(man1dir) || $(MKDIR) $(man1dir)
	$(INSTALL_MAN)  $(MAN1)     $(man1dir)
	test -e $(sysconfdir) || $(MKDIR) $(sysconfdir)
	set +o errexit; \
	cmp -s $(sysconfdir)/$(BIN).config  $(BIN).config; exit_code=$$?; \
	if [ _$$exit_code != _0 ]; then \
		if [ _$$exit_code = _1 ]; then suffix=.new; fi; \
		$(INSTALL_DATA) \
			$(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
	test -e `dirname $(ALIASES)` || $(MKDIR) `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 \
		 if ! tic -V 2>&1 |grep -q tconv; then \
		    TERMINFO=; tic linux+utf8.ti; \
		    test -e $(prefix)/share/terminfo/l/ || $(MKDIR) \
			    $(prefix)/share/terminfo/l/; \
		    cp /usr/share/terminfo/l/linux+utf8 \
			    /usr/share/terminfo/l/linux-gr+utf8 \
			    /usr/share/terminfo/l/linux+k \
				    $(prefix)/share/terminfo/l/; \
		 fi; \
		fi; \
	else \
		test -e $(charmaps_localdatadir) \
			|| $(MKDIR) $(charmaps_localdatadir); \
		if ! tic -V 2>&1 |grep -q tconv; \
		then tic linux+utf8.ti || echo Can\'t compile terminfo source ; \
		fi; \
		$(bindir)/$(BIN) --create-aliases || : ; \
	fi; \
	if [ $${prefix%%debian*}y != y ]; \
	then \
		test -e $(sbindir) || $(MKDIR) $(sbindir); \
		$(INSTALL_SCRIPT) $(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

port:
	sed -n -e 's/^Description:[[:space:]]*//p' $(Package).lsm.in \
		> FreeBSD_port/$(Package)/pkg/COMMENT
	{ sed -n -e '/^Description:/,/^[^[:space:]]/!d; /^[[:space:]]/p' \
		$(Package).lsm.in |grep -v 'console font'; echo; \
		echo '- Ricardas Cepas <rch@WriteMe.Com>'; } \
		> FreeBSD_port/$(Package)/pkg/DESCR
	cd FreeBSD_port/$(Package)/ # && make makesum
	cd /tmp/ && rm -rf $(Package)
	cd FreeBSD_port/$(Package)/work/$(Package)-$(VERSION) \
		&& make group=wheel prefix=/tmp/$(Package) \
			examplesdir=/tmp/$(Package)/share/examples/$(Package) install
	{ find /tmp/$(Package) -type f -or -type l \
          |sed -e 's!^'/tmp/$(Package)/'!!'; \
	  echo @dirrm share/examples/$(Package); \
	  echo @dirrm share/doc/$(Package); \
	} > FreeBSD_port/$(Package)/pkg/PLIST

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)

upload: upload_main #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 incoming.redhat.com\\n \
	   cd /libc6 \\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
	dupload --to erlangen ../$(package)_$(VERSION)_$(ARCHITECTURE).changes
	echo -ne \\a
	sleep 1s
	echo -ne \\a

UPHOST=sunsite.unc.edu
upload_main:
	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 \\n \
	   dir $(Package)*\\n \
	   redir $(Package)* \>$(Package)-$(VERSION).$(UPHOST)\\n \
	| ncftp
# vi: set noexpandtab:

