@@ -4,21 +4,30 @@ use std::fs;
44use std:: path:: PathBuf ;
55
66use anyhow:: { anyhow, Context } ;
7- use embuild:: espidf:: EspIdfBuildInfo ;
7+ use cargo_metadata:: Version ;
8+ use embuild:: espidf:: { self , EspIdfBuildInfo } ;
89use embuild:: utils:: CmdError ;
910use embuild:: { cmd, path_buf} ;
1011use structopt:: StructOpt ;
1112
12- use crate :: build:: { self , BuildError } ;
13+ use crate :: build:: { self , BuildError , BuildInfo } ;
14+
15+ const MIN_ESP_IDF_SYS_VERSION : Version = Version :: new ( 0 , 28 , 3 ) ;
1316
1417#[ derive( Debug , thiserror:: Error ) ]
15- #[ error( "Could not open menuconfig" ) ]
18+ #[ error( transparent ) ]
1619pub enum MenuconfigError {
20+ #[ error( "Build failed" ) ]
1721 Build ( #[ from] BuildError ) ,
1822 Cmd ( #[ from] CmdError ) ,
1923 Anyhow ( #[ from] anyhow:: Error ) ,
2024 Io ( #[ from] std:: io:: Error ) ,
2125 Serde ( #[ from] serde_json:: Error ) ,
26+ #[ error(
27+ "esp-idf-sys version ({0}) too old, version must be >= {}" ,
28+ MIN_ESP_IDF_SYS_VERSION
29+ ) ]
30+ EspIdfSysTooOld ( Version ) ,
2231}
2332
2433#[ derive( StructOpt ) ]
@@ -37,7 +46,17 @@ pub fn run(opts: MenuconfigOpts) -> Result<(), MenuconfigError> {
3746 let build_info_json = if let Some ( path) = opts. idf_build_info {
3847 path
3948 } else {
40- build:: run ( opts. build_opts ) ?. esp_idf_build_info_json
49+ let BuildInfo {
50+ esp_idf_sys_out_dir,
51+ esp_idf_sys_version,
52+ ..
53+ } = build:: run ( opts. build_opts ) ?;
54+
55+ if esp_idf_sys_version < MIN_ESP_IDF_SYS_VERSION {
56+ return Err ( MenuconfigError :: EspIdfSysTooOld ( esp_idf_sys_version) ) ;
57+ }
58+
59+ esp_idf_sys_out_dir. join ( espidf:: BUILD_INFO_FILENAME )
4160 } ;
4261
4362 let EspIdfBuildInfo {
0 commit comments