# LIMAN SDK Core Library
# Baroks Inc.
#
# $ nmake all
# $ nmake PRODUCT=TESTAPP product
#

LIMAN_ROOT=..\..
PLATFORM=win64x86
LIB_PREFIX=lib
CORE_SUFFIX=_core
WRAP_SUFFIX=_wrap
LIMAN_CORELIB=$(LIB_PREFIX)liman$(CORE_SUFFIX).lib
LIMAN_WRAPLIB=$(LIB_PREFIX)liman$(WRAP_SUFFIX).lib

AHOSTID_SRC=$(LIMAN_ROOT)\apps\c\ahostid
LIMUTIL_SRC=$(LIMAN_ROOT)\apps\c\limutil
LIMGEN_SRC=$(LIMAN_ROOT)\apps\c\limgen
TESTAPP_SRC=$(LIMAN_ROOT)\apps\c\testapp

SDK_SUFFIX=_sdk
LIMAN_SDK_LIB=$(LIB_PREFIX)liman$(SDK_SUFFIX).lib
LIMAN_SDK_DLL=$(LIB_PREFIX)liman$(SDK_SUFFIX).dll
LIMAN_SDK_IMP=$(LIB_PREFIX)liman$(SDK_SUFFIX)_imp.lib
LIMAN_PRODUCT_LIB=libliman_$(PRODUCT)$(SDK_SUFFIX).lib
LIMAN_PRODUCT_DLL=libliman_$(PRODUCT)$(SDK_SUFFIX).dll
LIMAN_PRODUCT_IMP=libliman_$(PRODUCT)$(SDK_SUFFIX)_imp.lib

AR=lib
CC=cl -c -MT
LINK=cl -MT
LFLAGS=/link /nologo
DLFLAGS=

all: $(LIMAN_SDK_LIB) $(LIMAN_SDK_DLL) limutil ahostid limgen

product: check-env $(PRODUCT)\$(LIMAN_PRODUCT_LIB) $(PRODUCT)\$(LIMAN_PRODUCT_DLL)

$(LIMAN_SDK_LIB): usr_liman_lic.obj $(LIMAN_CORELIB)
	$(AR) -out:$@ usr_liman_lic.obj $(LIMAN_CORELIB)
	@echo ""
	@echo "LIMAN SDK static library has been built and license has been enabled."
	@echo ""

$(LIMAN_SDK_DLL): usr_liman_lic.obj $(LIMAN_CORELIB) $(LIMAN_WRAPLIB)
	$(LINK) /D_USRDLL /D_WINDLL usr_liman_lic.obj $(LIMAN_CORELIB) $(LIMAN_WRAPLIB) $(LFLAGS) /DLL /OUT:$@ /def:liman.def /IMPLIB:$(LIMAN_SDK_IMP)
	@echo ""
	@echo "LIMAN SDK dynamic library has been built."


$(PRODUCT)\$(LIMAN_PRODUCT_LIB): $(PRODUCT)\$(PRODUCT)_public_key.obj $(LIMAN_SDK_LIB)
	$(AR) -out:$@ $(PRODUCT)\$(PRODUCT)_public_key.obj $(LIMAN_SDK_LIB)
	@echo ""
	@echo "LIMAN SDK static library for use with product $(PRODUCT) has been built."
	@echo "Rebuild $(PRODUCT) linking against '$@'
!IF "$(PRODUCT)" == "TESTAPP"
	@echo "Type 'nmake testapp' to build the TESTAPP"
	@echo "You can use 'LIMAN_ROOT/bin/lg_testapp.bat' to generate license keys for $(PRODUCT)"
!ELSE	
	@echo "You can use 'LIMAN_ROOT/bin/lg_product.bat' to generate license keys for $(PRODUCT)"
!ENDIF	
	@echo 


$(PRODUCT)\$(LIMAN_PRODUCT_DLL): $(PRODUCT)\$(LIMAN_PRODUCT_LIB) $(LIMAN_WRAPLIB)
	$(LINK) /D_USRDLL /D_WINDLL usr_liman_lic.obj $(PRODUCT)\$(LIMAN_PRODUCT_LIB) $(LIMAN_WRAPLIB) $(LFLAGS) /DLL /OUT:$@ /def:liman.def /IMPLIB:$(PRODUCT)\$(LIMAN_PRODUCT_IMP)
	@echo ""
	@echo "LIMAN $(PRODUCT) dynamic library has been built."




