#
# Makefile for hsc ("html sucks completely")
#
# Copyright (C) 1995-1998  Thomas Aglassinger
# Copyright (C) 2001-2003 Matthias Bethke
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#

CC	= gcc
SYS	= -DUNIX
CFLAGS = -fomit-frame-pointer -O3 -Wall -pedantic
#CFLAGS = -ggdb -g3 -DDEBUG -DDEBUG_UGLY -DDEBUG_UGLY_MEMORY -Wall -pedantic -lefence
#CFLAGS = -ggdb -Wall -pedantic

# Link statically against dietlibc. Might be faster for you, though slightly
# bigger than the dynamic glibc version
#CC	= diet gcc -nostdinc

#------------------------------------------------
#
# These symbols are only needed if you use the
# `install' rule:
#
# INSTALL       `install' command to be used
# INSTDIR       base destination-directory 
#               ("/bin" and "/lib" will be added)
#
#------------------------------------------------
INSTALL         = install
#INSTALL	= /bin/install

#INSTDIR         = /usr
INSTDIR	= /usr/local
#INSTDIR	= $(HOME)

#------------------------------------------------
#
# Windows NT/2000/XP, Visual C++ 6.0
#
# NOTES: 
#  - also change "COMP" below, otherwise linking will fail
#  - ignore the link-errors (making the makefile use *.obj 
#    instead of *.o would be more trouble)
#  - use 'nmake' to build hsc.exe
#  - 'nmake install' doesn't work.
#
#------------------------------------------------
#CC	= cl
#CFLAGS	= -Ox -nologo
#SYS	= -DWINNT

#------------------------------------------------
#
# NeXTStep
#
#------------------------------------------------
#CC	= cc
#CFLAGS	=
#SYS	= -DNEXTSTEP

#------------------------------------------------
#
# AmigaOS with ixemul.library
#
#------------------------------------------------
#CC	= gcc
#CFLAGS	= -m68020-40 -Wall -W -pedantic -Wno-unused -O2 -s \
#	-fstrength-reduce -fbaserel	
#SYS	= -DUNIX -UAMIGA

#------------------------------------------------
#
# BeOS
#
#------------------------------------------------
#CC	= mwcc
#CFLAGS	= -ansi off -char unsigned -dialect c
#SYS	= -DBEOS 

#------------------------------------------------
#
# AmigaOS with PowerUp (experimental)
#
#------------------------------------------------
#CC	= vc
#CFLAGS	= -Iugly
#SYS	= -DAMIGA

#------------------------------------------------
#
# AROS crosscompiling
#
#------------------------------------------------
#CC	= /usr/local/aros-sdk/bin/i386-aros-gcc
#CFLAGS = -Wall -pedantic -s -O3
#SYS	= -DAROS

#------------------------------------------------
#
# Unixoid Systems
#
# Try to guesstimate the values that might work 
# with your system and compiler.
#
#------------------------------------------------

#------------------------------------------------
# this one should usually work
#
#CC	= cc
#CFLAGS	=
#SYS	= -DUNIX

#------------------------------------------------
# this one should also work and even optimise
#
#CC	= cc
#CFLAGS	= -O
#SYS	= -DUNIX

#------------------------------------------------
# create a debugging version
#
#CC	= cc
#CFLAGS	= -DDEBUG -DDEBUG_UGLY
#SYS	= -DUNIX

#------------------------------------------------
# works with gcc
#
#CC	= gcc
#CFLAGS = -DDEBUG -DDEBUG_UGLY
#CFLAGS = -O2
#SYS	= -DUNIX

#------------------------------------------------
# create a debugging version for gcc and gdb
#
#CC	= gcc
#CFLAGS	= -DDEBUG -DDEBUG_UGLY -ggdb
#SYS	= -DUNIX

#--------------------------------------------------------------------
# avoid fooling around below this line
#--------------------------------------------------------------------

.PHONY: all docs clean all_clean sterile depend ckx

# use this line for Visual C++ 6.0:
#COMP	= $(CC) -Fo$@ $(SYS) -I. -c

# use this line for other platforms:
COMP	= $(CC) -o $@ $(SYS) -I.

LINK	= $(CC) -o $@ $(SYS) -I.
MOVE	= mv
COPY	= cp
DELETE	= rm -f
DELETEALL= rm -Rf

#--------------------------------------------------------------------
# do not touch anything below this line
#--------------------------------------------------------------------

