@@ -627,6 +627,35 @@ fn cbindgen_rust2c(crate_dir: &Path) {
627627 }
628628}
629629
630+ fn git ( crate_dir : & Path , args : & [ & str ] ) -> Option < String > {
631+ let output = Command :: new ( "git" )
632+ . arg ( "-C" )
633+ . arg ( crate_dir)
634+ . args ( args)
635+ . output ( )
636+ . ok ( ) ?;
637+ if !output. status . success ( ) {
638+ return None ;
639+ }
640+ let stdout = String :: from_utf8 ( output. stdout ) . ok ( ) ?;
641+ let stdout = stdout. trim ( ) ;
642+ ( !stdout. is_empty ( ) ) . then ( || stdout. to_owned ( ) )
643+ }
644+
645+ fn vortex_version ( crate_dir : & Path ) {
646+ println ! ( "cargo:rerun-if-env-changed=VORTEX_VERSION" ) ;
647+ let version = env:: var ( "VORTEX_VERSION" )
648+ . ok ( )
649+ . filter ( |version| !version. is_empty ( ) )
650+ // If this commit belongs to a tag
651+ . or_else ( || git ( crate_dir, & [ "describe" , "--tags" , "--exact-match" , "HEAD" ] ) )
652+ // If this commit doesn't belong to a tag
653+ . or_else ( || git ( crate_dir, & [ "rev-parse" , "HEAD" ] ) )
654+ // No version, can't build
655+ . unwrap ( ) ;
656+ println ! ( "cargo:rustc-env=VORTEX_VERSION={version}" ) ;
657+ }
658+
630659fn main ( ) {
631660 println ! ( "cargo:rerun-if-changed=cpp/include" ) ;
632661 println ! ( "cargo:rerun-if-changed=patches" ) ;
@@ -653,6 +682,7 @@ fn main() {
653682 // in vortex's CI.
654683
655684 let crate_dir = PathBuf :: from ( env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ;
685+ vortex_version ( & crate_dir) ;
656686 if let Some ( source_dir) = env:: var_os ( "DUCKDB_SOURCE_DIR" ) {
657687 let source_dir = PathBuf :: from ( source_dir) ;
658688 let duckdb_include_dir = source_dir. join ( "src" ) . join ( "include" ) ;
0 commit comments