limutil: limutil.obj $(LIMAN_CORELIB)
    $(LINK) limutil.obj $(LIMAN_CORELIB) $(LFLAGS)
    @echo 
	@echo limutil has been built successfully.
	@echo Run command "limutil -g -P <PRODUCT_CODE>" to create a new product-id 
	@echo " and a random keypair associated with it."
	@echo ""
	@echo Type "limutil -h" for help
	@echo 
	
limutil.obj: $(LIMUTIL_SRC)\limutil.c  $(LIMAN_ROOT)\include\liman.h
	$(CC) /Fo$@ $(LIMUTIL_SRC)\limutil.c -I$(LIMAN_ROOT)\include -I$(LIMAN_ROOT)\license -I$(LIMAN_ROOT)\apps\c\getopt

limgen: limgen.obj $(LIMAN_SDK_LIB)
    $(LINK) limgen.obj $(LIMAN_SDK_LIB) $(LFLAGS)
	
limgen.obj: $(LIMGEN_SRC)\limgen.c $(LIMAN_ROOT)\include\liman.h
	$(CC) /Fo$@ $(LIMGEN_SRC)\limgen.c -I$(LIMAN_ROOT)\include -I$(LIMAN_ROOT)\license -I$(LIMAN_ROOT)\apps\c\getopt -DREAD_PUBLIC_KEY
		
ahostid: ahostid.obj $(LIMAN_CORELIB)
    $(LINK) ahostid.obj $(LIMAN_CORELIB) $(LFLAGS)
    
ahostid.obj: $(AHOSTID_SRC)\ahostid.c  $(LIMAN_ROOT)\include\liman.h
	$(CC) /Fo$@ $(AHOSTID_SRC)\ahostid.c -I$(LIMAN_ROOT)\include -I$(LIMAN_ROOT)\license
	
$(PRODUCT)\$(PRODUCT)_public_key.obj: $(PRODUCT)\$(PRODUCT)_public_key.c $(LIMAN_ROOT)\include\liman.h
	$(CC) /Fo$@ -I$(LIMAN_ROOT)\include -c $(PRODUCT)\$(PRODUCT)_public_key.c 

usr_liman_lic.obj: $(LIMAN_ROOT)\license\usr_liman_lic_copy.c
	$(CC) /Fo$@ -c $(LIMAN_ROOT)\license\usr_liman_lic_copy.c -I$(LIMAN_ROOT)\include
#	del usr_liman_lic.obj
	
$(PRODUCT)\$(PRODUCT)_public_key.c:
!IF "$(PRODUCT)" == ""
	@echo ERROR: Variable PRODUCT has not been set.
	@echo ERROR: Refer to Step 3 in README.txt
	@echo
!ELSE
	@echo ERROR: Public key file '$@' is required to continue.
	@echo ERROR: Make sure you have generated a keypair associated with $(PRODUCT).
	@echo ERROR: Refer to Step 2 in README.txt.
	@echo
!ENDIF	
	@exit 1

$(LIMAN_ROOT)\license\usr_liman_lic_copy.c:
!IF EXISTS($(LIMAN_ROOT)\license\usr_liman_lic.c)
	copy $(LIMAN_ROOT)\license\usr_liman_lic.c $(LIMAN_ROOT)\license\usr_liman_lic_copy.c
!ELSE
	@echo WARNING: A valid LIMAN-SDK license  ('$@') is required to continue.
	@echo WARNING: Make sure to obtain it from http://www.baroks.com/sales and place it in the license folder.
	@echo 
	@echo WARNING: Creating a dummy license file for demo purposes.
	@echo
	copy $(LIMAN_ROOT)\license\usr_liman_lic_mock.c $(LIMAN_ROOT)\license\usr_liman_lic_copy.c
!ENDIF	


.PHONY: clean cleankeys
check-env:
!IF "$(PRODUCT)" == ""
	@echo ERROR: Variable 'PRODUCT' is not set. This should be one of the product-ids generated previously.)
!ENDIF

clean:
!IF "$(PRODUCT)" == ""
	del /Q *.obj *.exe  $(LIMAN_SDK_LIB) $(LIMAN_SDK_DLL) *imp*.*
!ELSE
	del /Q *.obj *.exe  $(LIMAN_SDK_LIB) $(LIMAN_SDK_DLL) *imp*.* $(PRODUCT)\*imp*.* $(PRODUCT)\*.lib $(PRODUCT)\*.exp $(PRODUCT)\*.dll $(PRODUCT)\$(PRODUCT)_public_key.obj
!ENDIF	
	del $(LIMAN_ROOT)\license\usr_liman_lic_copy.c	

cleankeys:
	del /Q *key*
    
