Rewrite generate-xcfilelists in Python
[WebKit-https.git] / Tools / Scripts / webkitpy / xcode / __init__.py
1 # Required for Python to search this directory for module files
2
3 import hashlib
4 import struct
5
6
7 # The default location for Xcode's "DerivedData" (build output and intermediate
8 # files) is a unique directory in ~/Library/Developer/Xcode/DerivedData with a
9 # name incorporating a hash based on the full path of the project or workspace
10 # being built. The following function takes that path and returns the
11 # corresponding hash.
12 #
13 # The algorithm is adapted from the following article:
14 #
15 #   <https://pewpewthespells.com/blog/xcode_deriveddata_hashes.pdf>
16
17 def xcode_hash_for_path(path):
18     def convert_to_string(n):
19         s = ''
20         for _ in range(0, 14):
21             (n, r) = divmod(n, 26)
22             s = chr(r + 97) + s
23         return s
24
25     (part1, part2) = struct.unpack(">QQ", hashlib.md5(path.encode()).digest())
26     return convert_to_string(part1) + convert_to_string(part2)