"make" script to enable command-line build on Windows
http://codereview.appspot.com/4685051/



git-svn-id: http://skia.googlecode.com/svn/trunk@1838 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/make.py b/make.py
new file mode 100644
index 0000000..b1deaab
--- /dev/null
+++ b/make.py
@@ -0,0 +1,131 @@
+#    Copyright 2011 Google Inc.

+#

+#    Licensed under the Apache License, Version 2.0 (the "License");

+#    you may not use this file except in compliance with the License.

+#    You may obtain a copy of the License at

+#

+#         http://www.apache.org/licenses/LICENSE-2.0

+#

+#    Unless required by applicable law or agreed to in writing, software

+#    distributed under the License is distributed on an "AS IS" BASIS,

+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+#    See the License for the specific language governing permissions and

+#    limitations under the License.

+

+# "Makefile" replacement to build skia for Windows.

+# More info at http://code.google.com/p/skia/wiki/DocRoot

+

+import os

+import shutil

+import sys

+

+# TODO(epoger): add special 'all' target

+TARGET_CLEAN = 'clean'

+

+SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))

+OUT_SUBDIR = 'out'

+GYP_SUBDIR = 'gyp'

+

+

+# Simple functions that report what they are doing, and exit(1) on failure.

+def cd(path):

+    print '> cd %s' % path

+    if not os.path.exists(path):

+        print 'path %s does not exist' % path

+        sys.exit(1)

+    os.chdir(path)

+

+def rmtree(path):

+    print '> rmtree %s' % path

+    shutil.rmtree(path, ignore_errors=True)

+

+def runcommand(command):

+    print '> %s' % command

+    if os.system(command):

+        sys.exit(1)

+

+def MakeClean():

+    """Cross-platform "make clean" operation."""

+    cd(SCRIPT_DIR)

+    rmtree(OUT_SUBDIR)

+    # clean up the directory that XCode (on Mac) creates

+    rmtree('xcodebuild')

+

+

+def CheckWindowsEnvironment():

+    """For Windows: check environment variables needed for command-line build.

+

+    If those environment variables are missing, try to set them.

+    If environment variables can be set up, this function returns; otherwise,

+    it displays an error message and exits.

+    """

+    # If we already have the proper environment variables, nothing to do here.

+    try:

+        env_DevEnvDir = os.environ['DevEnvDir']

+        return  # found it, so we are done

+    except KeyError:

+        pass # go on and run the rest of this function

+

+    print ('\nCould not find Visual Studio environment variables.'

+           '\nPerhaps you have not yet run vcvars32.bat as described at'

+           '\nhttp://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx ?')

+    found_path = None

+    try:

+        possible_path = os.path.abspath(os.path.join(

+            os.environ['VS100COMNTOOLS'], os.path.pardir, os.path.pardir,

+            'VC', 'bin', 'vcvars32.bat'))

+        if os.path.exists(possible_path):

+            found_path = possible_path

+    except KeyError:

+        pass

+    if found_path:

+        print '\nIt looks like you can run that script at:\n%s' % found_path

+    else:

+        print '\nUnable to find vcvars32.bat on your system.'

+    sys.exit(1)

+

+

+def MakeWindows(args):

+    """For Windows: build as appropriate for the command line arguments.

+

+    parameters:

+        args: command line arguments as a list of strings

+    """

+    CheckWindowsEnvironment()

+    # TODO(epoger): what about parameters?  (fixed vs float, debug vs release)

+    # TODO(epoger): what about "make" flags (like -j) that Windows doesn't support?

+

+    # Run gyp_skia to prepare Visual Studio projects.

+    cd(SCRIPT_DIR)

+    runcommand('python gyp_skia')

+    

+    for target in args:

+        # Check for special-case targets

+        if target == TARGET_CLEAN:

+            MakeClean()

+        else:

+            cd(os.path.join(SCRIPT_DIR, OUT_SUBDIR, GYP_SUBDIR))

+            runcommand('msbuild /target:%s %s.sln' % (target, target))

+

+

+# main:

+# dispatch to appropriate Make<Platform>() variant.

+if os.name == 'nt':

+    MakeWindows(sys.argv[1:])

+    sys.exit(0)

+elif os.name == 'posix':

+    if sys.platform == 'darwin':

+        print 'Mac developers should not run this script; see ' \

+            'http://code.google.com/p/skia/wiki/GettingStartedOnMac'

+        sys.exit(1)

+    else:

+        print 'Unix developers should not run this script; see ' \

+            'http://code.google.com/p/skia/wiki/GettingStartedOnLinux'

+        sys.exit(1)

+else:

+    print 'unknown platform (os.name=%s, sys.platform=%s); see %s' % (

+        os.name, sys.platform, 'http://code.google.com/p/skia/wiki/DocRoot')

+    sys.exit(1)

+sys.exit(0)

+    

+