# flext - C++ layer for Max/MSP and pd (pure data) externals
# Copyright (c) 2001-2003 Thomas Grill (xovo@gmx.net)
#
# ----- for internal use ----------------------
#

!include config-pd-msvc.txt

# source files
SOURCE=source

# includes
INCPATH=/I$(MSVCPATH)\include /I$(PDPATH)\src /I$(SOURCE)
LDFLAGS=/LIBPATH:$(MSVCPATH)\lib

!ifdef SNDOBJ
INCPATH=$(INCPATH) /I$(SNDOBJ) 
!endif

!ifdef STK
INCPATH=$(INCPATH) /I$(STK) 
!endif

# compiler definitions and flags
DEFS=/DFLEXT_SYS=2 $(UFLAGS)

CFLAGS=/GX /GD /G6 /arch:SSE
OFLAGS=/Ox
DFLAGS=/Od /Zi

TARGET=pdwin  # appendix to lib name



!ifdef FLEXT_SHARED
DEFS=$(DEFS) /DFLEXT_SHARED /DFLEXT_DLL 

EXT=dll

!ifndef _DEBUG
CFLAGS=$(CFLAGS) $(OFLAGS) /MT /LD
OBJPATH=l
!else
CFLAGS=$(CFLAGS) $(DFLAGS) /MTd /LDd
OBJPATH=ld
!endif

!else

EXT=lib

!ifdef FLEXT_THREADS
DEFS=$(DEFS) /DFLEXT_THREADS

!ifndef _DEBUG
CFLAGS=$(CFLAGS) $(OFLAGS) /MT
OBJPATH=t
!else
CFLAGS=$(CFLAGS) $(DFLAGS) /MTd
OBJPATH=td
!endif

!else

!ifndef _DEBUG
CFLAGS=$(CFLAGS) $(OFLAGS) /ML
OBJPATH=s
!else
CFLAGS=$(CFLAGS) $(DFLAGS) /MLd
OBJPATH=sd
!endif

!endif # FLEXT_THREADS

!endif # FLEXT_SHARED


# the rest can stay untouched
# ----------------------------------------------

# all the source files from the package
!include make-files.txt

!ifdef SNDOBJ
SRCS=$(SRCS) $(SRCS_SNDOBJ)
HDRS=$(HDRS) $(HDRS_SNDOBJ)
!endif

!ifdef STK
SRCS=$(SRCS) $(SRCS_STK)
HDRS=$(HDRS) $(HDRS_STK)
!endif

#default target
all: $(OUTPATH)\$(NAME)-$(TARGET).$(EXT)

# remove build
clean:
	-cd $(OUTPATH)
	-del /s /q $(OBJPATH) > nul
	-rmdir $(OBJPATH)
	-cd ..
	-del /q $(OUTPATH)\$(NAME)-$(TARGET).$(EXT) > nul
	-rmdir $(OUTPATH)

# -----------------------------------------------

OBJS= $(SRCS:.cpp=.obj)

{$(SOURCE)\}.cpp.obj:
	@-if not exist $(OUTPATH) mkdir $(OUTPATH)
	@cd $(OUTPATH)
	@-if not exist $(OBJPATH) mkdir $(OBJPATH)
	@cd ..
	cl /c $(CFLAGS) $(DEFS) $(INCPATH) /Fo$(OUTPATH)\$(OBJPATH)\$@ $<



$(OUTPATH)\$(NAME)-$(TARGET).lib: $(OBJS)
	@cd $(OUTPATH)\$(OBJPATH)
	lib /OUT:..\$(NAME)-$(TARGET).lib $(OBJS)
	@cd ..\..
!ifdef INSTDIR
	@-if not exist $(OBJPATH) mkdir $(INSTDIR)
	copy $(OUTPATH)\$(NAME)-$(TARGET).lib $(INSTDIR) > nul
	copy $(SOURCE)\*.h $(INSTDIR) > nul
!endif


$(OUTPATH)\$(NAME)-$(TARGET).dll: $(OBJS)
	@cd $(OUTPATH)\$(OBJPATH)
	link /DLL /NOLOGO $(LDFLAGS) /OUT:..\$(NAME)-$(TARGET).dll $(PDPATH)\bin\pd.lib $(OBJS)
	@cd ..\..
!ifdef INSTDIR
	@-if not exist $(OBJPATH) mkdir $(INSTDIR)
	copy $(OUTPATH)\$(NAME)-$(TARGET).dll $(INSTDIR) > nul
	copy $(SOURCE)\*.h $(INSTDIR) > nul
!endif