# gmake
# ◇

CPPSRCS = \
	main.cpp \
	DirEntry.cpp \
	DirStack.cpp \
	DlgInput.cpp \
	DlgSelect.cpp \
	FddEmu.cpp \
	FDSSystem.cpp \
	FDSSystemFdd.cpp \
	FDSSystemFiler.cpp \
	FDSSystemHelp.cpp \
	FDSSystemInfo.cpp \
	FDSSystemPath.cpp \
	IniFile.cpp \
	WStrUtil.cpp \
	

CPPOBJS = $(addprefix $(OBJDIR)/,$(CPPSRCS:.cpp=.o))
CPPDEPS = $(addprefix $(OBJDIR)/,$(CPPSRCS:.cpp=.dd))

OUTDIR_DEBUG = Debug
OUTDIR_RELEASE = Release

#CC = clang
#CXX = clang
LD = g++

CXXFLAGS = -c -g -D NCURSES_WIDECHAR=1 -Wall
LDFLAGS = -lncursesw

ifneq ($(NOSUDO),)
CXXFLAGS += -D NOSUDO=1
endif

ifneq ($(DEBUG),)
OUTDIR = $(OUTDIR_DEBUG)
CXXFLAGS +=
LDFLAGS +=
else
OUTDIR = $(OUTDIR_RELEASE)
CXXFLAGS += -O3 -DNDEBUG
LDFLAGS += 
endif

OBJDIR = $(OUTDIR)
EXEDIR = $(OUTDIR)

TARGETNAME = fds

TARGET = $(EXEDIR)/$(TARGETNAME)

.PHONY: target
target: $(TARGET)
$(TARGET): $(CPPOBJS)
	$(LD) $(LDFLAGS) -o $@ $^

$(OBJDIR)/%.o: $(OBJDIR)/%.dd
	$(CXX) $(CXXFLAGS) -o $@ $(patsubst %.dd,%.cpp,$(subst $(OBJDIR)/,,$<))

$(OBJDIR)/%.dd: %.cpp
	mkdir -p $(dir $@)
	echo -n $(OBJDIR)/>$@
	$(CXX) -MM $< >> $@

.PHONY: clean
clean:
	rm -rf $(OUTDIR_DEBUG) $(OUTDIR_RELEASE)

.PHONY: arc
arc:
	rm -rf package
	mkdir -p package/fds/fds
	cp *.cpp *.h *.ini *.sln *.vcxproj *.filters Makefile package/fds/fds/
	mkdir -p package/fds/dirent
	cp ../dirent/*.c ../dirent/*.h package/fds/dirent/
	mkdir -p package/fds/pdcurses
	cp ../pdcurses/curses.h ../pdcurses/*.txt package/fds/pdcurses/
	mkdir -p package/fds/wcwidth
	cp ../wcwidth/*.c ../wcwidth/*.h ../wcwidth/*.txt package/fds/wcwidth/
	cd package; tar cvzf fds20200506a.tar.gz fds; cd ..

ifeq ($(MAKECMDGOALS),)
INCLUDE_DEPS = 1
endif
ifeq ($(MAKECMDGOALS),target)
INCLUDE_DEPS = 1
endif
ifeq ($(INCLUDE_DEPS),1)
include $(CPPDEPS)
endif
