2012-05-03 12:13 UTC+0200 Viktor Szakats (harbour syenar.net)

* utils/hbmk2/hbmk2.prg
    + added experimental code signing support for win and darwin
      using '-sign=<ID> [-signpw=<pw>]' options.
      on win, it requires MSVS in path.
This commit is contained in:
Viktor Szakats
2012-05-03 10:15:43 +00:00
parent 6e1f715f51
commit 2bba56caa6
2 changed files with 67 additions and 0 deletions

View File

@@ -16,6 +16,12 @@
The license applies to all entries newer than 2009-04-28.
*/
2012-05-03 12:13 UTC+0200 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/hbmk2.prg
+ added experimental code signing support for win and darwin
using '-sign=<ID> [-signpw=<pw>]' options.
on win, it requires MSVS in path.
2012-05-02 19:32 UTC+0200 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/hbmk2.prg
! fixed missed incremental updates in '-inc -head=dep'

View File

@@ -872,6 +872,10 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
LOCAL nOpt_FNF
LOCAL lCHD_Comp := .F.
LOCAL cCHD_DirOld
LOCAL cBin_Sign
LOCAL cOpt_Sign
LOCAL cOpt_SignID
LOCAL cOpt_SignPass
LOCAL cCommand
LOCAL aCommand
@@ -2593,6 +2597,22 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
/* EXPERIMENTAL */
CASE Left( cParamL, Len( "-sign=" ) ) == "-sign="
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-sign=" ) + 1 ), aParam[ _PAR_cFileName ] )
IF ! Empty( cParam )
cOpt_SignID := cParam
ENDIF
/* EXPERIMENTAL */
CASE Left( cParamL, Len( "-signpw=" ) ) == "-signpw="
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-signpw=" ) + 1 ), aParam[ _PAR_cFileName ] )
IF ! Empty( cParam )
cOpt_SignPass := cParam
ENDIF
CASE Left( cParamL, Len( "-ln=" ) ) == "-ln="
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-ln=" ) + 1 ), aParam[ _PAR_cFileName ] )
@@ -6779,6 +6799,47 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
ENDIF
/* Setup code signing for host platform */
IF HBMK_ISPLAT( "win|wce" )
/* Requires MSVS */
cBin_Sign := "signtool.exe"
cOpt_Sign := "sign -f {ID} -p {PW} -t http://timestamp.verisign.com/scripts/timstamp.dll {OB}"
ENDIF
#if defined( __PLATFORM__DARWIN )
IF HBMK_ISPLAT( "darwin" )
cBin_Sign := "codesign"
cOpt_Sign := "-s {ID} -f {OB}"
ENDIF
#endif
IF ! Empty( cOpt_SignID ) .AND. ! hbmk[ _HBMK_lCreateLib ] .AND. ! Empty( cBin_Sign )
/* Code signing */
cOpt_Sign := StrTran( cOpt_Sign, "{ID}", cOpt_SignID )
cOpt_Sign := StrTran( cOpt_Sign, "{OB}", FNameEscape( hbmk[ _HBMK_cPROGNAME ], nOpt_Esc, nOpt_FNF ) )
cOpt_Sign := AllTrim( cOpt_Sign )
cCommand := cBin_Sign + " " + AllTrim( StrTran( cOpt_Sign, "{PW}", cOpt_SignPass ) )
tmp := cBin_Sign + " " + AllTrim( StrTran( cOpt_Sign, "{PW}", iif( Empty( cOpt_SignPass ), "", "****" ) ) )
IF hbmk[ _HBMK_lTRACE ]
IF ! hbmk[ _HBMK_lQuiet ]
hbmk_OutStd( hbmk, I_( "Code sign command:" ) )
ENDIF
OutStd( tmp + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ( tmp := hb_processRun( cCommand ) ) != 0
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Running code sign command. %1$s:" ), hb_ntos( tmp ) ) )
IF ! hbmk[ _HBMK_lQuiet ]
OutStd( tmp + _OUT_EOL )
ENDIF
ENDIF
ENDIF
ENDIF
IF hbmk[ _HBMK_nErrorLevel ] == _ERRLEV_OK .AND. ! hbmk[ _HBMK_lCLEAN ] .AND. ;