HALCMDSRCS := hal/utils/halcmd.c hal/utils/halcmd_commands.cc hal/utils/halcmd_main.c
HALSHSRCS := hal/utils/halcmd.c hal/utils/halcmd_commands.cc hal/utils/halsh.c

ifneq ($(READLINE_LIBS),)
HALCMDSRCS += hal/utils/halcmd_completion.c
endif
USERSRCS += $(sort $(HALCMDSRCS) $(HALSHSRCS))

$(call TOOBJSDEPS, $(HALSHSRCS)) : EXTRAFLAGS = -fPIC
$(call TOOBJSDEPS, hal/utils/halsh.c) : EXTRAFLAGS += $(TCL_CFLAGS)
../tcl/hal.so: $(call TOOBJS, $(HALSHSRCS)) ../lib/liblinuxcncini.so.0 ../lib/liblinuxcnchal.so.0
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CXX) $(LDFLAGS) -shared $^  $(TCL_LIBS) -o $@
TARGETS += ../tcl/hal.so

../bin/halcmd: $(call TOOBJS, $(HALCMDSRCS)) ../lib/liblinuxcncini.so.0 ../lib/liblinuxcnchal.so.0 
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CXX) $(LDFLAGS) -o $@ $^ $(READLINE_LIBS)
TARGETS += ../bin/halcmd

HALRMTSRCS := hal/utils/halrmt.c
USERSRCS += $(HALRMTSRCS)

../bin/halrmt: $(call TOOBJS, $(HALRMTSRCS)) ../lib/liblinuxcnchal.so.0
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CC) $(LDFLAGS) -o $@ $^ -lpthread
TARGETS += ../bin/halrmt

ifneq ($(GTK_VERSION),)
HALMETERSRCS := \
    hal/utils/meter.c \
    hal/utils/miscgtk.c

USERSRCS += $(HALMETERSRCS)

../bin/halmeter: $(call TOOBJS, $(HALMETERSRCS)) ../lib/liblinuxcnchal.so.0
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CC) $(LDFLAGS) -o $@ $^  $(GTK_LIBS)
TARGETS += ../bin/halmeter

HALSCOPESRCS := \
    hal/utils/scope.c \
    hal/utils/scope_horiz.c \
    hal/utils/scope_vert.c \
    hal/utils/scope_trig.c \
    hal/utils/scope_disp.c \
    hal/utils/scope_files.c \
    hal/utils/miscgtk.c

USERSRCS += $(HALSCOPESRCS)

../bin/halscope: $(call TOOBJS, $(HALSCOPESRCS)) ../lib/liblinuxcnchal.so.0
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(GTK_LIBS) -lm
TARGETS += ../bin/halscope

HALGTKSRCS := \
    hal/utils/scope.c \
    hal/utils/scope_horiz.c \
    hal/utils/scope_vert.c \
    hal/utils/scope_trig.c \
    hal/utils/scope_disp.c \
    hal/utils/scope_files.c \
    hal/utils/meter.c \
    hal/utils/miscgtk.c
$(call TOOBJSDEPS, $(HALGTKSRCS)) : EXTRAFLAGS = $(GTK_CFLAGS)
$(call TOOBJS, $(HALGTKSRCS)): Makefile.inc
endif

ifneq ($(BUILD_SYS),uspace)
PCIWRITESRCS := hal/utils/pci_write.c hal/utils/upci.c
USERSRCS += $(PCIWRITESRCS)
../bin/pci_write: $(call TOOBJS, $(PCIWRITESRCS))
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CC) $(LDFLAGS) -o $@ $^
TARGETS += ../bin/pci_write

PCIREADSRCS := hal/utils/pci_read.c hal/utils/upci.c
USERSRCS += $(PCIREADSRCS)
../bin/pci_read: $(call TOOBJS, $(PCIREADSRCS))
	$(ECHO) Linking $(notdir $@)
	$(Q)$(CC) $(LDFLAGS) -o $@ $^
TARGETS += ../bin/pci_read

endif

../bin/halcompile: ../bin/%: objects/hal/utils/%.py
	@$(ECHO) Syntax checking python script $(notdir $@)
	$(Q)$(PYTHON) -m py_compile $<
	$(ECHO) Copying python script $(notdir $@)
	$(Q)(echo '#!$(PYTHON)'; sed '1 { /^#!/d; }' $<) > $@.tmp && chmod +x $@.tmp && mv -f $@.tmp $@

../bin/elbpcom: ../bin/%: hal/utils/%.py
	@$(ECHO) Syntax checking python script $(notdir $@)
	$(Q)$(PYTHON) -m py_compile $<
	$(ECHO) Copying python script $(notdir $@)
	$(Q)(echo '#!$(PYTHON)'; sed '1 { /^#!/d; }' $<) > $@.tmp && chmod +x $@.tmp && mv -f $@.tmp $@

../bin/modcompile: ../bin/%: hal/drivers/mesa-hostmot2/modbus/%.py
	@$(ECHO) Syntax checking python script $(notdir $@)
	$(Q)$(PYTHON) -m py_compile $<
	$(ECHO) Copying python script $(notdir $@)
	$(Q)(echo '#!$(PYTHON)'; sed '1 { /^#!/d; }' $<) > $@.tmp && chmod +x $@.tmp && mv -f $@.tmp $@
../share/linuxcnc/mesa_modbus.c.tmpl: hal/drivers/mesa-hostmot2/modbus/mesa_modbus.c.tmpl
	$(ECHO) Copying Modbus template $(notdir $@)
	$(Q)cp -f $< $@

../bin/mesambccc: ../bin/%: hal/drivers/mesa-hostmot2/%.py
	@$(ECHO) Syntax checking python script $(notdir $@)
	$(Q)$(PYTHON) -m py_compile $<
	$(ECHO) Copying python script $(notdir $@)
	$(Q)(echo '#!$(PYTHON)'; sed '1 { /^#!/d; }' $<) > $@.tmp && chmod +x $@.tmp && mv -f $@.tmp $@

TARGETS += ../bin/halcompile ../bin/elbpcom ../bin/modcompile ../share/linuxcnc/mesa_modbus.c.tmpl ../bin/mesambccc
objects/%.py: %.g
	@mkdir -p $(dir $@)
	$(Q)$(YAPPS) $< $@
