# Makefile for
# - parser & tree-builder base modules
# - normalize   -- pretty-printer for HTML files
# - htmlclean	-- clean up HTML files
# - num		-- number H1-H6 headers
# - toc		-- create a ToC of H1-H6
# - count	-- count elements and attributes in a file
# - unent	-- replace entities by character itself (assumes UTF-8)
# - pipe	-- transform HTML or XML to nsgmls-like output
# - xml2asc	-- convert a UTF-8 stream to ASCII with &#nnn; entities
# - asc2xml	-- convert ASCII with &#nnn; entities to UTF-8
# - wls		-- list all links from a file
#
# Bert Bos <bert@w3.org>
# Created 8 May 1998
# $Id: Makefile,v 1.19 1999/07/31 19:52:33 bbos Exp $

# How to invoke flex
LEX = flex -Cfe
# How to invoke bison
YACC = bison -y -v
# Flags for bison
YFLAGS = -d
# How to invoke the C compiler
#CC = purify -cache-dir=$(HOME)/Tmp gcc
CC = gcc
# Flags for cc
CFLAGS = -g -Wall -fpic# -O3 -Wall# -g -p -O2
#CFLAGS = -fpic -O3 -Wall# -g -p -O2
# How to invoke the C preprocessor
CPP = gcc -E
# Libraries (add "-lsocket -lnsl" for Solaris)
LIBS = -lsocket -lnsl
# Where to install the binaries
BINDIR = $(HOME)/bin
# Where to install the manual pages
MANDIR = $(HOME)/man

# No configuration needed below here


COMM_HDRS = export.h # api.h
YACC_SRCS = html.y # css2.y
LEX_SRCS = scan.l # css2scan.l
GPERF_SRCS = dtd.hash unent.hash
LIB_SRCS = $(YACC_SRCS:.y=.c) $(LEX_SRCS:.l=.c) \
	types.c tree.c textwrap.c url.c openurl.c \
	heap.c connectTCP.c connectsock.c errexit.c dtd.c
#	style.c css.c test-css.c \
#	css2value.c css2decl.c css2sel.c css2rules.c
APPL_SRCS = cexport.c htmlclean.c toc.c num.c normalize.c count.c pipe.c \
	xmlrecode.c unent.c unpipe.c multitoc.c wls.c # test-url.c

CFILES = $(APPL_SRCS) $(LIB_SRCS)
SRCS = $(COMM_HDRS) $(CFILES)

# GEN_SRCS = $(YACC_SRCS:.y=.c) $(LEX_SRCS:.l=.c) $(GPERF_SRCS:.hash=.c)
LIB_OBJS = $(LIB_SRCS:.c=.o)
OBJS = $(CFILES:.c=.o)
HDRS = $(CFILES:.c=.e) $(YACC_SRCS:.y=.h)


APPLS = $(APPL_SRCS:.c=)
#	cexport htmlclean num toc normalize count pipe unent xml2asc asc2xml \
#	test-url # style test-css
#COMMONLIB = libweb.so
COMMONLIB = libweb.a
MANPAGES = normalize.1 count.1 toc.1 wls.1

VERSION := $(shell date +%d-%b-%Y)
PACKAGE = htmlutils-$(VERSION)


SUFFIX	      =	.c:sC .l:sC .y:sC .e:h .h:h
.SUFFIXES:	.e
.c.e: cexport;	./do_export $* $(CFLAGS) -c "$(CPP)"
.y.h:;	$(YACC) $(YFLAGS) $<; mv y.tab.c $*.c; mv y.tab.h $*.h
.y.c:;	$(YACC) $(YFLAGS) $<; mv y.tab.c $*.c; mv y.tab.h $*.h


all: $(COMMONLIB) $(APPLS)

install: all
	cp $(APPLS) $(BINDIR)
	cp $(MANPAGES) $(MANDIR)

package: $(PACKAGE).tar.gz

clean:
	-rm -f $(APPLS)
	-rm -f $(OBJS)
	-rm -f $(PACKAGE).tar.gz
	-rm -f $(COMMONLIB)
	-rm -f *~ *.bak core

veryclean: clean
	-rm -f $(HDRS)
	-rm -f $(GEN_SRCS)

depend: cexport $(CFILES) $(HDRS)
	makedepend -- $(CFLAGS) -- $(CFILES)


#$(COMMONLIB): $(LIB_OBJS)
#	$(CC) $(LDFLAGS) -shared -o $(COMMONLIB) $(LIB_OBJS)
$(COMMONLIB): $(LIB_OBJS)
	$(AR) $(ARFLAGS) $(COMMONLIB) $(LIB_OBJS)

asc2xml: xmlrecode.o
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

xml2asc: asc2xml
	-rm $@
	ln $< $@

htmlclean: htmlclean.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

num: num.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

toc: toc.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

normalize: normalize.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

count: count.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

pipe: pipe.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

unpipe: unpipe.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

unent: unent.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

multitoc: multitoc.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

wls: wls.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

test-url: test-url.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

test-css: test-css.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

style: style.o $(COMMONLIB)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

dtd.c: dtd.hash
	gperf -a -c -C -o -t -p -T -k '1,2,$$' -N lookup_element $< >$@

unent.c: unent.hash
	gperf -a -c -C -o -t -p -k '1,2,$$' -D -N lookup_entity $< >$@

property.c: property.hash
	gperf -a -c -C -o -t -p -k '1,2,12,$$' -N lookup_property $< >$@

css2.h css2.c:: css2.y
	$(YACC) $(YFLAGS) -p css2 -t $<; mv y.tab.c $*.c; mv y.tab.h $*.h

css2scan.c: css2scan.l
	@$(RM) $@ 
	$(LEX) $(LFLAGS) -d -t -Pcss2 $< >$@

cexport: cexport.c
	$(CC) $(CFLAGS) -o $@ $^

$(PACKAGE).tar.gz: depend Makefile do_export *.1 README*
	-rm -rf $(PACKAGE)
	mkdir $(PACKAGE)
	cp README* $(COMM_HDRS) $(YACC_SRCS) $(LEX_SRCS) $(GPERF_SRCS) \
		$(LIB_SRCS) $(APPL_SRCS) Makefile do_export *.1 $(PACKAGE)
	tar cf - $(PACKAGE) | gzip >$@
	rm -rf $(PACKAGE)

$(HDRS):: cexport

# DO NOT DELETE

