# 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

NAME=flext

# source files
SOURCE=source

# includes
INCPATH=/I$(PDPATH)\src /I$(SOURCE)

!ifdef MSVCPATH
INCPATH=$(INCPATH) /I$(MSVCPATH)\include 
!endif

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

LDFLAGS=/LIBPATH:$(MSVCPATH)\lib


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

CFLAGS=/GX /GD
OFLAGS=/Ox
DFLAGS=/Od /Zi

TARGET=pdwin  # appendix to lib name



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

EXT=dll

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

LIBS=$(PDPATH)\bin\pd.lib 

!ifdef PTHREADS
LIBS=$(LIBS) $(PTHREADS)\pthreadVC.lib 
!else
LIBS=$(LIBS) $(PDPATH)\bin\pthreadVC.lib 
!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)
INCPATH=$(INCPATH) /I$(SNDOBJ)\include
LIBS=$(LIBS) $(SNDOBJ)\lib\sndobj.lib
!endif

!ifdef STK
SRCS=$(SRCS) $(SRCS_STK)
HDRS=$(HDRS) $(HDRS_STK)
INCPATH=$(INCPATH) /I$(STK)\include
LIBS=$(LIBS) $(STK)\lib\stk.lib
!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)\$(@F) $<


$(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 $(LIBS) $(OBJS)
	@cd ..\..
!ifdef INSTDIR
	@-if not exist $(OBJPATH) mkdir $(INSTDIR)
	copy $(OUTPATH)\$(NAME)-$(TARGET).dll $(INSTDIR) > nul
	copy $(SOURCE)\*.h $(INSTDIR) > nul
!endif