##############################################################################
#           Makefile for use by API developers                               #
#                                                                            #
#  NOTE: "vcvarsall amd64" must be run before attempting to compile the API  #
#  examples. Please see the API documentation for information.               #
#                                                                            #
##############################################################################

#
# If the location of the Alias libraries and header files are
# different from $ALIAS_LOCATION, set it here.
#
ALIAS_LOCATION=C:\Program Files\Autodesk\Alias2021


CPPEXAMPLES = cppView.exe cppCreate.exe cppRetrieveAndPrint.exe\
	cppRetrieveAndStore.exe cppPrintTransformMatrix.exe cppPrintCurves.exe\
	cppInstances.exe cppInstanceDelete.exe cppGrouping.exe cppCube.exe\
	cppMakeClusters.exe cppClusters.exe cppOutputPolygons.exe cppCloud.exe \
	cppCreateCurvesAndSurfaces.exe

EXAMPLES = $(CPPEXAMPLES)

CC = cl.exe
CPLUSPLUS = cl.exe
LINK = link.exe
INCLUDES = /I. /I"$(ALIAS_LOCATION)\ODS\Common\include"

# 
# Dynamic Linking.
#
EXTRA_LFLAGS = /LIBPATH:"$(ALIAS_LOCATION)\lib"
EXTRA_CFLAGS =

LFLAGS = /nologo /SUBSYSTEM:CONSOLE /NODEFAULTLIB:LIBC.LIB $(EXTRA_LFLAGS) /STACK:0xa00000

#
# Required libraries. 
#
LIBS = libalias_api.lib

STD = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \
     advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib \
     odbc32.lib odbccp32.lib comctl32.lib netapi32.lib \
     version.lib ws2_32.lib

CLIBS = $(LIBS) $(STD)

#
# Some code is conditionally compiled because it produces a lot of output.
# (see AlPrint.cpp for example) Uncomment the following line if you would
# like to see all the output.
#
# COPIOUS_OUTPUT = -DCOPIOUS_OUTPUT

CFLAGS = /nologo /MD $(INCLUDES) $(COPIOUS_OUTPUT) $(EXTRA_CFLAGS)
CPLUSPLUSFLAGS = $(CFLAGS)

#
# Rules for building.
#
.SUFFIXES: .c .c++ .obj .cpp

.cpp.obj:
	$(CPLUSPLUS) -c $(CPLUSPLUSFLAGS) $*.cpp

.c.obj:
	$(CC) -c $(CFLAGS) $*.c

#
# Build all the examples.
#
default: $(EXAMPLES)

#
# Copy all the source files for the examples.
#
copy:
	copy "$(ALIAS_LOCATION)\ODS\OpenModel\examples\*.cpp" .
	copy "$(ALIAS_LOCATION)\ODS\OpenModel\examples\*.c" .
	copy "$(ALIAS_LOCATION)\ODS\Common\examples\*.cpp" .
	copy "$(ALIAS_LOCATION)\ODS\Common\examples\*.c" .
	copy "$(ALIAS_LOCATION)\ODS\Common\examples\*.h" .

#
# Clean up.
#
clean:
	del *.obj *.exp *.lib $(EXAMPLES)

#
# Rules for building the executables.
#
cppCreate.exe:			cppCreate.obj		AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppCreate.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppRetrieveAndPrint.exe: cppRetrieveAndPrint.obj AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppRetrieveAndPrint.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppPrintCurves.exe:		cppPrintCurves.obj	AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppPrintCurves.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppRetrieveAndStore.exe: cppRetrieveAndStore.obj	AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppRetrieveAndStore.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppPrintTransformMatrix.exe: cppPrintTransformMatrix.obj AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppPrintTransformMatrix.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppInstances.exe:		cppInstances.obj	AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppInstances.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppInstanceDelete.exe:	cppInstanceDelete.obj	AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppInstanceDelete.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppGrouping.exe:		cppGrouping.obj	AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppGrouping.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppView.exe:			cppView.obj
	$(LINK) $(LFLAGS) /out:$@ cppView.obj $(CLIBS)

cppCube.exe:			cppCube.obj
	$(LINK) $(LFLAGS) /out:$@ cppCube.obj $(CLIBS)

cppClusters.exe:		cppClusters.obj
	$(LINK) $(LFLAGS) /out:$@ cppClusters.obj $(CLIBS)

cppMakeClusters.exe:	cppMakeClusters.obj AlPrint.h AlPrint.obj AlPrint2.obj
	$(LINK) $(LFLAGS) /out:$@ cppMakeClusters.obj AlPrint.obj AlPrint2.obj $(CLIBS)

cppOutputPolygons.exe:	cppOutputPolygons.obj
	$(LINK) $(LFLAGS) /out:$@ cppOutputPolygons.obj $(CLIBS)

cppCloud.exe:			cppCloud.obj
	$(LINK) $(LFLAGS) /out:$@ cppCloud.obj $(CLIBS)
	
cppCreateCurvesAndSurfaces.exe:			cppCreateCurvesAndSurfaces.obj
	$(LINK) $(LFLAGS) /out:$@ cppCreateCurvesAndSurfaces.obj $(CLIBS)
	
