1212import argparse
1313import json
1414import logging
15+ import os
1516import re
1617import uuid
1718from datetime import datetime , timezone
2324
2425from common .utils import LOG , df_to_csv_file , get_py_pkg_version
2526from nixgraph .graph import NixDependencies
27+ from nixmeta .scanner import NixMetaScanner
2628from sbomnix .cdx import _drv_to_cdx_component , _drv_to_cdx_dependency , _vuln_to_cdx_vuln
27- from sbomnix .meta import Meta
2829from sbomnix .nix import Store , find_deriver
2930from vulnxscan .vulnscan import VulnScan
3031
@@ -62,7 +63,6 @@ def __init__(
6263 self .df_sbomdb = None
6364 self .df_sbomdb_outputs_exploded = None
6465 self .flakeref = flakeref
65- self .meta = None
6666 self .include_cpe = include_cpe
6767 self ._init_sbomdb (include_meta )
6868 self .include_vulns = include_vulns
@@ -128,11 +128,10 @@ def _init_sbomdb(self, include_meta):
128128
129129 def _sbomdb_join_meta (self ):
130130 """Join self.df_sbomdb with meta information"""
131- self .meta = Meta ()
132131 if self .flakeref :
133- df_meta = self .meta . get_nixpkgs_meta (self .flakeref )
132+ df_meta = self ._get_nixpkgs_meta (self .flakeref )
134133 else :
135- df_meta = self .meta . get_nixpkgs_meta ()
134+ df_meta = self ._get_nixpkgs_meta ()
136135 if df_meta is None or df_meta .empty :
137136 LOG .warning (
138137 "Failed reading nix meta information: "
@@ -150,6 +149,27 @@ def _sbomdb_join_meta(self):
150149 suffixes = ["" , "_meta" ],
151150 )
152151
152+ def _get_nixpkgs_meta (self , nixref = None ):
153+ """
154+ Return nixpkgs meta pinned in `nixref`. `nixref` can point to a
155+ nix store path or flake reference optionally with an output attribute.
156+ If all else fails, attempt to read the nix meta information from
157+ the nixpkgs store path specified in NIX_PATH environment variable.
158+ """
159+ scanner = NixMetaScanner ()
160+ scanner .scan (nixref )
161+ df = scanner .to_df ()
162+ # Fallback: try reading nix meta from nixpkgs referenced in NIX_PATH
163+ if (df is None or df .empty ) and "NIX_PATH" in os .environ :
164+ LOG .debug ("Reading nixpkgs path from NIX_PATH environment" )
165+ nix_path = os .environ ["NIX_PATH" ]
166+ m_nixpkgs = re .match (r".*nixpkgs=([^:\s]+)" , nix_path )
167+ if m_nixpkgs :
168+ nixpkgs_path = m_nixpkgs .group (1 )
169+ scanner .scan (nixpkgs_path )
170+ df = scanner .to_df ()
171+ return df
172+
153173 def _lookup_dependencies (self , drv , uid = "store_path" ):
154174 """
155175 Lookup the runtime and buildtime dependencies for `drv`.
0 commit comments