1ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org#!/usr/bin/python 2ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 3ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org# Copyright 2014 Google Inc. 4ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org# 5ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org# Use of this source code is governed by a BSD-style license that can be 6ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org# found in the LICENSE file. 7ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 8ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org"""Function for generating the SkUserConfig file, customized for Android.""" 9ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 10ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.orgimport os 11ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.orgimport shutil 12ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 13ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 14ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.orgAUTOGEN_WARNING = ( 15ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org""" 16ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 17ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org// 18ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org// THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT. 19ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org// 20ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org// This file contains Skia's upstream include/config/SkUserConfig.h as a 21ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org// reference, followed by the actual defines set for Android. 22ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org// 23ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 24ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 25ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org""" 26ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org) 27ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 28ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.orgBUILD_GUARD = 'SkUserConfig_Android_DEFINED' 29ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 30ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 31ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.orgdef generate_user_config(original_sk_user_config, require_sk_user_config, 3224b04fa2adc284f21bdfde16d65e9fd2a72f0c2escroggo target_dir, defines): 33ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org """Generate the SkUserConfig file specific to the Android framework. 34ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 35ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org Android needs its #defines in its skia/include/core directory, so that other 36ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org libraries which use Skia's headers get the right definitions. This function 37ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org takes the existing sample version of SkUserConfig, checked into Skia, and 38ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org appends the defines from ordered_set, which is expected to be a 39ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org vars_dict_lib.OrderedSet containing the defines. The result is written to 40ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org target_dir/SkUserConfig.h 41ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 42ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org Args: 43ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org original_sk_user_config: Path to original SkUserConfig.h 44ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org require_sk_user_config: If True, raise an AssertionError if 45ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org SkUserConfig.h does not exist. Either way, if it does exist, copy it 46ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org into the new file. 47ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org target_dir: Directory within which the modified SkUserConfig.h will be 48ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org written. Its name will be the same basename as 49ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org original_sk_user_config. If None, the new file will be written to the 50ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org working directory. 5124b04fa2adc284f21bdfde16d65e9fd2a72f0c2escroggo defines: Iterable of defines to be appended to SkUserConfig. 52ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 53ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org Raises: 54ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org AssertionError: If original_sk_user_config does not exist. 55ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org """ 56ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 57ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org sk_user_config_exists = os.path.exists(original_sk_user_config) 58ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org if require_sk_user_config: 59ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org assert sk_user_config_exists 60ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 61ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst_filename = os.path.basename(original_sk_user_config) 62ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org if target_dir: 63ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst_filename = os.path.join(target_dir, dst_filename) 64ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 65ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org with open(dst_filename, 'w') as dst: 66ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write(AUTOGEN_WARNING) 67ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 68ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # Copy the original exactly. This is merely for reference. Many of the 69ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # defines written to the file below, either manually or generated from the 70ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # gyp files, have explanations in the original SkUserConfig.h 71ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org if sk_user_config_exists: 72ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org with open(original_sk_user_config, 'r') as original: 73ec68ee9d569907672fb3e57333b23096e4185799commit-bot@chromium.org shutil.copyfileobj(original, dst) 74ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 75ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # Now add the defines specific to Android. Write a custom build guard to 76ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # ensure they don't get defined more than once. 77ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('\n// Android defines:\n') 78ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#ifndef ' + BUILD_GUARD + '\n') 79ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#define ' + BUILD_GUARD + '\n') 80ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 81ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # Add conditional defines manually: 82ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 83ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # do this build check for other tools that still read this header 84ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#ifdef ANDROID\n') 8523f116daa3fbb63892bed845e9e10d431d00d0edcommit-bot@chromium.org dst.write(' #include <utils/misc.h>\n') 86ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#endif\n\n') 87ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 88ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#if __BYTE_ORDER == __BIG_ENDIAN\n') 8923f116daa3fbb63892bed845e9e10d431d00d0edcommit-bot@chromium.org dst.write(' #define SK_CPU_BENDIAN\n') 9023f116daa3fbb63892bed845e9e10d431d00d0edcommit-bot@chromium.org dst.write(' #undef SK_CPU_LENDIAN\n') 91ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#else\n') 9223f116daa3fbb63892bed845e9e10d431d00d0edcommit-bot@chromium.org dst.write(' #define SK_CPU_LENDIAN\n') 9323f116daa3fbb63892bed845e9e10d431d00d0edcommit-bot@chromium.org dst.write(' #undef SK_CPU_BENDIAN\n') 94ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#endif\n\n') 95ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 96ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # Now add the defines from the gyp files. 9724b04fa2adc284f21bdfde16d65e9fd2a72f0c2escroggo for item in sorted(defines): 98ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # Although our defines may have '=' in them, when written to the header 99ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org # there should be a space between the macro and what it replaces. 100ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('#define ' + item.replace('=', ' ') + '\n') 101ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org 102ba0c5ea90d0e6b2e8b20696e54fea13ead6dda93commit-bot@chromium.org dst.write('\n#endif // ' + BUILD_GUARD + '\n') 103