cexport.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
cexport.o: /usr/include/sys/va_list.h /usr/include/string.h
cexport.o: /usr/include/ctype.h /usr/include/stdlib.h
htmlclean.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
htmlclean.o: /usr/include/sys/va_list.h export.h types.e tree.e html.e scan.e
toc.o: /usr/include/assert.h /usr/include/ctype.h
toc.o: /usr/include/sys/feature_tests.h /usr/include/stdlib.h
toc.o: /usr/include/stdio.h /usr/include/sys/va_list.h /usr/include/time.h
toc.o: /usr/include/string.h export.h types.e tree.e html.e scan.e openurl.e
num.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
num.o: /usr/include/sys/va_list.h /usr/include/unistd.h
num.o: /usr/include/sys/types.h /usr/include/sys/isa_defs.h
num.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
num.o: /usr/include/sys/select.h /usr/include/sys/time.h /usr/include/time.h
num.o: /usr/include/sys/unistd.h /usr/include/ctype.h /usr/include/string.h
num.o: /usr/include/stdlib.h /usr/include/assert.h export.h types.e html.e
num.o: scan.e openurl.e
normalize.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
normalize.o: /usr/include/sys/va_list.h /usr/include/ctype.h
normalize.o: /usr/include/stdlib.h /usr/include/unistd.h
normalize.o: /usr/include/sys/types.h /usr/include/sys/isa_defs.h
normalize.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
normalize.o: /usr/include/sys/select.h /usr/include/sys/time.h
normalize.o: /usr/include/time.h /usr/include/sys/unistd.h
normalize.o: /usr/include/assert.h export.h types.e tree.e html.e scan.e
normalize.o: textwrap.e openurl.e
count.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
count.o: /usr/include/sys/va_list.h /usr/include/unistd.h
count.o: /usr/include/sys/types.h /usr/include/sys/isa_defs.h
count.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
count.o: /usr/include/sys/select.h /usr/include/sys/time.h
count.o: /usr/include/time.h /usr/include/sys/unistd.h /usr/include/ctype.h
count.o: /usr/include/string.h /usr/include/stdlib.h /usr/include/assert.h
count.o: export.h types.e html.e scan.e openurl.e
pipe.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
pipe.o: /usr/include/sys/va_list.h /usr/include/unistd.h
pipe.o: /usr/include/sys/types.h /usr/include/sys/isa_defs.h
pipe.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
pipe.o: /usr/include/sys/select.h /usr/include/sys/time.h /usr/include/time.h
pipe.o: /usr/include/sys/unistd.h /usr/include/ctype.h /usr/include/string.h
pipe.o: /usr/include/stdlib.h /usr/include/assert.h export.h types.e html.e
pipe.o: scan.e openurl.e
xmlrecode.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
xmlrecode.o: /usr/include/sys/va_list.h /usr/include/string.h
xmlrecode.o: /usr/include/ctype.h
unent.o: /usr/include/string.h /usr/include/sys/feature_tests.h
unent.o: /usr/include/stdio.h /usr/include/sys/va_list.h /usr/include/ctype.h
unpipe.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
unpipe.o: /usr/include/sys/va_list.h /usr/include/ctype.h
unpipe.o: /usr/include/stdlib.h /usr/include/unistd.h
unpipe.o: /usr/include/sys/types.h /usr/include/sys/isa_defs.h
unpipe.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
unpipe.o: /usr/include/sys/select.h /usr/include/sys/time.h
unpipe.o: /usr/include/time.h /usr/include/sys/unistd.h /usr/include/assert.h
unpipe.o: export.h types.e heap.e errexit.e openurl.e
multitoc.o: /usr/include/assert.h /usr/include/ctype.h
multitoc.o: /usr/include/sys/feature_tests.h /usr/include/stdlib.h
multitoc.o: /usr/include/stdio.h /usr/include/sys/va_list.h
multitoc.o: /usr/include/time.h /usr/include/string.h export.h types.e html.e
multitoc.o: scan.e openurl.e
wls.o: /usr/include/assert.h /usr/include/ctype.h
wls.o: /usr/include/sys/feature_tests.h /usr/include/stdlib.h
wls.o: /usr/include/stdio.h /usr/include/sys/va_list.h /usr/include/time.h
wls.o: /usr/include/string.h export.h types.e tree.e html.e scan.e openurl.e
wls.o: heap.e url.e
html.o: /usr/include/assert.h /usr/include/stdio.h
html.o: /usr/include/sys/feature_tests.h /usr/include/sys/va_list.h
html.o: /usr/include/stdlib.h /usr/include/string.h export.h types.e tree.e
scan.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
scan.o: /usr/include/sys/va_list.h /usr/include/assert.h
scan.o: /usr/include/string.h /usr/include/stdlib.h /usr/include/ctype.h
scan.o: export.h types.e html.h
types.o: /usr/include/stdlib.h /usr/include/sys/feature_tests.h export.h
types.o: heap.e
tree.o: /usr/include/assert.h /usr/include/stdlib.h
tree.o: /usr/include/sys/feature_tests.h /usr/include/string.h
tree.o: /usr/include/ctype.h /usr/include/stdio.h /usr/include/sys/va_list.h
tree.o: export.h heap.e types.e dtd.e
textwrap.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h
textwrap.o: /usr/include/sys/va_list.h /usr/include/ctype.h
textwrap.o: /usr/include/assert.h /usr/include/string.h export.h types.e
url.o: /usr/include/stdlib.h /usr/include/sys/feature_tests.h
url.o: /usr/include/assert.h /usr/include/stdio.h /usr/include/sys/va_list.h
url.o: /usr/include/string.h /usr/include/regex.h /usr/include/sys/types.h
url.o: /usr/include/sys/isa_defs.h /usr/include/sys/machtypes.h
url.o: /usr/include/sys/int_types.h /usr/include/sys/select.h
url.o: /usr/include/sys/time.h /usr/include/time.h export.h heap.e
openurl.o: /usr/include/stdlib.h /usr/include/sys/feature_tests.h
openurl.o: /usr/include/sys/types.h /usr/include/sys/isa_defs.h
openurl.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
openurl.o: /usr/include/sys/select.h /usr/include/sys/time.h
openurl.o: /usr/include/time.h /usr/include/sys/stat.h /usr/include/fcntl.h
openurl.o: /usr/include/sys/fcntl.h /usr/include/errno.h
openurl.o: /usr/include/sys/errno.h /usr/include/stdio.h
openurl.o: /usr/include/sys/va_list.h /usr/include/sys/socket.h
openurl.o: /usr/include/sys/uio.h /usr/include/sys/netconfig.h
openurl.o: /usr/include/unistd.h /usr/include/sys/unistd.h export.h heap.e
openurl.o: url.e connectTCP.e
heap.o: /usr/include/stdlib.h /usr/include/sys/feature_tests.h
heap.o: /usr/include/stdio.h /usr/include/sys/va_list.h /usr/include/string.h
heap.o: export.h
connectTCP.o: export.h connectsock.e
connectsock.o: /usr/include/sys/types.h /usr/include/sys/feature_tests.h
connectsock.o: /usr/include/sys/isa_defs.h /usr/include/sys/machtypes.h
connectsock.o: /usr/include/sys/int_types.h /usr/include/sys/select.h
connectsock.o: /usr/include/sys/time.h /usr/include/time.h
connectsock.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
connectsock.o: /usr/include/sys/netconfig.h /usr/include/netinet/in.h
connectsock.o: /usr/include/sys/stream.h /usr/include/sys/vnode.h
connectsock.o: /usr/include/sys/t_lock.h /usr/include/sys/machlock.h
connectsock.o: /usr/include/sys/sleepq.h /usr/include/sys/turnstile.h
connectsock.o: /usr/include/sys/param.h /usr/include/sys/unistd.h
connectsock.o: /usr/include/sys/pirec.h /usr/include/sys/mutex.h
connectsock.o: /usr/include/sys/rwlock.h /usr/include/sys/semaphore.h
connectsock.o: /usr/include/sys/condvar.h /usr/include/sys/cred.h
connectsock.o: /usr/include/sys/resource.h /usr/include/vm/seg_enum.h
connectsock.o: /usr/include/sys/poll.h /usr/include/sys/strmdep.h
connectsock.o: /usr/include/sys/model.h /usr/include/sys/byteorder.h
connectsock.o: /usr/include/arpa/inet.h /usr/include/netdb.h
connectsock.o: /usr/include/errno.h /usr/include/sys/errno.h
connectsock.o: /usr/include/stdlib.h /usr/include/string.h export.h errexit.e
errexit.o: /usr/include/stdarg.h /usr/include/sys/va_list.h
errexit.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h export.h
dtd.o: /usr/include/string.h /usr/include/sys/feature_tests.h
dtd.o: /usr/include/stdlib.h /usr/include/assert.h export.h types.e
