2121import zipfile
2222import tempfile
2323
24- HEAD = "https://github.com/Kitware/CMake/releases/download/"
2524PLATFORMS = ("amd64" , "x86_64" , "x64" , "i86pc" )
2625
2726
28- def default_version () -> str :
29- jd = json .load (importlib .resources .open_text ("cmakeutils" , "versions.json" ))["cmake" ]
30- return jd [jd ["latest" ]]
27+ def latest_version () -> str :
28+ cjd = json .load (importlib .resources .open_text ("cmakeutils" , "versions.json" ))["cmake" ]
29+ return cjd [cjd ["latest" ]]
30+
31+
32+ def get_host () -> str :
33+ return json .load (importlib .resources .open_text ("cmakeutils" , "versions.json" ))["cmake" ][
34+ "binary"
35+ ]
3136
3237
3338def url_retrieve (url : str , outfile : Path ):
39+ print ("downloading" , url )
3440 outfile = Path (outfile ).expanduser ().resolve ()
3541 if outfile .is_dir ():
3642 raise ValueError ("Please specify full filepath, including filename" )
@@ -114,24 +120,26 @@ def cmake_files(cmake_version: str, odir: Path) -> tuple[Path, str]:
114120
115121 ofn = f"cmake-{ cmake_version } -{ tail } "
116122
117- return odir / ofn , HEAD + f"v { cmake_version } /{ ofn } "
123+ return odir / ofn , f" { cmake_version } /{ ofn } "
118124
119125
120126def download_cmake (outdir : Path , get_version : str ) -> Path :
121127
128+ host = get_host ()
129+
122130 outdir = Path (outdir ).expanduser ()
123131 outdir .mkdir (parents = True , exist_ok = True )
124- outfile , url = cmake_files (get_version , outdir )
132+ outfile , tail = cmake_files (get_version , outdir )
125133 # %% checksum
126134 hashstem = f"cmake-{ get_version } -SHA-256.txt"
127- hashurl = HEAD + f" v{ get_version } /{ hashstem } "
135+ hashurl = f" { host } v{ get_version } /{ hashstem } "
128136 hashfile = outdir / hashstem
129137
130138 if not hashfile .is_file () or hashfile .stat ().st_size == 0 :
131139 url_retrieve (hashurl , hashfile )
132140
133141 if not outfile .is_file () or outfile .stat ().st_size < 1e6 :
134- url_retrieve (url , outfile )
142+ url_retrieve (f" { host } v { tail } " , outfile )
135143
136144 if not file_checksum (outfile , hashfile , "sha256" ):
137145 raise ValueError (f"{ outfile } SHA256 checksum did not match { hashfile } " )
@@ -141,8 +149,12 @@ def download_cmake(outdir: Path, get_version: str) -> Path:
141149
142150def main ():
143151 p = argparse .ArgumentParser ()
144- p .add_argument ("version" , help = "request version (default latest)" , nargs = "?" , default = default_version ())
145- p .add_argument ("-o" , "--outdir" , help = "download archive directory" , default = tempfile .gettempdir ())
152+ p .add_argument (
153+ "version" , help = "request version (default latest)" , nargs = "?" , default = latest_version ()
154+ )
155+ p .add_argument (
156+ "-o" , "--outdir" , help = "download archive directory" , default = tempfile .gettempdir ()
157+ )
146158 p .add_argument ("--prefix" , help = "Path prefix to install CMake under" , default = "~" )
147159 P = p .parse_args ()
148160
0 commit comments