#!/usr/bin/python2
#
# Copyright 2019 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# update_flex_bison_binaries.py:
#   Helper script to update the version of flex and bison in cloud storage.
#   These binaries are used to generate the ANGLE translator's lexer and parser.
#   This script relies on flex and bison binaries to be externally built which
#   is expected to be a rare operation. It currently only works on Windows and
#   Linux. It also will update the hashes stored in the tree. For more info see
#   README.md in this folder.

import os
import platform
import shutil
import sys

sys.path.append('tools/')
import angle_tools


def main():
    if angle_tools.is_linux:
        subdir = 'linux'
        files = ['flex', 'bison']
    elif angle_tools.is_windows:
        subdir = 'windows'
        files = [
            'flex.exe', 'bison.exe', 'm4.exe', 'msys-2.0.dll', 'msys-iconv-2.dll',
            'msys-intl-8.dll'
        ]
    else:
        print('Script must be run on Linux or Windows.')
        return 1

    files = [os.path.join(sys.path[0], subdir, f) for f in files]

    # Step 1: Upload to cloud storage
    if not angle_tools.upload_to_google_storage('angle-flex-bison', files):
        print('Error upload to cloud storage')
        return 1

    # Step 2: Stage new SHA to git
    if not angle_tools.stage_google_storage_sha1(files):
        print('Error running git add')
        return 2

    print('')
    print('The updated SHA has been staged for commit. Please commit and upload.')
    print('Suggested commit message (please indicate flex/bison versions):')
    print('----------------------------')
    print('')
    print('Update flex and bison binaries for %s.' % platform.system())
    print('')
    print('These binaries were updated using %s.' % os.path.basename(__file__))
    print('Please see instructions in tools/flex-bison/README.md.')
    print('')
    print('flex is at version TODO.')
    print('bison is at version TODO.')
    print('')
    print('Bug: None')

    return 0


if __name__ == '__main__':
    sys.exit(main())
