16a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#!/usr/bin/python 26a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 36a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek# Copyright 2014 Google Inc. 46a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek# 56a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek# Use of this source code is governed by a BSD-style license that can be 66a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek# found in the LICENSE file. 76a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 86a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek"""Function for generating the SkUserConfig file, customized for Android.""" 96a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 106a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenekimport os 116a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenekimport shutil 126a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 136a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 146a34083e9f74a45e2f79c9fab66f177809a5db66Ted KremenekAUTOGEN_WARNING = ( 15339b9c27759d7b6a53e2370f83f66e78b3254595Ted Kremenek""" 166a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek/////////////////////////////////////////////////////////////////////////////// 176a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek// 18867924dbeca06870573fd58d620032da6994b223Chris Lattner// THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT. 193245a0a1c7a4fd74fca845b2edba275bb126d773Chris Lattner// 206a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek// This file contains Skia's upstream include/config/SkUserConfig.h as a 2157df3b950061c73d13d3116f747e79d7955a216aChris Lattner// reference, followed by the actual defines set for Android. 22339b9c27759d7b6a53e2370f83f66e78b3254595Ted Kremenek// 236a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek/////////////////////////////////////////////////////////////////////////////// 24a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek 256a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek""" 266a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek) 279402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 285ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris LattnerBUILD_GUARD = 'SkUserConfig_Android_DEFINED' 295ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 305ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 315ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattnerdef generate_user_config(original_sk_user_config, require_sk_user_config, 325ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner target_dir, ordered_set): 335ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner """Generate the SkUserConfig file specific to the Android framework. 345ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 35f7cf85b330bedd2877e1371fb0a83e99751ae162Chris Lattner Android needs its #defines in its skia/include/core directory, so that other 36f7cf85b330bedd2877e1371fb0a83e99751ae162Chris Lattner libraries which use Skia's headers get the right definitions. This function 37a11d61793341fea195c29a0dab3fbd74f2b39a8cChris Lattner takes the existing sample version of SkUserConfig, checked into Skia, and 38a11d61793341fea195c29a0dab3fbd74f2b39a8cChris Lattner appends the defines from ordered_set, which is expected to be a 395ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner vars_dict_lib.OrderedSet containing the defines. The result is written to 4052c29081281955d3db9e11d10573b2d38f709099Chris Lattner target_dir/SkUserConfig.h 4152c29081281955d3db9e11d10573b2d38f709099Chris Lattner 425ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner Args: 435ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner original_sk_user_config: Path to original SkUserConfig.h 442c78b873f4f3823ae859c15674cb3d76c8554113Chris Lattner require_sk_user_config: If True, raise an AssertionError if 455ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner SkUserConfig.h does not exist. Either way, if it does exist, copy it 462b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner into the new file. 472b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner target_dir: Directory within which the modified SkUserConfig.h will be 485ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner written. Its name will be the same basename as 495ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner original_sk_user_config. If None, the new file will be written to the 505ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner working directory. 515ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner ordered_set: A vars_dict_lib.OrderedSet, containing a list of defines to 525ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner be appended to SkUserConfig. 535ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 545ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner Raises: 559402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner AssertionError: If original_sk_user_config does not exist. 56d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar """ 57d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar 585ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner sk_user_config_exists = os.path.exists(original_sk_user_config) 599402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner if require_sk_user_config: 609402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner assert sk_user_config_exists 619402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 629402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst_filename = os.path.basename(original_sk_user_config) 639402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner if target_dir: 649402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst_filename = os.path.join(target_dir, dst_filename) 659402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 669402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner with open(dst_filename, 'w') as dst: 679402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write(AUTOGEN_WARNING) 689402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 699402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # Copy the original exactly. This is merely for reference. Many of the 709402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # defines written to the file below, either manually or generated from the 71d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar # gyp files, have explanations in the original SkUserConfig.h 729402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner if sk_user_config_exists: 739402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner with open(original_sk_user_config, 'r') as original: 749402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner shutil.copyfileobj(original, dst) 759402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 769402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # Now add the defines specific to Android. Write a custom build guard to 779402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # ensure they don't get defined more than once. 789402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('\n// Android defines:\n') 799402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#ifndef ' + BUILD_GUARD + '\n') 809402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#define ' + BUILD_GUARD + '\n') 819402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 829402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # Add conditional defines manually: 839402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 849402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # do this build check for other tools that still read this header 859402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#ifdef ANDROID\n') 869402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write(' #include <utils/misc.h>\n') 879402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#endif\n\n') 889402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 899402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#if __BYTE_ORDER == __BIG_ENDIAN\n') 90d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar dst.write(' #define SK_CPU_BENDIAN\n') 919402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write(' #undef SK_CPU_LENDIAN\n') 929402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#else\n') 939402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write(' #define SK_CPU_LENDIAN\n') 949402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write(' #undef SK_CPU_BENDIAN\n') 959402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner dst.write('#endif\n\n') 969402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 979402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner # Now add the defines from the gyp files. 989402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner for item in ordered_set: 995ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner # Although our defines may have '=' in them, when written to the header 1005ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner # there should be a space between the macro and what it replaces. 1012b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner dst.write('#define ' + item.replace('=', ' ') + '\n') 102fa5be3617294f0e3c341f0ecb6b2076478b1b5acTed Kremenek 1036a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek dst.write('\n#endif // ' + BUILD_GUARD + '\n') 1042b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner