# Sprinter Commander — двухпанельный файловый менеджер.

EXAMPLE     := sprcmd
SRC_DIR     := src
BUILD_DIR   := build
MEMORY      := big
ALLOCS      ?= 3000
HDD_IMG     := $(CURDIR)/build/hdd/sprcmd.chd
MDVIEW2_DIR := $(CURDIR)/tests/fixtures/mdview2
MDVIEW2_SRCS := $(wildcard $(MDVIEW2_DIR)/*.c)
MDVIEW2_HEADERS := $(wildcard $(MDVIEW2_DIR)/*.h)
MDVIEW2_TEST_EXE := $(CURDIR)/build/external/mdview2.exe
P5_COPY_FAULT_EXE := $(CURDIR)/build/tests/cperr.exe
P6_SORT_TEST_EXE := $(CURDIR)/build/tests/sortrt.exe
P7_SELECT_TEST_EXE := $(CURDIR)/build/tests/selrt.exe
P9_MKDIR_TEST_EXE := $(CURDIR)/build/tests/mkrt.exe
P10_RENAME_TEST_EXE := $(CURDIR)/build/tests/renrt.exe
P11_DELETE_TEST_EXE := $(CURDIR)/build/tests/delrt.exe
P19_OVERWRITE_TEST_EXE := $(CURDIR)/build/tests/p19/delrt.exe
BANK1_SRCS  := src/sc_source_fs.c src/sc_sort.c src/sc_select.c \
	src/sc_copy_job.c src/sc_metadata.c src/sc_disk.c src/sc_tree.c src/sc_exec_ui.c
BANK2_SRCS  := src/sc_draw.c src/sc_dialog.c src/sc_copy_ui.c \
	src/sc_file_ui.c src/sc_name.c src/sc_rename.c
EXTRA_FLAGS := --safe --max-allocs $(ALLOCS) -I include \
	$(foreach f,$(BANK1_SRCS),--bank 1=$(f)) \
	$(foreach f,$(BANK2_SRCS),--bank 2=$(f))
EXTRA_SRCS  := \
	src/sc_app.c \
	src/sc_command.c \
	src/sc_input.c \
	src/sc_path.c \
	src/sc_panel.c \
	src/sc_platform_screen.c \
	src/sc_platform_exec.c \
	src/sc_screen.c \
	src/sc_store.c \
	src/sc_theme.c \
	src/sc_video_system.c

include $(CURDIR)/sdk.mk

HEADERS := $(wildcard include/*.h)

$(EXE): Makefile $(HEADERS) $(BANK1_SRCS) $(BANK2_SRCS)

hdd-stress: $(EXE)
	sh tests/make_p3_stress_hdd.sh $(CURDIR)/build/hdd/p3_stress.chd $(EXE)

hdd-copy: $(EXE)
	sh tests/make_p4_copy_hdd.sh $(CURDIR)/build/hdd/p4_copy.chd $(EXE)

tests/p4_exec_child/p4child.exe: tests/p4_exec_child/p4child.c \
		tests/p4_exec_child/Makefile
	$(MAKE) -C tests/p4_exec_child ALLOCS=$(ALLOCS)

hdd-exec: $(EXE) tests/p4_exec_child/p4child.exe
	sh tests/make_p4_exec_hdd.sh $(CURDIR)/build/hdd/p4_exec.chd \
		$(EXE) tests/p4_exec_child/p4child.exe

hdd-p5: $(EXE)
	sh tests/make_p5_hdd.sh $(CURDIR)/build/hdd/p5_stability.chd $(EXE)

hdd-p5-enospc: $(EXE)
	sh tests/make_p5_enospc_hdd.sh \
		$(CURDIR)/build/hdd/p5_enospc.chd $(EXE)

hdd-p5-panels: $(EXE)
	sh tests/make_p5_panel_edges_hdd.sh \
		$(CURDIR)/build/hdd/p5_panel_edges.chd $(EXE)

$(MDVIEW2_TEST_EXE): $(MDVIEW2_SRCS) $(MDVIEW2_HEADERS) $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory small --max-allocs $(ALLOCS) \
		-o $@ $(MDVIEW2_SRCS)

hdd-p5-viewer: $(EXE) $(MDVIEW2_TEST_EXE)
	sh tests/make_p5_viewer_hdd.sh \
		$(CURDIR)/build/hdd/p5_viewer.chd $(EXE) \
		$(MDVIEW2_TEST_EXE) $(MDVIEW2_DIR)/README.md

$(P5_COPY_FAULT_EXE): tests/p5_copy_faults.c src/sc_copy_job.c \
		src/sc_metadata.c src/sc_disk.c \
		src/sc_path.c src/sc_platform_exec.c include/sc_copy.h \
		include/sc_metadata.h include/sc_disk.h include/sc_path.h \
		include/sc_exec.h $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-I include --bank 1=src/sc_copy_job.c --bank 1=src/sc_metadata.c \
		--bank 1=src/sc_disk.c -o $@ \
		tests/p5_copy_faults.c src/sc_path.c src/sc_platform_exec.c

hdd-p5-copy-faults: $(P5_COPY_FAULT_EXE)
	sh tests/make_p5_copy_faults_hdd.sh \
		$(CURDIR)/build/hdd/p5_copy_faults.chd $(P5_COPY_FAULT_EXE)

hdd-p5-media: $(EXE)
	sh tests/make_p5_media_hdd.sh \
		$(CURDIR)/build/hdd/p5_media.chd $(EXE)

$(P6_SORT_TEST_EXE): tests/p6_sort_probe.c src/sc_sort.c src/sc_store.c \
		include/sc_entry.h include/sc_panel.h include/sc_sort.h \
		include/sc_store.h $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-I include --bank 1=src/sc_sort.c -o $@ \
		tests/p6_sort_probe.c src/sc_store.c

hdd-p6-sort: $(EXE) $(P6_SORT_TEST_EXE)
	sh tests/make_p6_sort_hdd.sh $(CURDIR)/build/hdd/p6_sort.chd \
		$(EXE) $(P6_SORT_TEST_EXE)

$(P7_SELECT_TEST_EXE): tests/p7_select_probe.c src/sc_select.c \
		src/sc_store.c include/sc_entry.h include/sc_panel.h \
		include/sc_select.h include/sc_store.h $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-I include --bank 1=src/sc_select.c -o $@ \
		tests/p7_select_probe.c src/sc_store.c

hdd-p7-select: $(EXE) $(P7_SELECT_TEST_EXE)
	sh tests/make_p7_select_hdd.sh $(CURDIR)/build/hdd/p7_select.chd \
		$(EXE) $(P7_SELECT_TEST_EXE)

hdd-p8-masks: hdd-p7-select

$(P9_MKDIR_TEST_EXE): tests/p9_mkdir_probe.c src/sc_name.c src/sc_path.c \
		include/sc_path.h $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-I include --bank 1=src/sc_name.c -o $@ \
		tests/p9_mkdir_probe.c src/sc_path.c

hdd-p9-mkdir: $(EXE) $(P9_MKDIR_TEST_EXE)
	sh tests/make_p9_mkdir_hdd.sh $(CURDIR)/build/hdd/p9_mkdir.chd \
		$(EXE) $(P9_MKDIR_TEST_EXE)

$(P10_RENAME_TEST_EXE): tests/p10_rename_probe.c src/sc_rename.c \
		include/sc_file_ops.h $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-I include --bank 1=src/sc_rename.c -o $@ \
		tests/p10_rename_probe.c

hdd-p10-rename: $(EXE) $(P10_RENAME_TEST_EXE)
	sh tests/make_p10_rename_hdd.sh $(CURDIR)/build/hdd/p10_rename.chd \
		$(EXE) $(P10_RENAME_TEST_EXE)

$(P11_DELETE_TEST_EXE): tests/p11_delete_probe.c $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-o $@ tests/p11_delete_probe.c

hdd-p11-delete: $(EXE) $(P11_DELETE_TEST_EXE)
	sh tests/make_p11_delete_hdd.sh $(CURDIR)/build/hdd/p11_delete.chd \
		$(EXE) $(P11_DELETE_TEST_EXE)

hdd-p12-group-copy: $(EXE)
	sh tests/make_p12_group_copy_hdd.sh \
		$(CURDIR)/build/hdd/p12_group_copy.chd $(EXE)

hdd-p13-group-delete: $(EXE)
	sh tests/make_p13_group_delete_hdd.sh \
		$(CURDIR)/build/hdd/p13_group_delete.chd $(EXE)

hdd-p14-default-colors: $(EXE)
	sh tests/make_p14_default_colors_hdd.sh \
		$(CURDIR)/build/hdd/p14_default_colors.chd $(EXE)

hdd-p15-tree-copy: $(EXE)
	sh tests/make_p15_tree_copy_hdd.sh \
		$(CURDIR)/build/hdd/p15_tree_copy.chd $(EXE)

hdd-p15-tree-cancel: $(EXE)
	sh tests/make_p15_tree_cancel_hdd.sh \
		$(CURDIR)/build/hdd/p15_tree_cancel.chd $(EXE)

hdd-p15-tree-self: $(EXE)
	sh tests/make_p15_tree_self_hdd.sh \
		$(CURDIR)/build/hdd/p15_tree_self.chd $(EXE)

hdd-p16-group-tree-copy: $(EXE)
	sh tests/make_p16_group_tree_copy_hdd.sh \
		$(CURDIR)/build/hdd/p16_group_tree_copy.chd $(EXE)

hdd-p17-tree-delete: $(EXE)
	sh tests/make_p17_tree_delete_hdd.sh \
		$(CURDIR)/build/hdd/p17_tree_delete.chd $(EXE)

hdd-p17-tree-delete-cancel: $(EXE)
	sh tests/make_p17_tree_delete_cancel_hdd.sh \
		$(CURDIR)/build/hdd/p17_tree_delete_cancel.chd $(EXE)

hdd-p18-metadata: $(EXE)
	sh tests/make_p18_metadata_hdd.sh \
		$(CURDIR)/build/hdd/p18_metadata.chd $(EXE)

$(P19_OVERWRITE_TEST_EXE): tests/p19_overwrite_probe.c \
		src/sc_copy_job.c src/sc_metadata.c src/sc_disk.c src/sc_path.c \
		include/sc_copy.h include/sc_metadata.h include/sc_disk.h \
		include/sc_path.h $(LIB)
	mkdir -p $(dir $@)
	$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
		-I include --bank 1=src/sc_copy_job.c --bank 1=src/sc_metadata.c \
		--bank 1=src/sc_disk.c \
		-o $@ tests/p19_overwrite_probe.c src/sc_path.c

hdd-p19-overwrite: $(P19_OVERWRITE_TEST_EXE)
	sh tests/make_p19_overwrite_hdd.sh \
		$(CURDIR)/build/hdd/p19_overwrite.chd $(P19_OVERWRITE_TEST_EXE)

hdd-p19-policy: $(EXE)
	sh tests/make_p19_policy_hdd.sh \
		$(CURDIR)/build/hdd/p19_policy.chd $(EXE)

.PHONY: hdd-stress hdd-copy hdd-exec hdd-p5 hdd-p5-enospc hdd-p5-panels \
	hdd-p5-viewer hdd-p5-copy-faults hdd-p5-media hdd-p6-sort hdd-p7-select \
	hdd-p8-masks hdd-p9-mkdir hdd-p10-rename hdd-p11-delete \
	hdd-p12-group-copy hdd-p13-group-delete hdd-p14-default-colors \
	hdd-p15-tree-copy hdd-p15-tree-cancel hdd-p15-tree-self \
	hdd-p16-group-tree-copy hdd-p17-tree-delete hdd-p17-tree-delete-cancel \
	hdd-p18-metadata hdd-p19-overwrite hdd-p19-policy
