# Makefile for Microsoft Visual C++ for pppt

BINDIR = ..\..\bin
BINNAME = avr.exe

DOCDIR = ..\..\docs

CC = cl

##DEBUG = 1

!IF "$(DEBUG)" != "1"
CFLAGS = /O2 /nologo /WX /DWIN32 /Zm200
LFLAGS = /nologo /INCREMENTAL:NO /PDB:NONE
!ELSE
CFLAGS = /Zi /nologo /WX /DWIN32 /Zm200
LFLAGS = /DEBUG /nologo /INCREMENTAL:NO /PDB:NONE
!ENDIF

AR = lib /nologo
LINK = link /nologo
RM = del
CP = copy
PERL= perl

LIBPATH =
LIBS = advapi32.lib kernel32.lib

TARGET = pppt32.exe
PPLIB = ppio.lib
PPLIB_OBJS = ppio.obj SetPrivIoXP.obj InstDriverXP.obj PPortIoDExe.obj

DRIVER = .\driver\i386\PrivIoXP.sys
PPORTD = .\PPortIoD\PPortIoD.exe

all: $(PPORTD) $(PPLIB) $(TARGET) InstPrivIoXP.exe RemPrivIoXP.exe \
	GivePrivIoXP.exe TestIO.exe

$(TARGET): pppt.obj $(PPLIB)
	$(LINK) $(LFLAGS) /out:$(TARGET) pppt.obj $(PPLIB) $(LIBPATH) $(LIBS)

clean:
	$(RM) pppt.obj
	$(RM) accessio.obj
	$(RM) ppio.obj
	$(RM) TestIO.obj
	$(RM) GivePrivIoXP.obj
	$(RM) InstPrivIoXP.obj
	$(RM) RemPrivIoXP.obj
	$(RM) InstDriverXP.obj
	$(RM) SetPrivIoXP.obj
	$(RM) PPortIoDExe.obj
	$(RM) DriverSys.h
	$(RM) PPortIoDExe.h
	$(RM) PPortIoD.exe
	$(RM) *.pdb
	$(RM) *.ilk
	$(RM) *.pch
	@echo Use "make clean_all" to remove executables too

clean_all: clean
	$(RM) TestIO.exe
	$(RM) GivePrivIoXP.exe
	$(RM) InstPrivIoXP.exe
	$(RM) RemPrivIoXP.exe
	$(RM) $(TARGET)
	$(RM) $(PPLIB)
        mkPPortIoD.bat clean

install: $(TARGET) InstPrivIoXP.exe RemPrivIoXP.exe GivePrivIoXP.exe
	$(RM) $(BINDIR)\$(BINNAME)
	$(CP) $(TARGET) $(BINDIR)\$(BINNAME)
	$(RM) $(BINDIR)\InstPrivIoXP.exe
	$(CP) InstPrivIoXP.exe $(BINDIR)\InstPrivIoXP.exe
	$(RM) $(BINDIR)\RemPrivIoXP.exe
	$(CP) RemPrivIoXP.exe $(BINDIR)\RemPrivIoXP.exe
	$(RM) $(BINDIR)\GivePrivIoXP.exe
	$(CP) GivePrivIoXP.exe $(BINDIR)\GivePrivIoXP.exe

.c.obj:
        $(CC) $(CFLAGS) /c /Fo$*.obj $*.c

pppt.obj: pppt.c ppio.h

$(PPORTD): SetPrivIoXP.obj InstDriverXP.obj
	$(RM) PPortIoD.exe
	mkPPortIoD.bat

InstDriverXP.obj: InstDriverXP.c InstDriverXP.h DriverSys.h
	$(CC) $(CFLAGS) /c -I. InstDriverXP.c

SetPrivIoXP.obj: SetPrivIoXP.c PrivIoXP_IOCTL.h InstDriverXP.h SetPrivIoXP.h
	$(CC) $(CFLAGS) /c -I. SetPrivIoXP.c

PPortIoDExe.obj: PPortIoDExe.c PPortIoDExe.h
	$(CC) $(CFLAGS) /c -I. PPortIoDExe.c

$(PPLIB): $(PPLIB_OBJS)
	$(AR) /out:$(PPLIB) $(PPLIB_OBJS)

DriverSys.h: $(DRIVER) sys2tbl.pl
	$(PERL) sys2tbl.pl -code DriverSys $(DRIVER) > DriverSys.h

PPortIoDExe.h: $(PPORTD) sys2tbl.pl
	$(PERL) sys2tbl.pl -code PPortIoDExe $(PPORTD) > PPortIoDExe.h

InstPrivIoXP.exe: InstPrivIoXP.c SetPrivIoXP.h PrivIoXP_IOCTL.h $(PPLIB)
	$(CC) $(CFLAGS) InstPrivIoXP.c $(PPLIB) $(LIBS)

RemPrivIoXP.exe: RemPrivIoXP.c SetPrivIoXP.h $(PPLIB)
	$(CC) $(CFLAGS) RemPrivIoXP.c $(PPLIB) $(LIBS)

GivePrivIoXP.exe: GivePrivIoXP.c SetPrivIoXP.h PrivIoXP_IOCTL.h DriverSys.h $(PPLIB)
	$(CC) $(CFLAGS) GivePrivIoXP.c $(PPLIB) $(LIBS)

TestIO.exe: TestIO.c
	$(CC) $(CFLAGS) TestIO.c

