# If you don't like to use the generating of the automatic dependencies,
# uncomment the following line
#NODEP=1

# If you don't a working 'cp', 'rm' or 'mv' on your system, you can build
# them with this makefile with
#  make utils
# or
#  make install_utils
# the second also installs these files in the $(DJDIR)/bin directory

ifndef srcdir
srcdir=.
endif
incdir=$(srcdir)/include
vpath %.cc $(srcdir)
vpath %.c $(srcdir)
vpath %.l $(srcdir)
vpath %.y $(srcdir)
vpath %.h $(srcdir)

INCLUDE = -I. -I$(srcdir) -I$(incdir)

ifndef LIBTV
LIBTV=libtv.a
endif

CPPFLAGS=$(INCLUDE)
CFLAGS=-O2
CXXFLAGS=$(CFLAGS) -Wall
AR = ar rcs

libdir=$(DJDIR)/lib

includedir=$(DJDIR)/lang/cxx/tvision

NameObjs=\
	Names/BackgroundName.o\
	Names/ButtonName.o\
	Names/ChDirDialogName.o\
	Names/CheckBoxesName.o\
	Names/ClusterName.o\
	Names/CollectionName.o\
	Names/ColorDialogName.o\
	Names/ColorDisplayName.o\
	Names/ColorGroupListName.o\
	Names/ColorItemListName.o\
	Names/ColorSelectorName.o\
	Names/DeskTopName.o\
	Names/DialogName.o\
	Names/DirCollectionName.o\
	Names/DirListBoxName.o\
	Names/EditorName.o\
	Names/EditWindowName.o\
	Names/FileCollectionName.o\
	Names/FileDialogName.o\
	Names/FileEditorName.o\
	Names/FileInfoPaneName.o\
	Names/FileInputLineName.o\
	Names/FileListName.o\
	Names/FilterValidatorName.o\
	Names/FrameName.o\
	Names/GroupName.o\
	Names/HistoryName.o\
	Names/IndicatorName.o\
	Names/InputLineName.o\
	Names/LabelName.o\
	Names/ListBoxName.o\
	Names/ListViewerName.o\
	Names/MenuBarName.o\
	Names/MenuBoxName.o\
	Names/MenuViewName.o\
	Names/MemoName.o\
	Names/MonoSelectorName.o\
	Names/ParamTextName.o\
	Names/RadioButtonsName.o\
	Names/RangeValidatorName.o\
	Names/ResourceCollectionName.o\
	Names/ScrollBarName.o\
	Names/ScrollerName.o\
	Names/SortedCollectionName.o\
	Names/SortedListBoxName.o\
	Names/StaticTextName.o\
	Names/StatusLineName.o\
	Names/StringCollectionName.o\
	Names/StringListName.o\
	Names/ValidatorName.o\
	Names/ViewName.o\
	Names/WindowName.o\

StreamObjs=\
	Stream/BackgroundStream.o\
	Stream/ButtonStream.o\
	Stream/ChDirDialogStream.o\
	Stream/CheckBoxesStream.o\
	Stream/ClusterStream.o\
	Stream/ColorDialogStream.o\
	Stream/ColorDisplayStream.o\
	Stream/ColorGroupListStream.o\
	Stream/ColorItemListStream.o\
	Stream/ColorSelectorStream.o\
	Stream/DeskTopStream.o\
	Stream/DialogStream.o\
	Stream/DirCollectionStream.o\
	Stream/DirListBoxStream.o\
	Stream/EditorStream.o\
	Stream/EditWindowStream.o\
	Stream/FileCollectionStream.o\
	Stream/FileDialogStream.o\
	Stream/FileEditorStream.o\
	Stream/FileInfoPaneStream.o\
	Stream/FileInputLineStream.o\
	Stream/FileListStream.o\
	Stream/FilterValidatorStream.o\
	Stream/FrameStream.o\
	Stream/GroupStream.o\
	Stream/HistoryStream.o\
	Stream/IndicatorStream.o\
	Stream/InputLineStream.o\
	Stream/LabelStream.o\
	Stream/ListBoxStream.o\
	Stream/ListViewerStream.o\
	Stream/MemoStream.o\
	Stream/MenuBarStream.o\
	Stream/MenuBoxStream.o\
	Stream/MenuViewStream.o\
	Stream/MonoSelectorStream.o\
	Stream/ParamTextStream.o\
	Stream/RadioButtonsStream.o\
	Stream/RangeValidatorStream.o\
	Stream/ResourceCollectionStream.o\
	Stream/ScrollBarStream.o\
	Stream/ScrollerStream.o\
	Stream/StaticTextStream.o\
	Stream/StatusLineStream.o\
	Stream/StringCollectionStream.o\
	Stream/StringListStream.o\
	Stream/ViewStream.o\
	Stream/WindowStream.o

