this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fixx

+80 -13
+80 -13
.tangled/workflows/build.yml
··· 137 137 echo "=== Creating virtualenv ===" 138 138 python3 -m venv .venv 139 139 140 - # psycopg_c needs pg_config to find PostgreSQL headers/libs at build 141 - # time. In a Nixery container the binary exists in the Nix store but 142 - # the build subprocess may not find it unless we set PG_CONFIG and 143 - # tell the C compiler where headers and libraries live (mirrors the 144 - # PG_CONFIG / LDFLAGS / CPPFLAGS set in flake.nix devShell). 140 + # ----------------------------------------------------------------- 141 + # psycopg_c build fix 142 + # 143 + # psycopg_c's setup.py runs `pg_config` as a bare command via 144 + # subprocess. pip's build-isolation spawns a child process that 145 + # inherits PATH, but in a Nixery container: 146 + # 1. pg_config lives deep in /nix/store/…/bin/ 147 + # 2. The Nix profile PATH entry might not survive pip's venv 148 + # activation or build-env overlay 149 + # 3. /usr/bin and /usr/local/bin may not even exist 150 + # 151 + # Strategy: find pg_config, then make it reachable by EVERY 152 + # conceivable PATH lookup — symlinks, PATH prepend, pip config, 153 + # and global env. 154 + # ----------------------------------------------------------------- 145 155 echo "=== Configuring PostgreSQL build flags ===" 146 - PG_CONFIG_BIN="$(which pg_config 2>/dev/null || true)" 156 + 157 + # --- Locate pg_config --- 158 + PG_CONFIG_BIN="" 159 + 160 + # Try 1: already on PATH 161 + PG_CONFIG_BIN="$(command -v pg_config 2>/dev/null || true)" 162 + 163 + # Try 2: common Nix profile location 164 + if [ -z "$PG_CONFIG_BIN" ]; then 165 + for p in /nix/var/nix/profiles/default/bin/pg_config \ 166 + /run/current-system/sw/bin/pg_config \ 167 + ~/.nix-profile/bin/pg_config; do 168 + if [ -x "$p" ]; then PG_CONFIG_BIN="$p"; break; fi 169 + done 170 + fi 171 + 172 + # Try 3: brute-force search the Nix store 147 173 if [ -z "$PG_CONFIG_BIN" ]; then 148 - # Fallback: search the Nix store directly 149 - PG_CONFIG_BIN="$(find /nix/store -maxdepth 3 -name pg_config -type f 2>/dev/null | head -1)" 174 + PG_CONFIG_BIN="$(find /nix/store -maxdepth 4 -name pg_config -type f -executable 2>/dev/null | head -1)" 150 175 fi 176 + 177 + echo " pg_config resolved to: ${PG_CONFIG_BIN:-NOT FOUND}" 178 + 151 179 if [ -n "$PG_CONFIG_BIN" ]; then 152 180 PG_INCLUDEDIR="$($PG_CONFIG_BIN --includedir)" 153 181 PG_LIBDIR="$($PG_CONFIG_BIN --libdir)" 182 + PG_BINDIR="$(dirname "$PG_CONFIG_BIN")" 183 + PG_SERVER_INCLUDEDIR="$($PG_CONFIG_BIN --includedir-server 2>/dev/null || echo "$PG_INCLUDEDIR")" 184 + 185 + # --- Symlink into well-known dirs (create them if missing) --- 186 + for d in /usr/local/bin /usr/bin; do 187 + mkdir -p "$d" 2>/dev/null || true 188 + ln -sf "$PG_CONFIG_BIN" "$d/pg_config" 2>/dev/null || true 189 + done 190 + 191 + # --- PATH: prepend pg_config's directory --- 192 + export PATH="${PG_BINDIR}:/usr/local/bin:${PATH}" 193 + 194 + # --- Compiler / linker flags --- 154 195 export PG_CONFIG="$PG_CONFIG_BIN" 155 196 export LDFLAGS="${LDFLAGS:-} -L${PG_LIBDIR}" 156 - export CPPFLAGS="${CPPFLAGS:-} -I${PG_INCLUDEDIR}" 157 - echo " PG_CONFIG = $PG_CONFIG" 158 - echo " LDFLAGS = $LDFLAGS" 159 - echo " CPPFLAGS = $CPPFLAGS" 197 + export CPPFLAGS="${CPPFLAGS:-} -I${PG_INCLUDEDIR} -I${PG_SERVER_INCLUDEDIR}" 198 + 199 + echo " PG_CONFIG = $PG_CONFIG" 200 + echo " PG_BINDIR = $PG_BINDIR" 201 + echo " PG_INCLUDEDIR = $PG_INCLUDEDIR" 202 + echo " PG_SERVER_INCLUDEDIR = $PG_SERVER_INCLUDEDIR" 203 + echo " PG_LIBDIR = $PG_LIBDIR" 204 + echo " LDFLAGS = $LDFLAGS" 205 + echo " CPPFLAGS = $CPPFLAGS" 206 + echo " PATH (first 3) = $(echo "$PATH" | tr ':' '\n' | head -3 | tr '\n' ':')" 207 + echo "" 208 + 209 + # --- Verify pg_config is globally callable --- 210 + echo " Smoke test (command -v): $(command -v pg_config 2>&1 || echo FAIL)" 211 + echo " Smoke test (/usr/bin): $(ls -l /usr/bin/pg_config 2>&1 || echo MISSING)" 212 + echo " Smoke test (version): $($PG_CONFIG_BIN --version)" 213 + 214 + # --- Verify a fresh subprocess can find it (mimics what pip does) --- 215 + echo " Subprocess check: $(env PATH="$PATH" pg_config --version 2>&1 || echo 'FAIL — pg_config not reachable from subprocess')" 216 + echo " /usr/local/bin check: $(/usr/local/bin/pg_config --version 2>&1 || echo 'MISSING')" 217 + echo " /usr/bin check: $(/usr/bin/pg_config --version 2>&1 || echo 'MISSING')" 160 218 else 161 - echo "WARNING: pg_config not found — psycopg_c build may fail" 219 + echo "ERROR: pg_config not found anywhere in the system!" 220 + echo " Nix store postgresql entries:" 221 + ls -d /nix/store/*postgresql* 2>/dev/null | head -10 || echo " (none)" 222 + echo "" 223 + echo " Full /nix/store bin search:" 224 + find /nix/store -maxdepth 4 -name 'pg_config' 2>/dev/null || echo " (none)" 225 + echo "" 226 + echo " Current PATH: $PATH" 227 + echo "" 228 + echo "psycopg_c build WILL fail. Continuing anyway..." 162 229 fi 163 230 164 231 echo "=== Installing production dependencies ==="