# DVX Widget Modules Makefile for DJGPP cross-compilation
#
# Builds individual .wgt modules from widget source files.
# Each .wgt is a DXE loaded by the loader at startup.

DJGPP_PREFIX  = $(HOME)/djgpp/djgpp
CC            = $(DJGPP_PREFIX)/bin/i586-pc-msdosdjgpp-gcc
DXE3GEN       = PATH=$(DJGPP_PREFIX)/bin:$(PATH) DJDIR=$(DJGPP_PREFIX)/i586-pc-msdosdjgpp $(DJGPP_PREFIX)/i586-pc-msdosdjgpp/bin/dxe3gen
CFLAGS        = -O2 -Wall -Wextra -march=i486 -mtune=i586 -I../core -I../core/platform -I../tasks -I../core/thirdparty

OBJDIR = ../obj/widgets
WGTDIR = ../bin/widgets

SRCS = widgetAnsiTerm.c \
       widgetBox.c \
       widgetButton.c \
       widgetCanvas.c \
       widgetCheckbox.c \
       widgetComboBox.c \
       widgetDropdown.c \
       widgetImage.c \
       widgetImageButton.c \
       widgetLabel.c \
       widgetListBox.c \
       widgetListView.c \
       widgetProgressBar.c \
       widgetRadio.c \
       widgetScrollPane.c \
       widgetSeparator.c \
       widgetSlider.c \
       widgetSpacer.c \
       widgetSpinner.c \
       widgetSplitter.c \
       widgetStatusBar.c \
       widgetTabControl.c \
       widgetTextInput.c \
       widgetTimer.c \
       widgetToolbar.c \
       widgetTreeView.c

OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))

WGT_MODS = $(WGTDIR)/box.wgt \
           $(WGTDIR)/button.wgt \
           $(WGTDIR)/canvas.wgt \
           $(WGTDIR)/checkbox.wgt \
           $(WGTDIR)/combobox.wgt \
           $(WGTDIR)/dropdown.wgt \
           $(WGTDIR)/imgbtn.wgt \
           $(WGTDIR)/image.wgt \
           $(WGTDIR)/label.wgt \
           $(WGTDIR)/listbox.wgt \
           $(WGTDIR)/listview.wgt \
           $(WGTDIR)/progress.wgt \
           $(WGTDIR)/radio.wgt \
           $(WGTDIR)/scrlpane.wgt \
           $(WGTDIR)/separatr.wgt \
           $(WGTDIR)/slider.wgt \
           $(WGTDIR)/spacer.wgt \
           $(WGTDIR)/spinner.wgt \
           $(WGTDIR)/splitter.wgt \
           $(WGTDIR)/statbar.wgt \
           $(WGTDIR)/tabctrl.wgt \
           $(WGTDIR)/terminal.wgt \
           $(WGTDIR)/textinpt.wgt \
           $(WGTDIR)/timer.wgt \
           $(WGTDIR)/toolbar.wgt \
           $(WGTDIR)/treeview.wgt

.PHONY: all clean

DEPFILES = textinpt combobox spinner terminal listbox dropdown listview treeview
WGT_DEPS = $(DEPFILES:%=$(WGTDIR)/%.dep)

all: $(WGT_MODS) $(WGT_DEPS)

$(WGTDIR)/%.dep: ../config/%.dep | $(WGTDIR)
	sed 's/$$/\r/' $< > $@

# Generic widget module rule: export only the registration function
$(WGTDIR)/%.wgt: | $(WGTDIR)
	$(DXE3GEN) -o $(WGTDIR)/$*.dxe -E _wgtRegister -U $<
	mv $(WGTDIR)/$*.dxe $@

# Map .wgt name to .o file
$(WGTDIR)/box.wgt:      $(OBJDIR)/widgetBox.o
$(WGTDIR)/button.wgt:   $(OBJDIR)/widgetButton.o
$(WGTDIR)/canvas.wgt:   $(OBJDIR)/widgetCanvas.o
$(WGTDIR)/checkbox.wgt: $(OBJDIR)/widgetCheckbox.o
$(WGTDIR)/combobox.wgt: $(OBJDIR)/widgetComboBox.o
$(WGTDIR)/dropdown.wgt: $(OBJDIR)/widgetDropdown.o
$(WGTDIR)/imgbtn.wgt:   $(OBJDIR)/widgetImageButton.o
$(WGTDIR)/image.wgt:    $(OBJDIR)/widgetImage.o
$(WGTDIR)/label.wgt:    $(OBJDIR)/widgetLabel.o
$(WGTDIR)/listbox.wgt:  $(OBJDIR)/widgetListBox.o
$(WGTDIR)/listview.wgt: $(OBJDIR)/widgetListView.o
$(WGTDIR)/progress.wgt: $(OBJDIR)/widgetProgressBar.o
$(WGTDIR)/radio.wgt:    $(OBJDIR)/widgetRadio.o
$(WGTDIR)/scrlpane.wgt: $(OBJDIR)/widgetScrollPane.o
$(WGTDIR)/separatr.wgt: $(OBJDIR)/widgetSeparator.o
$(WGTDIR)/slider.wgt:   $(OBJDIR)/widgetSlider.o
$(WGTDIR)/spacer.wgt:   $(OBJDIR)/widgetSpacer.o
$(WGTDIR)/spinner.wgt:  $(OBJDIR)/widgetSpinner.o
$(WGTDIR)/splitter.wgt: $(OBJDIR)/widgetSplitter.o
$(WGTDIR)/statbar.wgt:  $(OBJDIR)/widgetStatusBar.o
$(WGTDIR)/tabctrl.wgt:  $(OBJDIR)/widgetTabControl.o
$(WGTDIR)/terminal.wgt: $(OBJDIR)/widgetAnsiTerm.o
$(WGTDIR)/textinpt.wgt: $(OBJDIR)/widgetTextInput.o
$(WGTDIR)/timer.wgt:    $(OBJDIR)/widgetTimer.o
$(WGTDIR)/toolbar.wgt:  $(OBJDIR)/widgetToolbar.o
$(WGTDIR)/treeview.wgt: $(OBJDIR)/widgetTreeView.o

