59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; $Id$
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;; @file
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync; VBoxGuestAdditionExternal.nsh - Utility function for invoking external
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; applications.
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; Copyright (C) 2013 Oracle Corporation
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; available from http://www.virtualbox.org. This file is free software;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; you can redistribute it and/or modify it under the terms of the GNU
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; General Public License (GPL) as published by the Free Software
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; Foundation, in version 2 as it comes in the "COPYING" file of the
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; Macro for executing external applications. Uses the nsExec plugin
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; in different styles, depending on whether this installer runs in silent mode
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; or not. If the external program reports an exit code other than 0 the installer
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; will be aborted.
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; @param Command line (full qualified and quoted).
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; @param If set to "true" the installer aborts if the external program reports
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; an exit code other than 0, "false" just prints a warning and continues
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync; execution.
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync;
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync!macro _cmdExecute cmdline optional
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync Push $0
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync Push $1
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync !define _macroLoc ${__LINE__}
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync ${LogVerbose} "Executing: ${cmdline}"
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync IfSilent silent_${_macroLoc} +1
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync nsExec::ExecToLog "${cmdline}"
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync Pop $0 ; Return value (exit code)
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync goto done_${_macroLoc}
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsyncsilent_${_macroLoc}:
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync nsExec::ExecToStack "${cmdline}"
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync Pop $0 ; Return value (exit code)
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync Pop $1 ; Stdout/stderr output (up to ${NSIS_MAX_STRLEN})
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync ${LogVerbose} "$1"
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync goto done_${_macroLoc}
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsyncdone_${_macroLoc}:
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync ${LogVerbose} "Execution returned exit code: $0"
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync IntCmp $0 0 +1 error_${_macroLoc} error_${_macroLoc} ; Check ret value (0=OK, 1=Error)
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync goto return_${_macroLoc}
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsyncerror_${_macroLoc}:
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync ${If} ${optional} == "false"
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync ${LogVerbose} "Error excuting $\"${cmdline}$\" (exit code: $0) -- aborting installation"
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync Abort "Error excuting $\"${cmdline}$\" (exit code: $0) -- aborting installation"
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync ${Else}
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync ${LogVerbose} "Warning: Executing $\"${cmdline}$\" returned with exit code $0"
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync ${EndIf}
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync goto return_${_macroLoc}
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsyncreturn_${_macroLoc}:
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync Pop $1
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync Pop $0
3af289fb9126c91f28ede0dcb3429da0de12b94evboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync !undef _macroLoc
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync!macroend
59bb2da0ef97dc8c9d0821ac921728f515623ac5vboxsync!define CmdExecute "!insertmacro _cmdExecute"