fetch_test_deps.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env python3
  2. import os
  3. import shutil
  4. import sys
  5. import urllib.error
  6. import urllib.request
  7. import zipfile
  8. example_deps_urls = {
  9. 'glfw': "https://github.com/glfw/glfw/releases/download/3.3.8/glfw-3.3.8.zip",
  10. 'glm': "https://github.com/g-truc/glm/releases/download/0.9.9.8/glm-0.9.9.8.zip",
  11. 'stb': "https://github.com/nothings/stb/archive/refs/heads/master.zip",
  12. 'glad': "https://github.com/Dav1dde/glad/archive/refs/heads/glad2.zip",
  13. }
  14. test_deps_urls = {
  15. 'catch2': "https://github.com/catchorg/Catch2/archive/refs/tags/v3.3.2.zip",
  16. 'corrosion': "https://github.com/corrosion-rs/corrosion/archive/refs/heads/master.zip",
  17. }
  18. deps_folder = "deps/"
  19. def download_zip_and_extract(url, output_folder, name):
  20. output = f'{output_folder}{name}'
  21. file_path, _ = urllib.request.urlretrieve(url, f'{output}.zip')
  22. with zipfile.ZipFile(file_path, "r") as zip_ref:
  23. names = zip_ref.namelist()
  24. if len(names) == 0:
  25. return
  26. # Remove any old versions of the downloaded dependency
  27. if os.path.isdir(output):
  28. shutil.rmtree(output)
  29. zip_ref.extractall(output_folder)
  30. # The zip file contains another folder called the same name.
  31. if name.lower() in names[0].lower():
  32. os.rename(f'{output_folder}{names[0]}', output)
  33. os.remove(file_path)
  34. def main():
  35. for name, url in example_deps_urls.items():
  36. try:
  37. download_zip_and_extract(url, deps_folder, name)
  38. print(f'Finished downloading {name}')
  39. except urllib.error.HTTPError:
  40. print(f'Could not download {url}.', file=sys.stderr)
  41. break
  42. for name, url in test_deps_urls.items():
  43. try:
  44. download_zip_and_extract(url, deps_folder, name)
  45. print(f'Finished downloading {name}')
  46. except urllib.error.HTTPError:
  47. print(f'Could not download {url}.', file=sys.stderr)
  48. if __name__ == '__main__':
  49. main()