# Compile
$(OBJDIR)/%.o: %.c | $(OBJDIR)
	$(CC) $(CFLAGS) -c -o $@ $<

$(OBJDIR):
	mkdir -p $(OBJDIR)

$(WGTDIR):
	mkdir -p $(WGTDIR)

# Dependencies
WIDGET_DEPS = ../core/dvxWidgetPlugin.h ../core/dvxWidget.h ../core/dvxTypes.h ../core/dvxApp.h ../core/dvxDraw.h ../core/dvxWm.h ../core/dvxVideo.h
$(OBJDIR)/widgetAnsiTerm.o:    widgetAnsiTerm.c $(WIDGET_DEPS)
$(OBJDIR)/widgetBox.o:         widgetBox.c $(WIDGET_DEPS)
$(OBJDIR)/widgetButton.o:      widgetButton.c $(WIDGET_DEPS)
$(OBJDIR)/widgetCanvas.o:      widgetCanvas.c $(WIDGET_DEPS) ../core/thirdparty/stb_image.h ../core/thirdparty/stb_image_write.h
$(OBJDIR)/widgetCheckbox.o:    widgetCheckbox.c $(WIDGET_DEPS)
$(OBJDIR)/widgetComboBox.o:    widgetComboBox.c $(WIDGET_DEPS)
$(OBJDIR)/widgetDropdown.o:    widgetDropdown.c $(WIDGET_DEPS)
$(OBJDIR)/widgetImage.o:       widgetImage.c $(WIDGET_DEPS) ../core/thirdparty/stb_image.h
$(OBJDIR)/widgetImageButton.o: widgetImageButton.c $(WIDGET_DEPS)
$(OBJDIR)/widgetLabel.o:       widgetLabel.c $(WIDGET_DEPS)
$(OBJDIR)/widgetListBox.o:     widgetListBox.c $(WIDGET_DEPS)
$(OBJDIR)/widgetListView.o:    widgetListView.c $(WIDGET_DEPS)
$(OBJDIR)/widgetProgressBar.o: widgetProgressBar.c $(WIDGET_DEPS)
$(OBJDIR)/widgetRadio.o:       widgetRadio.c $(WIDGET_DEPS)
$(OBJDIR)/widgetScrollPane.o:  widgetScrollPane.c $(WIDGET_DEPS)
$(OBJDIR)/widgetSeparator.o:   widgetSeparator.c $(WIDGET_DEPS)
$(OBJDIR)/widgetSlider.o:      widgetSlider.c $(WIDGET_DEPS)
$(OBJDIR)/widgetSpacer.o:      widgetSpacer.c $(WIDGET_DEPS)
$(OBJDIR)/widgetSpinner.o:     widgetSpinner.c $(WIDGET_DEPS)
$(OBJDIR)/widgetSplitter.o:    widgetSplitter.c $(WIDGET_DEPS)
$(OBJDIR)/widgetStatusBar.o:   widgetStatusBar.c $(WIDGET_DEPS)
$(OBJDIR)/widgetTabControl.o:  widgetTabControl.c $(WIDGET_DEPS)
$(OBJDIR)/widgetTextInput.o:   widgetTextInput.c $(WIDGET_DEPS)
$(OBJDIR)/widgetTimer.o:       widgetTimer.c $(WIDGET_DEPS)
$(OBJDIR)/widgetToolbar.o:     widgetToolbar.c $(WIDGET_DEPS)
$(OBJDIR)/widgetTreeView.o:    widgetTreeView.c $(WIDGET_DEPS)

clean:
	rm -f $(OBJS) $(WGT_MODS) $(WGT_DEPS)
	-rmdir $(WGTDIR) 2>/dev/null
