123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/usr/bin/python3
- import json
- import configparser
- import argparse
- import re
- import os
- import datetime
- travis_dir = os.path.dirname(os.path.abspath(__file__))
- base_dir = os.path.abspath(travis_dir + "/../")
- def write_header_file(version):
- hvs = version.split('.')
- intversion = int(hvs[0]) * 1000000 + int(hvs[1]) * 1000 + int(hvs[2])
- now = datetime.datetime.now()
- text = f'''/**
- * @file WebSocketsVersion.h
- * @date {now.strftime("%d.%m.%Y")}
- * @author Markus Sattler
- *
- * Copyright (c) 2015 Markus Sattler. All rights reserved.
- * This file is part of the WebSockets for Arduino.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
- #ifndef WEBSOCKETSVERSION_H_
- #define WEBSOCKETSVERSION_H_
- #define WEBSOCKETS_VERSION "{version}"
- #define WEBSOCKETS_VERSION_MAJOR {hvs[0]}
- #define WEBSOCKETS_VERSION_MINOR {hvs[1]}
- #define WEBSOCKETS_VERSION_PATCH {hvs[2]}
- #define WEBSOCKETS_VERSION_INT {intversion}
- #endif /* WEBSOCKETSVERSION_H_ */
- '''
- with open(f'{base_dir}/src/WebSocketsVersion.h', 'w') as f:
- f.write(text)
- def get_library_properties_version():
- library_properties = {}
- with open(f'{base_dir}/library.properties', 'r') as f:
- library_properties = configparser.ConfigParser()
- library_properties.read_string('[root]\n' + f.read())
- return library_properties['root']['version']
- def get_library_json_version():
- library_json = {}
- with open(f'{base_dir}/library.json', 'r') as f:
- library_json = json.load(f)
- return library_json['version']
- def get_header_versions():
- data = {}
- define = re.compile('^#define WEBSOCKETS_VERSION_?(.*) "?([0-9\.]*)"?$')
- with open(f'{base_dir}/src/WebSocketsVersion.h', 'r') as f:
- for line in f:
- m = define.match(line)
- if m:
- name = m[1]
- if name == "":
- name = "VERSION"
- data[name] = m[2]
- return data
- parser = argparse.ArgumentParser(description='Checks and update Version files')
- parser.add_argument(
- '--update', action='store_true', default=False)
- parser.add_argument(
- '--check', action='store_true', default=True)
- args = parser.parse_args()
- if args.update:
- library_properties_version = get_library_properties_version()
- with open(f'{base_dir}/library.json', 'r') as f:
- library_json = json.load(f)
- library_json['version'] = library_properties_version
- with open(f'{base_dir}/library.json', 'w') as f:
- json.dump(library_json, f, indent=4, sort_keys=True)
- write_header_file(library_properties_version)
- library_json_version = get_library_json_version()
- library_properties_version = get_library_properties_version()
- header_version = get_header_versions()
- print("WebSocketsVersion.h", header_version)
- print(f"library.json: {library_json_version}")
- print(f"library.properties: {library_properties_version}")
- if args.check:
- if library_json_version != library_properties_version or header_version['VERSION'] != library_properties_version:
- raise Exception('versions did not match!')
- hvs = header_version['VERSION'].split('.')
- if header_version['MAJOR'] != hvs[0]:
- raise Exception('header MAJOR version wrong!')
- if header_version['MINOR'] != hvs[1]:
- raise Exception('header MINOR version wrong!')
- if header_version['PATCH'] != hvs[2]:
- raise Exception('header PATCH version wrong!')
- intversion = int(hvs[0]) * 1000000 + int(hvs[1]) * 1000 + int(hvs[2])
- if int(header_version['INT']) != intversion:
- raise Exception('header INT version wrong!')
|