ClassObjs=\
	Classes/TVEdMac.o\
	Classes/fpbase.o\
	Classes/fpstream.o\
	Classes/HelpBase.o \
	Classes/ifpstream.o\
	Classes/ipstream.o\
	Classes/iopstream.o\
	Classes/ofpstream.o\
	Classes/opstream.o\
	Classes/pstream.o\
	Classes/TVText1.o\
	Classes/TVText2.o\
	Classes/lang.o\
	Classes/T/Application.o\
	Classes/T/Background.o\
	Classes/T/Button.o\
	Classes/T/ChDirDialog.o\
	Classes/T/CheckBoxes.o\
	Classes/T/Cluster.o\
	Classes/T/Collection.o\
	Classes/T/ColorDialog.o\
	Classes/T/ColorDisplay.o\
	Classes/T/ColorGroupList.o\
	Classes/T/ColorItemList.o\
	Classes/T/ColorSelector.o\
	Classes/T/CommandSet.o\
	Classes/T/DeskTop.o\
	Classes/T/Dialog.o\
	Classes/T/DirCollection.o\
	Classes/T/DirListBox.o\
	Classes/T/Display.o\
	Classes/T/DrawBuffer.o\
	Classes/T/Editor.o\
	Classes/T/EditorFormatLine.o\
	Classes/T/EditWindow.o\
	Classes/T/Event.o\
	Classes/T/FileCollection.o\
	Classes/T/FileDialog.o\
	Classes/T/FileEditor.o\
	Classes/T/FileList.o\
	Classes/T/FileInfoPane.o\
	Classes/T/FileInputLine.o\
	Classes/T/FilterValidator.o\
	Classes/T/Frame.o\
	Classes/T/Group.o\
	Classes/T/HelpViewer.o\
	Classes/T/HelpWindow.o\
	Classes/T/History.o\
	Classes/T/HistoryViewer.o\
	Classes/T/HistoryWindow.o\
	Classes/T/HWMouse.o\
	Classes/T/Indicator.o\
	Classes/T/InputLine.o\
	Classes/T/Label.o\
	Classes/T/ListBox.o\
	Classes/T/ListViewer.o\
	Classes/T/Memo.o\
	Classes/T/MenuBar.o\
	Classes/T/MenuBox.o\
	Classes/T/MenuView.o\
	Classes/T/MonoSelector.o\
	Classes/T/Mouse.o\
	Classes/T/NSCollection.o\
	Classes/T/NSSortedCollection.o\
	Classes/T/Object.o\
	Classes/T/Palette.o\
	Classes/T/ParamText.o\
	Classes/T/Point.o\
	Classes/T/ProgInit.o\
	Classes/T/Program.o\
	Classes/T/PWObj.o\
	Classes/T/PWReadObjects.o\
	Classes/T/PWrittenObjects.o\
	Classes/T/RadioButtons.o\
	Classes/T/RangeValidator.o\
	Classes/T/Screen.o\
	Classes/T/ScrollBar.o\
	Classes/T/Scroller.o\
	Classes/T/SortedCollection.o\
	Classes/T/SortedListBox.o\
	Classes/T/StaticText.o\
	Classes/T/StatusLine.o\
	Classes/T/StringCollection.o\
	Classes/T/StatusDef.o\
	Classes/T/StrIndexRec.o\
	Classes/T/StringList.o\
	Classes/T/StrListMaker.o\
	Classes/T/SubMenu.o\
	Classes/T/SystemError.o\
	Classes/T/TextDevice.o\
	Classes/T/Terminal.o\
	Classes/T/Validator.o\
	Classes/T/View.o\
	Classes/T/Window.o\
	Classes/T/Resource/Collection.o\
	Classes/T/Resource/File.o\
	Classes/T/Streamab/leClass.o\
	Classes/T/Streamab/leTypes.o\

