| #!/usr/bin/python3 |
| #******************************************************************************* |
| # Copyright (c) 2016 The Eclipse Foundation and others. |
| # All rights reserved. This program and the accompanying materials |
| # are made available under the terms of the Eclipse Public License v1.0 |
| # which accompanies this distribution, and is available at |
| # http://www.eclipse.org/legal/epl-v10.html |
| # |
| # Contributors: |
| # Rolf Theunissen - initial version, adapted from dynamic_deprecated.py |
| #******************************************************************************* |
| |
| import sys |
| import re |
| from urllib.request import urlopen |
| from html.parser import HTMLParser |
| |
| API_GTK2_STABLE_URL = "https://developer.gnome.org/gtk2/stable/api-index-full.html" |
| API_GTK3_0_URL = "https://developer.gnome.org/gtk3/3.0/api-index-full.html" |
| API_GTK3_STABLE_URL = "https://developer.gnome.org/gtk3/stable/api-index-full.html" |
| API_GTK3_DEPRECATED_URL = "https://developer.gnome.org/gtk3/stable/api-index-deprecated.html" |
| |
| OS_FILE = "./../../org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c" |
| FUNCTION_LIST = [] |
| GTK2_FUNCTION_LIST = [] |
| GTK30_FUNCTION_LIST = [] |
| GTK3x_FUNCTION_LIST = [] |
| GTK3x_DEPR_FUNCTION_LIST = [] |
| |
| GTK2_GTK30_SHARED_FUNCTION_LIST = [] |
| GTK2_GTK3x_SHARED_FUNCTION_LIST = [] |
| |
| # This script is Python 3 only. |
| # |
| # USAGE OPTIONS: |
| # <no option specified>: prints list of deprecated dynamic functions to console. |
| # -f: writes the list of deprecated dynamic functions to a file called dynamic_deprecated_functions.txt. |
| # The file is in the same directory as the script |
| |
| def download_symbols(api_url): |
| # Fetch symbols from api_url |
| with urlopen(api_url) as url: |
| dep_file = url.read() |
| |
| return str(dep_file); |
| |
| def download_gtk2_stable_symbols(): |
| return download_symbols(API_GTK2_STABLE_URL); |
| |
| def download_gtk3_0_symbols(): |
| return download_symbols(API_GTK3_0_URL); |
| |
| def download_gtk3_stable_symbols(): |
| return download_symbols(API_GTK3_STABLE_URL); |
| |
| def download_gtk3_deprecated_symbols(): |
| return download_symbols(API_GTK3_DEPRECATED_URL); |
| |
| def populate_function_list(): |
| # Read os_custom.h from file |
| with open(OS_FILE) as f: |
| os_custom = f.read() |
| |
| return str(os_custom); |
| |
| def find_gtk_version_functions(custom_str, gtk2_str, gtk30_str, gtk3x_str, gtk3x_dpr_str): |
| regex = r"((GTK|GDK)_LOAD_FUNCTION\(fp, (\w+))+" |
| matchList = re.findall(regex, custom_str) |
| |
| # Search through list of regex matches, strip the "_LIB" and populate |
| # the dynamic function list. |
| for match in matchList: |
| function_name = match[2] |
| FUNCTION_LIST.append(function_name) |
| |
| # Check each dynamic function and see if it's deprecated: if so, populate |
| # the deprecated function list. |
| for func in FUNCTION_LIST: |
| func_tag = ">" + func + "<" |
| if func_tag in gtk2_str: |
| GTK2_FUNCTION_LIST.append(func) |
| if func_tag in gtk30_str: |
| GTK30_FUNCTION_LIST.append(func) |
| if func_tag in gtk3x_str: |
| GTK3x_FUNCTION_LIST.append(func) |
| if func_tag in gtk3x_dpr_str: |
| GTK3x_DEPR_FUNCTION_LIST.append(func) |
| return; |
| |
| def find_gtk2_and_gtk3_shared(): |
| for func in GTK2_FUNCTION_LIST: |
| if func in GTK30_FUNCTION_LIST: |
| GTK2_GTK30_SHARED_FUNCTION_LIST.append(func) |
| elif func in GTK30_FUNCTION_LIST: |
| GTK2_GTK3x_SHARED_FUNCTION_LIST.append(func) |
| |
| |
| if __name__ == "__main__": |
| gtk2functions = download_gtk2_stable_symbols() |
| gtk30functions = download_gtk3_0_symbols() |
| gtk3xfunctions = download_gtk3_stable_symbols() |
| gtk3xdeprecated = download_gtk3_deprecated_symbols() |
| |
| os_custom_str = populate_function_list() |
| |
| find_gtk_version_functions(os_custom_str, gtk2functions, gtk30functions, |
| gtk3xfunctions, gtk3xdeprecated) |
| |
| find_gtk2_and_gtk3_shared() |
| |
| # If the user specified the "-f" option, the output will be written to |
| # a file named "dynamic_deprecated_functions.txt" |
| if len(sys.argv) == 2 and "-f" in str(sys.argv): |
| with open("dynamic_gtk2x_gtk30_shared_functions.txt","w") as f: |
| for i in GTK2_GTK30_SHARED_FUNCTION_LIST: |
| if i in GTK3x_DEPR_FUNCTION_LIST: |
| f.write ("#") |
| f.write(i + "\n") |
| f.close() |
| with open("dynamic_gtk2x_gtk3x_shared_functions.txt","w") as f: |
| for i in GTK2_GTK3x_SHARED_FUNCTION_LIST: |
| if i in GTK3x_DEPR_FUNCTION_LIST: |
| f.write ("#") |
| f.write(i + "\n") |
| f.close() |
| # If no options are specified, print the list to console |
| else: |
| print ("# GTK2.x - GTK3.0 SHARED") |
| for i in GTK2_GTK30_SHARED_FUNCTION_LIST: |
| if i in GTK3x_DEPR_FUNCTION_LIST: |
| print("#" + i) |
| else: |
| print(i) |
| |
| print() |
| print ("# GTK2.x - GTK3.x SHARED") |
| for i in GTK2_GTK3x_SHARED_FUNCTION_LIST: |
| if i in GTK3x_DEPR_FUNCTION_LIST: |
| print("#" + i) |
| else: |
| print(i) |
| sys.exit(0) |