; Current Usage:
;
;  Push "$SYSDIR\atl.dll"
;  !insertmacro UpgradeDLL "atl.dll"
!macro UpgradeDLL DLL_NAME DLL_LOCATION
  Exch $0
  Push $1
  Push $2
  Push $3
  Push $4
  ClearErrors
  GetDLLVersionLocal ${DLL_NAME} $1 $2
  GetDLLVersion ${DLL_LOCATION} $3 $4
  IfErrors upgrade_${DLL_NAME}
    IntCmpU $1 $3 noupgrade_${DLL_NAME} noupgrade_${DLL_NAME} upgrade_${DLL_NAME}
   
upgrade_${DLL_NAME}:
    IfFileExists ${DLL_LOCATION} 0 dont_unreg_${DLL_NAME}
    UnRegDLL ${DLL_LOCATION}
dont_unreg_${DLL_NAME}:
    File /oname=${DLL_LOCATION} ${DLL_NAME}
    RegDLL ${DLL_LOCATION}
    DetailPrint "Installed ${DLL_LOCATION}"
    goto pop_${DLL_NAME}
noupgrade_${DLL_NAME}:
    IntCmpU $2 $4 exit_${DLL_NAME} exit_${DLL_NAME} upgrade_${DLL_NAME}
    IntFmt $R3 "%X" $3
    IntFmt $R4 "%c" $4
exit_${DLL_NAME}:
 DetailPrint "*** Already installed ${DLL_LOCATION} $R3 $R4"
pop_${DLL_NAME}:
  Pop $4
  Pop $3
  Pop $2
  Pop $1
  Pop $0
  !undef DLL_NAME
  !undef DLL_LOCATION
!macroend
