77
88use std:: env;
99use std:: fs;
10- use std:: os:: unix:: fs:: symlink;
1110use std:: path:: Path ;
1211use std:: path:: PathBuf ;
1312use std:: process:: Command ;
@@ -332,7 +331,7 @@ fn c2rust(crate_dir: &Path, duckdb_include_dir: &Path) {
332331fn cpp ( duckdb_include_dir : & Path ) {
333332 cc:: Build :: new ( )
334333 . std ( "c++20" )
335- . flags ( [ "-Wall" , "-Wextra" , "-Wpedantic" ] )
334+ . flags ( [ "-Wall" , "-Wextra" , "-Wpedantic" , "-Werror" ] )
336335 . cpp ( true )
337336 . include ( duckdb_include_dir)
338337 . include ( "cpp/include" )
@@ -391,10 +390,21 @@ fn main() {
391390 DuckDBVersion :: Commit ( c) => println ! ( "cargo:info=Using DuckDB commit: {c}" ) ,
392391 }
393392
393+ let has_debug_env =
394+ env:: var ( "VX_DUCKDB_DEBUG" ) . is_ok_and ( |v| matches ! ( v. as_str( ) , "1" | "true" ) ) ;
395+ let build_type = match has_debug_env {
396+ true => "debug" ,
397+ false => "release" ,
398+ } ;
399+
394400 let crate_dir = PathBuf :: from ( env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ;
395- let duckdb_dir = crate_dir. join ( "duckdb" ) ;
396- let out_dir = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
397- let library_dir = out_dir. join ( format ! ( "duckdb-lib-{version}" ) ) ;
401+ let duckdb_dir = crate_dir. join ( build_type) . join ( "duckdb" ) ;
402+ // Cargo has changed OUT_DIR behaviour so for every branch and build we have
403+ // a different directory e.g.
404+ // ~/vortex/target/release/build/vortex-duckdb-b6bc1fb73230910e/out/duckdb-lib-v1.5.2
405+ // We don't want this since artifacts are the same.
406+ // We can't use CARGO_TARGET_DIR since it's out of tree.
407+ let library_dir = duckdb_dir. join ( format ! ( "duckdb-lib-{version}" ) ) ;
398408
399409 let library_dir_str = library_dir. display ( ) ;
400410 println ! ( "cargo:rustc-link-search=native={library_dir_str}" ) ;
@@ -415,7 +425,7 @@ fn main() {
415425 // Alternatively, set LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (macOS) at runtime.
416426 println ! ( "cargo:lib_dir={library_dir_str}" ) ;
417427
418- let source_dir = out_dir . join ( format ! ( "duckdb-source-{version}" ) ) ;
428+ let source_dir = duckdb_dir . join ( format ! ( "duckdb-source-{version}" ) ) ;
419429 let source_archive_url = match & version {
420430 DuckDBVersion :: Release ( v) => format ! ( "{DUCKDB_SOURCE_RELEASE_URL}/v{v}.zip" ) ,
421431 DuckDBVersion :: Commit ( c) => format ! ( "{DUCKDB_SOURCE_COMMIT_URL}/{c}.zip" ) ,
@@ -430,16 +440,6 @@ fn main() {
430440 extract ( & source_archive_path, & source_dir) ;
431441 }
432442
433- drop ( fs:: remove_file ( & duckdb_dir) ) ;
434- drop ( fs:: remove_dir_all ( & duckdb_dir) ) ;
435- symlink ( & source_dir, & duckdb_dir) . unwrap ( ) ;
436-
437- let has_debug_env =
438- env:: var ( "VX_DUCKDB_DEBUG" ) . is_ok_and ( |v| matches ! ( v. as_str( ) , "1" | "true" ) ) ;
439- let build_type = match has_debug_env {
440- true => "debug" ,
441- false => "release" ,
442- } ;
443443 println ! ( "cargo:info=building DuckDB in {build_type} mode" ) ;
444444
445445 if has_debug_env || matches ! ( version, DuckDBVersion :: Commit ( _) ) {
0 commit comments