@@ -714,12 +714,29 @@ def download_llvm(rctx):
714
714
if not urls :
715
715
urls , sha256 , strip_prefix = _distribution_urls (rctx )
716
716
717
- res = rctx .download_and_extract (
718
- urls ,
719
- sha256 = sha256 ,
720
- stripPrefix = strip_prefix ,
721
- auth = _get_auth (rctx , urls ),
722
- )
717
+ filename = urls [0 ].split ("?" )[0 ]
718
+ basename = filename .split ("/" )[- 1 ]
719
+ if urls [0 ].endswith (".exe" ):
720
+ res = rctx .download (
721
+ urls ,
722
+ sha256 = sha256 ,
723
+ auth = _get_auth (rctx , urls ),
724
+ output = basename ,
725
+ )
726
+ rctx .execute (
727
+ arguments = [
728
+ "C:/Program Files/7-Zip7z.exe" ,
729
+ "x" ,
730
+ basename ,
731
+ ],
732
+ )
733
+ else :
734
+ res = rctx .download_and_extract (
735
+ urls ,
736
+ sha256 = sha256 ,
737
+ stripPrefix = strip_prefix ,
738
+ auth = _get_auth (rctx , urls ),
739
+ )
723
740
724
741
if rctx .attr .libclang_rt :
725
742
clang_versions = rctx .path ("lib/clang" ).readdir ()
@@ -784,11 +801,12 @@ def _distribution_urls(rctx):
784
801
785
802
sha256 = _llvm_distributions [basename ]
786
803
787
- if basename .endswith (".tar.xz" ):
788
- strip_prefix = basename [:(len (basename ) - len (".tar.xz" ))]
789
- elif basename .endswith (".tar.zst" ):
790
- strip_prefix = basename [:(len (basename ) - len (".tar.zst" ))]
791
- else :
804
+ strip_prefix = ""
805
+ for suffix in [".exe" , ".tar.gz" , ".tar.xz" , ".tar.zst" ]:
806
+ if basename .endswith (suffix ):
807
+ strip_prefix = basename .rstrip (suffix )
808
+ break
809
+ if not strip_prefix :
792
810
fail ("Unknown URL file extension {url}" , url = basename )
793
811
794
812
strip_prefix = strip_prefix .rstrip ("-rhel86" )
@@ -831,9 +849,9 @@ def _write_distributions_impl(ctx):
831
849
for prefix in ["LLVM-" , "clang+llvm-" ]:
832
850
if name .startswith (prefix ):
833
851
version = name .split ("-" , 2 )[1 ]
834
- if not _version_ge (version , MIN_VERSION ):
835
- continue
836
- version_list . append ( version )
852
+ if _version_ge (version , MIN_VERSION ):
853
+ version_list . append ( version )
854
+ break
837
855
for version in _llvm_distributions_base_url .keys ():
838
856
if not _version_ge (version , MIN_VERSION ):
839
857
continue
0 commit comments