#
!IFNDEF ESP_ROOT
!ERROR ESP_ROOT must be set -- Please fix the environment...
!ENDIF
#
IDIR  = $(ESP_ROOT)\include
!include $(IDIR)\$(ESP_ARCH).$(MSVC)
LDIR  = $(ESP_ROOT)\lib
!IFDEF ESP_BLOC
ODIR  = $(ESP_BLOC)\obj
!ELSE
ODIR  = .
!ENDIF
#
!IFNDEF AFLR
default:
	@echo "Not compiling aflr3AIM: AFLR must be set -- Please fix the environment...."
!ELSE
!IFNDEF AFLR_ARCH
default:
	@echo "Not compiling aflr3AIM: AFLR_ARCH must be set -- Please fix the environment...."
!ELSE
default: $(LDIR)\aflr3AIM.dll $(LDIR)\aflr_all.dll
!ENDIF
!ENDIF

AFLR3_LIB = aflr_all.lib

# Compile egads_aflr4 to make sure it uses the latest EGADS
EGADS_AFLR4_OBJS = 	\
			$(ODIR)\aflr3_main_register.obj \
			$(ODIR)\aflr4_main_register.obj \
			$(ODIR)\EG_getEffBodyTopos.obj \
			$(ODIR)\egads_aflr4_check_tess_coord.obj \
			$(ODIR)\egads_aflr4_check_tess_ordering.obj \
			$(ODIR)\egads_aflr4_get_bedge_coord.obj \
			$(ODIR)\egads_aflr4_get_edge_spacing.obj \
			$(ODIR)\egads_aflr4_get_faceOrder.obj \
			$(ODIR)\egads_aflr4_get_face_spacing.obj \
			$(ODIR)\egads_aflr4_get_surf_grid.obj \
			$(ODIR)\egads_aflr4_create_tess.obj \
			$(ODIR)\egads_aflr4_tess_to_dgeom.obj \
			$(ODIR)\egads_aflr4_version.obj \
			$(ODIR)\egads_auto_cad_geom_setup.obj \
			$(ODIR)\egads_cad_geom_add_attr.obj \
			$(ODIR)\egads_cad_geom_add_ff.obj \
			$(ODIR)\egads_cad_geom_bodyFlag.obj \
			$(ODIR)\egads_cad_geom_check_bc.obj \
			$(ODIR)\egads_cad_geom_data_cleanup.obj \
			$(ODIR)\egads_cad_geom_edgeData.obj \
			$(ODIR)\egads_cad_geom_edgeFace.obj \
			$(ODIR)\egads_cad_geom_edit.obj \
			$(ODIR)\egads_cad_geom_faceEdge.obj \
			$(ODIR)\egads_cad_geom_faceFace.obj \
			$(ODIR)\egads_cad_geom_faceFlag.obj \
			$(ODIR)\egads_cad_geom_faceLoop.obj \
			$(ODIR)\egads_cad_geom_file_read.obj \
			$(ODIR)\egads_cad_geom_file_write.obj \
			$(ODIR)\egads_cad_geom_idef2idef.obj \
			$(ODIR)\egads_cad_geom_loopEdge.obj \
			$(ODIR)\egads_cad_geom_nodeData.obj \
			$(ODIR)\egads_cad_geom_reset_attr.obj \
			$(ODIR)\egads_cad_geom_ret_attr.obj \
			$(ODIR)\egads_cad_geom_setup.obj \
			$(ODIR)\egads_cad_geom_write_topo_data.obj \
			$(ODIR)\egads_eval_curv_at_uv.obj \
			$(ODIR)\egads_eval_edge_arclen.obj \
			$(ODIR)\egads_eval_norm_at_uv.obj \
			$(ODIR)\egads_eval_uv_at_t.obj \
			$(ODIR)\egads_eval_uv_at_xyz.obj \
			$(ODIR)\egads_eval_uv_bounds.obj \
			$(ODIR)\egads_eval_xyz_at_u.obj \
			$(ODIR)\egads_eval_xyz_at_uv.obj \
			$(ODIR)\egads_face_node_map.obj \
			$(ODIR)\egads_cad_geom_faceMatch.obj \
			$(ODIR)\egads_data.obj \
			$(ODIR)\egads_mzone.obj