PROJECT_DIRS = amiga hsc hsclib hscprj hsctools riscos ugly
DEPENDENCIES = .deps
#
# symbols for objects and executables
#
OBJ_TOOLS	= ugly/umemory.o ugly/ustring.o ugly/unikot.o ugly/expstr.o \
		ugly/fname.o ugly/dllist.o ugly/ufile.o ugly/uargs.o \
		ugly/ustrlist.o ugly/infile.o ugly/prginfo.o \
		hscprj/document.o hscprj/license.o hscprj/project.o \
		hscprj/readprj.o hscprj/writeprj.o

OBJ_HSC		= $(OBJ_TOOLS) \
		hsclib/lmessage.o hsclib/entity.o hsclib/tag.o hsclib/attrib.o \
		hsclib/idref.o hsclib/hscprc.o hsclib/lstatus.o hsclib/input.o \
		hsclib/skip.o hsclib/uri.o hsclib/eval.o hsclib/posteval.o \
		hsclib/defattr.o hsclib/deftag.o hsclib/css.o hsclib/parse.o \
		hsclib/include.o hsclib/linit.o hsclib/size.o hsclib/tag_misc.o \
		hsclib/tag_a.o hsclib/tag_hsc.o hsclib/tag_if.o \
		hsclib/tag_macro.o hsclib/tcpip.o \
		hsc/global.o hsc/status.o hsc/callback.o hsc/args.o \
		hsc/output.o hsc/hsc.o
OBJ_DEPP	= hsctools/hscdepp.o
OBJ_PITT	= hsctools/hscpitt.o
OBJ_ALL		= $(OBJ_HSC)
EXE_ALL		= hsc/hsc hsctools/hscdepp hsctools/hscpitt

#
# compile all tools
#
all : $(EXE_ALL) docs

# implict rule for object-files
# (old-style implicit rule)
.c.o :
	$(COMP)  $(CFLAGS) -c $<

hsc/hsc : $(OBJ_HSC)
	$(LINK) $(OBJ_HSC) $(CFLAGS)

hsctools/hscdepp : $(OBJ_TOOLS) $(OBJ_DEPP)
	$(LINK) $(OBJ_DEPP) $(OBJ_TOOLS) $(CFLAGS)

hsctools/hscpitt : $(OBJ_TOOLS) $(OBJ_PITT)
	$(LINK) $(OBJ_PITT) $(OBJ_TOOLS) $(CFLAGS)

#--------------------------------------------------------------------
# installation
#--------------------------------------------------------------------
install : all
	strip $(EXE_ALL)
	$(INSTALL) -m 755 -s hsc/hsc $(INSTDIR)/bin/hsc
	$(INSTALL) -m 755 -s hsctools/hscdepp $(INSTDIR)/bin/hscdepp
	$(INSTALL) -m 755 -s hsctools/hscpitt $(INSTDIR)/bin/hscpitt
	$(INSTALL) -m 644 hsc.prefs $(INSTDIR)/lib/hsc.prefs
	$(INSTALL) -m 644 -D README $(INSTDIR)/share/doc/hsc/README
	$(INSTALL) -m 644 -D CHANGES $(INSTDIR)/share/doc/hsc/CHANGES
	cp -R docs $(INSTDIR)/share/doc/hsc/
	find $(INSTDIR)/share/doc/hsc/docs -type d | xargs chmod 755
	find $(INSTDIR)/share/doc/hsc/docs -type f | xargs chmod 644

#--------------------------------------------------------------------
# cleanup - remove all objects and executables
#--------------------------------------------------------------------
clean :
	$(DELETE) $(EXE_ALL) $(foreach d,$(PROJECT_DIRS),$(wildcard $(d)/*.o))

sterile : clean
	find . -name tags | xargs $(DELETE)
	$(DELETEALL) docs/*
	find . -name .nautilus-metafile.xml -or -name .thumbnails | xargs $(DELETE)

#--------------------------------------------------------------------
# compile the doumentation
#--------------------------------------------------------------------
docs:
	PATH=$(shell pwd)/hsc:$(PATH) HSCEXTRAOPTS="IGNORE=21" make -C docs-source

#--------------------------------------------------------------------
# update dependencies
#--------------------------------------------------------------------
depend: $(DEPENDENCIES)

$(DEPENDENCIES):
	$(DELETE) $@
	for d in amiga hsc hsclib hscprj hsctools riscos ugly; do \
		for f in `ls $$d/*.c`; do \
			gcc -DUNIX -I. -MM "$$f" | \
			sed -e "s/^\w\+\.o:/$$d\/&/" >>$@; \
		done; \
	done


include .deps
