@@ -26,6 +26,7 @@ use crate::{actions::build::error::PackageTaskError, providers::error::FileError
2626const MISSING_SAMPLE_FLAG_WDK_BUILD_NUMBER_RANGE : RangeFrom < u32 > = 25798 ..;
2727const WDR_TEST_CERT_STORE : & str = "WDRTestCertStore" ;
2828const WDR_LOCAL_TEST_CERT : & str = "WDRLocalTestCert" ;
29+ const STAMPINF_VERSION_ENV_VAR : & str = "STAMPINF_VERSION" ;
2930
3031#[ derive( Debug ) ]
3132pub struct PackageTaskParams < ' a > {
@@ -313,9 +314,23 @@ impl<'a> PackageTask<'a> {
313314 & arch,
314315 "-c" ,
315316 & cat_file_path,
316- "-v" ,
317- "*" ,
318317 ] ;
318+
319+ match std:: env:: var ( STAMPINF_VERSION_ENV_VAR ) {
320+ Ok ( version) if !version. trim ( ) . is_empty ( ) => {
321+ // When STAMPINF_VERSION is set to a non-empty, non-whitespace value, we
322+ // intentionally omit -v so stampinf reads it and populates
323+ // DriverVer. (Whitespace-only values are ignored.)
324+ debug ! (
325+ DriverVer = version,
326+ "Using {STAMPINF_VERSION_ENV_VAR} env var to set DriverVer"
327+ ) ;
328+ }
329+ _ => {
330+ args. extend ( [ "-v" , "*" ] ) ;
331+ }
332+ }
333+
319334 if !wdf_version_flags. is_empty ( ) {
320335 args. append ( & mut wdf_version_flags. iter ( ) . map ( String :: as_str) . collect ( ) ) ;
321336 }
@@ -514,7 +529,10 @@ impl<'a> PackageTask<'a> {
514529}
515530#[ cfg( test) ]
516531mod tests {
517- use std:: path:: PathBuf ;
532+ use std:: {
533+ path:: PathBuf ,
534+ process:: { ExitStatus , Output } ,
535+ } ;
518536
519537 use wdk_build:: { CpuArchitecture , KmdfConfig } ;
520538
@@ -632,4 +650,69 @@ mod tests {
632650
633651 PackageTask :: new ( package_task_params, & wdk_build, & command_exec, & fs) ;
634652 }
653+
654+ #[ test]
655+ fn stampinf_version_overrides_with_env_var ( ) {
656+ // verify both with and without the env var set scenarios
657+ let scenarios = [
658+ ( "env_set" , Some ( "1.2.3.4" ) , true ) ,
659+ ( "env_empty" , Some ( "" ) , false ) ,
660+ ( "env_spaces" , Some ( " " ) , false ) ,
661+ ( "env_unset" , None , false ) ,
662+ ] ;
663+
664+ for ( name, env_val, expect_skip_v) in scenarios {
665+ let result =
666+ crate :: test_utils:: with_env ( & [ ( STAMPINF_VERSION_ENV_VAR , env_val) ] , || {
667+ let package_name = "driver" ;
668+ let working_dir = PathBuf :: from ( "C:/abs/driver" ) ;
669+ let target_dir = PathBuf :: from ( "C:/abs/driver/target/debug" ) ;
670+ let arch = CpuArchitecture :: Amd64 ;
671+
672+ let params = PackageTaskParams {
673+ package_name,
674+ working_dir : & working_dir,
675+ target_dir : & target_dir,
676+ target_arch : & arch,
677+ driver_model : DriverConfig :: Kmdf ( KmdfConfig :: default ( ) ) ,
678+ sample_class : false ,
679+ verify_signature : false ,
680+ } ;
681+
682+ let wdk_build = WdkBuild :: default ( ) ;
683+ let fs = Fs :: default ( ) ;
684+ let mut command_exec = CommandExec :: default ( ) ;
685+
686+ command_exec
687+ . expect_run ( )
688+ . withf ( move |cmd : & str , args : & [ & str ] , _, _| {
689+ if cmd != "stampinf" {
690+ return false ;
691+ }
692+ let has_v = args. contains ( & "-v" ) ;
693+ if expect_skip_v {
694+ !has_v
695+ } else {
696+ args. windows ( 2 ) . any ( |w| w == [ "-v" , "*" ] )
697+ }
698+ } )
699+ . once ( )
700+ . return_once ( |_, _, _, _| {
701+ Ok ( Output {
702+ status : ExitStatus :: default ( ) ,
703+ stdout : vec ! [ ] ,
704+ stderr : vec ! [ ] ,
705+ } )
706+ } ) ;
707+
708+ let task = PackageTask :: new ( params, & wdk_build, & command_exec, & fs) ;
709+ task. run_stampinf ( )
710+ } ) ;
711+
712+ assert ! (
713+ result. is_ok( ) ,
714+ "scenario {name} failed (env_set={env_val:?})"
715+ ) ;
716+ }
717+ }
635718}
0 commit comments