77import os
88import tempfile
99from urllib .request import urlretrieve
10- from urllib .parse import urlparse , urlsplit
10+ from urllib .parse import urlparse
1111from pathlib import Path
1212from zipfile import ZipFile
1313import subprocess
1818import platform
1919import sys
2020from functools import cache
21+ from dataclasses import dataclass
2122
2223
2324CONAN_ALL_PACKAGES = '"*"'
2425
25- OUTPUT_DIR = os .getenv ("OUTPUT_DIR" , "out" )
2626
2727logger = logging .getLogger ("LuxCore Dependencies" )
2828
3636}
3737
3838
39+ @dataclass
3940class Colors :
41+ """Colors for terminal output."""
4042 HEADER = "\033 [95m"
4143 OKBLUE = "\033 [94m"
4244 OKCYAN = "\033 [96m"
@@ -135,11 +137,22 @@ def download(url, destdir):
135137 # Check attestation
136138 logger .info ("Checking '%s'" , local_filename )
137139
138- gh_app = shutil .which ("gh" )
139- if not gh_app :
140- logger .error (Colors .FAIL + "SIGNATURE CHECKING ERROR" + Colors .ENDC )
141- msg = "Cannot find 'gh'application - Dependencies origin cannot be checked."
142- logger .error (Colors .FAIL + msg + Colors .ENDC )
140+ if not (gh_app := shutil .which ("gh" )):
141+ msg = (
142+ Colors .WARNING ,
143+ "SIGNATURE CHECKING ERROR" ,
144+ Colors .ENDC ,
145+ )
146+ msg = "" .join (msg )
147+ logger .warning (msg )
148+ msg = (
149+ Colors .WARNING ,
150+ "Cannot find 'gh'application - " ,
151+ "Dependencies origin cannot be checked." ,
152+ Colors .ENDC ,
153+ )
154+ msg = '' .join (msg )
155+ logger .warning (msg )
143156 else :
144157 gh_cmd = [
145158 gh_app ,
@@ -153,11 +166,13 @@ def download(url, destdir):
153166 try :
154167 gh_output = subprocess .check_output (gh_cmd , text = True )
155168 except subprocess .CalledProcessError as err :
156- logger .error (Colors .FAIL + "SIGNATURE CHECKING ERROR" + Colors .ENDC )
157- logger .error ("gh return code: %s" , err .returncode )
158- logger .error (err .output )
169+ msg = f"{ Colors .WARNING } SIGNATURE CHECKING ERROR{ Colors .ENDC } "
170+ logger .warning (msg )
171+ logger .warning ("gh return code: %s" , err .returncode )
172+ logger .warning (err .output )
159173 else :
160- logger .info (Colors .OKGREEN + "'%s': found certificate - OK" + Colors .ENDC , filename )
174+ msg = f"{ Colors .OKGREEN } '%s': found certificate - OK{ Colors .ENDC } "
175+ logger .info (msg , filename )
161176 signature , * _ = json .loads (gh_output )
162177 certificate = signature ["verificationResult" ]["signature" ]["certificate" ]
163178 logger .debug (json .dumps (certificate , indent = 2 ))
@@ -201,18 +216,19 @@ def copy_conf(dest):
201216
202217def main (call_args = None ):
203218 """Entry point."""
204- global OUTPUT_DIR
219+ output_dir = os . getenv ( "output_dir" , "out" )
205220
206221 # Set-up logger
207222 logger .setLevel (logging .INFO )
208223 logging .basicConfig (level = logging .INFO )
209- logger .info (Colors .OKBLUE + "BEGIN" + Colors .ENDC )
224+ msg = f"{ Colors .OKBLUE } BEGIN{ Colors .ENDC } "
225+ logger .info (msg )
210226
211227 # Get settings
212228 logger .info ("Reading settings" )
213229 with open ("luxcore.json" , encoding = "utf-8" ) as f :
214230 settings = json .load (f )
215- logger .info ("Output directory: %s" , OUTPUT_DIR )
231+ logger .info ("Output directory: %s" , output_dir )
216232
217233 # Get optional command-line parameters
218234 # Nota: --local option is used by LuxCoreDeps CI
@@ -248,7 +264,7 @@ def main(call_args=None):
248264 if args .verbose :
249265 logger .setLevel (logging .DEBUG )
250266 if args .output :
251- OUTPUT_DIR = args .output
267+ output_dir = args .output
252268
253269 # Process
254270 with tempfile .TemporaryDirectory () as tmpdir :
@@ -315,24 +331,25 @@ def main(call_args=None):
315331 "--build=missing" ,
316332 f"--profile:all={ get_profile_name ()} " ,
317333 "--deployer=full_deploy" ,
318- f"--deployer-folder={ OUTPUT_DIR } /dependencies" ,
319- f"--output-folder={ OUTPUT_DIR } " ,
334+ f"--deployer-folder={ output_dir } /dependencies" ,
335+ f"--output-folder={ output_dir } " ,
320336 "--settings=build_type=Release" ,
321337 "--conf:all=tools.cmake.cmaketoolchain:generator=Ninja Multi-Config" ,
322338 ]
323339 build_types = ["Debug" , "Release" ]
324340 if args .extended :
325341 build_types += ["RelWithDebInfo" , "MinSizeRel" ]
326342 for build_type in build_types :
327- logger .info (f "Generating '{ build_type } '" )
343+ logger .info ("Generating '%s'" , build_type )
328344 end_block = [f"--settings=&:build_type={ build_type } " , "." ]
329345 run_conan (main_block + end_block )
330346
331347 # Show presets
332- subprocess .run (["cmake" , "--list-presets=build" ])
348+ subprocess .run (["cmake" , "--list-presets=build" ], check = False )
333349 print ("" , flush = True )
334350
335- logger .info (Colors .OKBLUE + "END" + Colors .ENDC )
351+ msg = Colors .OKBLUE + "END" + Colors .ENDC
352+ logger .info (msg )
336353
337354
338355if __name__ == "__main__" :
0 commit comments