NAMES = $(NameObjs)

STREAMS=$(StreamObjs)

CLASSES=$(ClassObjs)

OTHERS=\
	bc.o\
	Drivers2.o\
	gkey.o\
	HistList.o\
	impl.o\
	macparse.o\
	maclex.o\
	macedit.o\
	Misc.o\
	MsgBox.o\
	NewStr.o\
	TVEdConstants.o\
	TVEdit1.o\
	TVEdit2.o\
	TVEdit3.o\
	FileView.o\
	ff.o

OBJS =  $(NAMES) \
	$(STREAMS) \
	$(CLASSES) \
	$(OTHERS)

all: $(LIBTV)

Names:
	if not exist Names\Nul mkdir Names

Stream:
	if not exist Stream\Nul mkdir Stream

Classes:
	if not exist Classes\Nul mkdir Classes

Classes/T: Classes
	if not exist Classes\T\Nul mkdir Classes\T

Classes/T/Resource: Classes/T
	if not exist Classes\T\Resource\Nul mkdir Classes\T\Resource

Classes/T/Streamab: Classes/T
	if not exist Classes\T\Streamab\Nul mkdir Classes\T\Streamab

dirs=Names Stream Classes Classes/T Classes/T/Resource Classes/T/Streamab

$(filter Names/%,$(OBJS)): Names
$(filter Stream/%,$(OBJS)): Stream
$(filter Classes/%,$(OBJS)): Classes
$(filter Classes/T/%,$(OBJS)): Classes/T
$(filter Classes/T/Resource/%,$(OBJS)): Classes/T/Resource
$(filter Classes/T/Streamab/%,$(OBJS)): Classes/T/Streamab

objs: $(OBJS)

subdirs: $(dirs)

$(LIBTV): $(OBJS)
	-rm -f $@
	$(AR) $@ $(OBJS)

clean:
	-rm -f $(OTHERS)
	-rm -f $(NAMES)
	-rm -f $(STREAMS)
	-rm -f $(CLASSES)
	-rm -f ________.ddd

distclean: clean
	-rm -f $(LIBTV)
	-rm -f $(OBJS:.o=.d)

realclean: distclean
	rm -f $(addprefix $(srcdir)/,macparse.cc macparse.h maclex.cc)

installdirs: $(libdir) $(includedir)

$(libdir):
	if not exist $(subst /,\,$@)\Nul mkdir $(subst /,\,$@)

$(includedir):
	if not exist $(subst /,\,$@)\Nul mkdir $(subst /,\,$@)

install: all installdirs install.lib install.headers

install.lib: $(LIBTV) installdirs
	cp $(LIBTV) $(libdir)

$(includedir)/%.h: $(srcdir)/include/%.h
	update $< $@

install.headers: $(addprefix $(includedir)/,$(notdir $(wildcard $(srcdir)/include/*.h)))

uninstall:
	-rm -f $(libdir)/$(LIBTV)
	-rm -f $(addprefix $(includedir)/,$(notdir $(wildcard $(srcdir)/include/*.h)))

$(srcdir)/macparse.cc: macparse.y
	bison -d -o _dummy.c $<
	update _dummy.c $*.cc
	update _dummy.h $*.h
	rm -f _dummy.c _dummy.h

$(srcdir)/maclex.cc: maclex.l macparse.h
	redir -o lexyy.c flex -t $<
	mv lexyy.c $@

UTILS=cp rm mv

%.exe: %.c
	gcc -O -s -o $@ $<

utils: $(addsuffix .exe,$(UTILS))

install_utils: utils
	cp $(addsuffix .exe,$(UTILS)) $(DJDIR)/bin

force:

ifneq ($(MAKEDEF),1)
-include $(srcdir)/make.def
endif
ifneq ($(NODEP),1)
include $(depfiles)
else
export NODEP=1
endif

