Index: site_scons/site_tools/code_signing.py |
=================================================================== |
--- site_scons/site_tools/code_signing.py (revision 12583) |
+++ site_scons/site_tools/code_signing.py (working copy) |
@@ -1,103 +0,0 @@ |
-#!/usr/bin/python2.4 |
-# Copyright 2008, Google Inc. |
-# All rights reserved. |
-# |
-# Redistribution and use in source and binary forms, with or without |
-# modification, are permitted provided that the following conditions are |
-# met: |
-# |
-# * Redistributions of source code must retain the above copyright |
-# notice, this list of conditions and the following disclaimer. |
-# * Redistributions in binary form must reproduce the above |
-# copyright notice, this list of conditions and the following disclaimer |
-# in the documentation and/or other materials provided with the |
-# distribution. |
-# * Neither the name of Google Inc. nor the names of its |
-# contributors may be used to endorse or promote products derived from |
-# this software without specific prior written permission. |
-# |
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- |
-"""Code signing build tool. |
- |
-This module sets up code signing. |
-It is used as follows: |
- env = Environment(tools = ["code_signing"]) |
-To sign an EXE/DLL do: |
- env.SignedBinary('hello_signed.exe', 'hello.exe', |
- CERTIFICATE_FILE='bob.pfx', |
- CERTIFICATE_PASSWORD='123', |
- TIMESTAMP_SERVER='') |
-If no certificate file is specified, copying instead of signing will occur. |
-If an empty timestamp server string is specified, there will be no timestamp. |
-""" |
- |
-import SCons.Script |
- |
- |
-def generate(env): |
- # NOTE: SCons requires the use of this name, which fails gpylint. |
- """SCons entry point for this tool.""" |
- |
- env.Replace( |
- # Path to Microsoft signtool.exe |
- SIGNTOOL='$VC80_DIR/common7/tools/bin/signtool.exe', |
- # No certificate by default. |
- CERTIFICATE_PATH='', |
- # No certificate password by default. |
- CERTIFICATE_PASSWORD='', |
- # The default timestamp server. |
- TIMESTAMP_SERVER='http://timestamp.verisign.com/scripts/timestamp.dll', |
- ) |
- |
- # Setup Builder for Signing |
- env['BUILDERS']['SignedBinary'] = SCons.Script.Builder( |
- generator=SignedBinaryGenerator, |
- emitter=SignedBinaryEmitter) |
- |
- |
-def SignedBinaryEmitter(target, source, env): |
- """Add the signing certificate (if any) to the source dependencies.""" |
- if env['CERTIFICATE_PATH']: |
- source.append(env['CERTIFICATE_PATH']) |
- return target, source |
- |
- |
-def SignedBinaryGenerator(source, target, env, for_signature): |
- """A builder generator for code signing.""" |
- source = source # Silence gpylint. |
- target = target # Silence gpylint. |
- for_signature = for_signature # Silence gpylint. |
- |
- # Alway copy and make writable. |
- commands = [ |
- SCons.Script.Copy('$TARGET', '$SOURCE'), |
- SCons.Script.Chmod('$TARGET', 0755), |
- ] |
- |
- # Only do signing if there is a certificate path. |
- if env['CERTIFICATE_PATH']: |
- # The command used to do signing (target added on below). |
- signing_cmd = '$SIGNTOOL sign /f "$CERTIFICATE_PATH"' |
- # Add certificate password if any. |
- if env['CERTIFICATE_PASSWORD']: |
- signing_cmd += ' /p "$CERTIFICATE_PASSWORD"' |
- # Add timestamp server if any. |
- if env['TIMESTAMP_SERVER']: |
- signing_cmd += ' /t "$TIMESTAMP_SERVER"' |
- # Add in target name |
- signing_cmd += ' $TARGET' |
- # Add the signing to the list of commands to perform. |
- commands.append(signing_cmd) |
- |
- return commands |