diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5072128db8..75a187bcce 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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= [-signpw=]' 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' diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 07ba2fc978..dae5c30368 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -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. ;