$(LDIR)\aflr3AIM.dll:	$(ODIR)\aflr3_version.exe \
			aflr3AIM.def $(ODIR)\aflr3AIM.obj $(ODIR)\aflr3_Interface.obj \
			$(EGADS_AFLR4_OBJS) $(LDIR)\utils.lib
	-del $(LDIR)\aflr3AIM.dll
	link /out:$(LDIR)\aflr3AIM.dll /dll /def:aflr3AIM.def \
		$(ODIR)\aflr3AIM.obj $(ODIR)\aflr3_Interface.obj \
		$(EGADS_AFLR4_OBJS) \
		/LIBPATH:$(AFLR)\$(AFLR_ARCH)\lib $(AFLR3_LIB) \
		/LIBPATH:$(LDIR) utils.lib aimUtil.lib ocsm.lib egads.lib \
		udunits2.lib $(AFLREX) /ignore:4078 /ignore:4217
	$(MCOMP) /manifest $(LDIR)\aflr3AIM.dll.manifest \
		/outputresource:$(LDIR)\aflr3AIM.dll;2

$(ODIR)\aflr3AIM.obj:	aflr3AIM.c $(IDIR)\aimUtil.h $(IDIR)\capsTypes.h \
			..\utils\meshUtils.h
	cl /c $(COPTS) $(DEFINE) -I$(IDIR) -I..\meshWriter\ugridWriter -I..\utils \
		-I$(AFLR)\src \
		aflr3AIM.c /Fo$(ODIR)\aflr3AIM.obj

$(ODIR)\aflr3_Interface.obj:	aflr3_Interface.c $(IDIR)\aimUtil.h ..\utils\meshUtils.h
	cl /c $(COPTS) $(DEFINE) -I$(IDIR) -I..\utils \
		-I$(AFLR)\src -I..\meshWriter\libMeshbWriter \
		aflr3_Interface.c /Fo$(ODIR)\aflr3_Interface.obj

# Compile each AFLR source file
{$(AFLR)\src\egads_aflr4\}.c{$(ODIR)}.obj::
	cl /c $(CPPOPT) /W0 /Fo"$(ODIR)"\ /Dstrcasecmp=stricmp -D_ENABLE_EGADS_ -D_ENABLE_MESH_LIB_ -I$(IDIR) -I$(AFLR)\src\egads_aflr4 $<

{$(AFLR)\src\aflr43\}.c{$(ODIR)}.obj::
	cl /c $(CPPOPT) /W0 /Fo"$(ODIR)"\ /Dstrcasecmp=stricmp -D_ENABLE_EGADS_ -D_ENABLE_MESH_LIB_ -I$(IDIR) -I$(AFLR)\src\aflr43 $<

{$(AFLR)\src\aflr4\main\}.c{$(ODIR)}.obj::
	cl /c $(CPPOPT) /W0 /Fo"$(ODIR)"\ /Dstrcasecmp=stricmp -D_ENABLE_EGADS_ -D_ENABLE_MESH_LIB_ -I$(IDIR) -I$(AFLR)\src\aflr4\main $<

{$(AFLR)\src\aflr3\main\}.c{$(ODIR)}.obj::
	cl /c $(CPPOPT) /W0 /Fo"$(ODIR)"\ /Dstrcasecmp=stricmp -D_ENABLE_EGADS_ -D_ENABLE_MESH_LIB_ -I$(IDIR) -I$(AFLR)\src\aflr3\main $<

$(LDIR)\aflr_all.dll: $(AFLR)\$(AFLR_ARCH)\bin\aflr_all.dll
	xcopy /Q /Y $(AFLR)\$(AFLR_ARCH)\bin\aflr_all.dll $(LDIR)

clear_version:
	-del $(ODIR)\aflr3_version.exe

# Compile and execute to check the version number
$(ODIR)\aflr3_version.exe:	clear_version aflr3_version.c $(AFLR)\src\aflr3\aflr3_version.h
	cl /Fe$(ODIR)\aflr3_version.exe /Fo$(ODIR)\aflr3_version.obj \
		$(COPTS) $(DEFINE) -I$(IDIR) -I$(AFLR)\src aflr3_version.c \
		/link /LIBPATH:$(AFLR)\$(AFLR_ARCH)\lib aflr3.lib
	$(ODIR)\aflr3_version.exe

clean:
	-del $(ODIR)\aflr3_Interface.obj $(ODIR)\aflr3AIM.obj $(EGADS_AFLR4_OBJS)

cleanall:	clean
	-del $(LDIR)\aflr_all.dll $(LDIR)\aflr3AIM.dll $(LDIR)\aflr3AIM.lib $(LDIR)\aflr3AIM.exp
