# Make liblouis.dll and liblouis.lib

# Do not edit this file. Make changes in configure.mk

!include configure.mk

CC = cl

CFLAGS = /nologo /O2 /W3 /c /MD /Iinclude /D_EXPORTING
# The Visual C++ C Runtime deprecates several standard library functions in
# preference for _s variants that are specific to Visual C++. This removes
# those deprecation warnings.
CFLAGS = $(CFLAGS) /D_CRT_SECURE_NO_WARNINGS
# The Visual C++ C Runtime deprecates standard POSIX APIs that conflict with
# reserved ISO C names (like strdup) in favour of non-portable conforming
# variants that start with an '_'. This removes those deprecation warnings. */
CFLAGS = $(CFLAGS) /D_CRT_NONSTDC_NO_DEPRECATE

!if "$(UCS)" == "2"
WIDECHAR_TYPE = unsigned short int
!else
WIDECHAR_TYPE = unsigned int
!endif

DLLFLAGS = /dll /nologo
LIBFLAGS = /nologo

HEADERS = $(SRCDIR)\internal.h $(SRCDIR)\liblouis.h \
    include\config.h
OBJ = commonTranslationFunctions.obj compileTranslationTable.obj \
    logging.obj lou_backTranslateString.obj lou_translateString.obj \
    metadata.obj pattern.obj utils.obj

all: liblouis.lib
    link $(DLLFLAGS) /OUT:liblouis.dll $(OBJ)  

clean:
    clean.bat

liblouis.lib: $(OBJ)
    lib $(LIBFLAGS) $(OBJ) /out:liblouis.lib

$(SRCDIR)\liblouis.h: $(SRCDIR)\liblouis.h.in
    PowerShell -ExecutionPolicy RemoteSigned \
    -File $(UTILSDIR)\find-replace.ps1 \
    -InputFile $(SRCDIR)\liblouis.h.in -OutputFile $(SRCDIR)\liblouis.h \
    -Str1 @WIDECHAR_TYPE@ -Str2 "$(WIDECHAR_TYPE)"

commonTranslationFunctions.obj: $(SRCDIR)\commonTranslationFunctions.c \
   $(HEADERS)
   $(CC) $(CFLAGS) $(SRCDIR)\commonTranslationFunctions.c

compileTranslationTable.obj: $(SRCDIR)\compileTranslationTable.c \
    $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\compileTranslationTable.c

logging.obj: $(SRCDIR)\logging.c $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\logging.c

lou_backTranslateString.obj: $(SRCDIR)\lou_backTranslateString.c \
    $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\lou_backTranslateString.c

lou_translateString.obj: $(SRCDIR)\lou_translateString.c $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\lou_translateString.c

metadata.obj: $(SRCDIR)\metadata.c $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\metadata.c

pattern.obj: $(SRCDIR)\pattern.c $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\pattern.c

utils.obj: $(SRCDIR)\utils.c $(HEADERS)
    $(CC) $(CFLAGS) $(SRCDIR)\utils.c
