Skip to content

Commit 7c90858

Browse files
committed
Add comprehensive diagnostics for libpcp.h include path issue
Disable parallel make and add detailed state inspection before QA tests run to understand why dynamic PMDA build fails on macOS.
1 parent 0dba313 commit 7c90858

1 file changed

Lines changed: 91 additions & 15 deletions

File tree

.github/workflows/qa-macos.yml

Lines changed: 91 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -347,35 +347,110 @@ jobs:
347347
./exercise -? 2>&1 | head -3 && echo "✓ Rebuilt binary works!"
348348
fi
349349
350-
- name: Debug dynamic PMDA GNUmakefile
350+
- name: Debug testsuite state before QA
351351
run: |
352-
echo "=== Checking installed GNUmakefile for dynamic PMDA ==="
353-
echo ""
354-
echo "GNUmakefile location:"
355-
ls -la /var/lib/pcp/testsuite/pmdas/dynamic/GNUmakefile || echo "NOT FOUND!"
356-
357-
echo ""
358-
echo "GNUmakefile content (CFLAGS section):"
359-
sed -n '20,30p' /var/lib/pcp/testsuite/pmdas/dynamic/GNUmakefile
352+
echo "=========================================="
353+
echo "=== TESTSUITE STATE BEFORE QA TESTS ==="
354+
echo "=========================================="
360355
361356
echo ""
362-
echo "PCP environment from pcp.conf:"
357+
echo "=== 1. PCP Configuration ==="
363358
. /etc/pcp.conf
364359
echo "PCP_INC_DIR=$PCP_INC_DIR"
365360
echo "PCP_LIB_DIR=$PCP_LIB_DIR"
361+
echo "PCP_VAR_DIR=$PCP_VAR_DIR"
362+
echo "PCP_PLATFORM=$PCP_PLATFORM"
363+
364+
echo ""
365+
echo "=== 1b. Path Resolution Check (realpath) ==="
366+
echo "/usr/local -> $(realpath /usr/local 2>/dev/null || echo 'FAILED')"
367+
echo "/usr/local/include -> $(realpath /usr/local/include 2>/dev/null || echo 'FAILED')"
368+
echo "PCP_INC_DIR resolved -> $(realpath "$PCP_INC_DIR" 2>/dev/null || echo 'FAILED')"
369+
echo "Homebrew prefix: $(brew --prefix 2>/dev/null || echo 'not installed')"
370+
echo ""
371+
echo "Raw string comparison test:"
372+
echo " PCP_INC_DIR='$PCP_INC_DIR'"
373+
echo " Equals '/usr/include/pcp'? $([ "$PCP_INC_DIR" = "/usr/include/pcp" ] && echo YES || echo NO)"
374+
echo " Equals '/usr/local/include/pcp'? $([ "$PCP_INC_DIR" = "/usr/local/include/pcp" ] && echo YES || echo NO)"
366375
367376
echo ""
368-
echo "Checking if libpcp.h exists at expected location:"
369-
ls -la "$PCP_INC_DIR/libpcp.h" 2>&1 || echo "NOT FOUND at $PCP_INC_DIR/libpcp.h"
370-
ls -la "$PCP_INC_DIR/../libpcp.h" 2>&1 || echo "NOT FOUND at $PCP_INC_DIR/../libpcp.h"
377+
echo "=== 2. Check for libpcp.h in ALL locations ==="
378+
echo "Installed include dir:"
379+
ls -la "$PCP_INC_DIR/libpcp.h" 2>&1 || echo " NOT FOUND"
380+
echo "Parent include dir:"
381+
ls -la "$PCP_INC_DIR/../libpcp.h" 2>&1 || echo " NOT FOUND"
382+
echo "Testsuite src dir:"
383+
ls -la /var/lib/pcp/testsuite/src/libpcp.h 2>&1 || echo " NOT FOUND"
371384
372385
echo ""
373-
echo "Checking builddefs location:"
374-
ls -la "$PCP_INC_DIR/builddefs" 2>&1 || echo "NOT FOUND at $PCP_INC_DIR/builddefs"
386+
echo "=== 3. Check pmdadynamic binary state ==="
387+
DYNAMIC_DIR="/var/lib/pcp/testsuite/pmdas/dynamic"
388+
echo "Directory contents:"
389+
ls -la "$DYNAMIC_DIR/" | head -20
390+
echo ""
391+
echo "Binary exists and executable?"
392+
if [ -x "$DYNAMIC_DIR/pmdadynamic" ]; then
393+
echo " YES - pmdadynamic is executable"
394+
echo " Timestamp: $(stat -f '%Sm' "$DYNAMIC_DIR/pmdadynamic")"
395+
echo " Size: $(stat -f '%z' "$DYNAMIC_DIR/pmdadynamic") bytes"
396+
else
397+
echo " NO - pmdadynamic missing or not executable"
398+
fi
399+
echo ""
400+
echo "Source file timestamp:"
401+
stat -f '%Sm' "$DYNAMIC_DIR/dynamic.c" 2>&1 || echo " dynamic.c not found"
402+
403+
echo ""
404+
echo "=== 4. Check GNUmakefile in pmdas/dynamic ==="
405+
echo "CFLAGS section (lines 20-35):"
406+
sed -n '20,35p' "$DYNAMIC_DIR/GNUmakefile"
407+
408+
echo ""
409+
echo "=== 5. Check localconfig existence ==="
410+
TESTSUITE="/var/lib/pcp/testsuite"
411+
if [ -f "$TESTSUITE/localconfig" ]; then
412+
echo "localconfig EXISTS - contents:"
413+
cat "$TESTSUITE/localconfig"
414+
else
415+
echo "localconfig DOES NOT EXIST - make setup will run"
416+
fi
417+
418+
echo ""
419+
echo "=== 6. Test include path resolution ==="
420+
cd "$DYNAMIC_DIR"
421+
echo "From $PWD:"
422+
echo " ../../src resolves to: $(cd ../../src 2>/dev/null && pwd || echo 'DOES NOT EXIST')"
423+
echo " Contents of ../../src (if exists):"
424+
ls ../../src/*.h 2>/dev/null | head -5 || echo " No .h files or dir doesn't exist"
425+
426+
echo ""
427+
echo "=== 7. Dry-run make to see what would happen ==="
428+
cd "$TESTSUITE"
429+
echo "Running: make -n setup (dry run)"
430+
sudo -u pcpqa make -n setup 2>&1 | head -50 || echo "make -n failed"
431+
432+
echo ""
433+
echo "=== 8. Check MAKEFLAGS environment ==="
434+
echo "MAKEFLAGS=${MAKEFLAGS:-'(not set)'}"
375435
376436
- name: Run QA sanity tests
437+
env:
438+
MAKEFLAGS: "" # Force serial make - no parallelism
377439
run: |
378440
cd /var/lib/pcp/testsuite
441+
442+
# If localconfig doesn't exist, make setup will run
443+
# Capture its output explicitly
444+
if [ ! -f localconfig ]; then
445+
echo "=== localconfig missing, running make setup explicitly ==="
446+
sudo -u pcpqa make setup 2>&1 | tee /tmp/make-setup.log || {
447+
echo ""
448+
echo "=== MAKE SETUP FAILED ==="
449+
echo "Full output saved to /tmp/make-setup.log"
450+
exit 1
451+
}
452+
fi
453+
379454
sudo -u pcpqa ./check -g sanity -x not_in_ci
380455
381456
- name: Upload QA logs
@@ -387,4 +462,5 @@ jobs:
387462
qa/*.bad
388463
qa/check.log
389464
/var/log/pcp/
465+
/tmp/make-setup.log
390466
retention-days: 7

0 commit comments

Comments
 (0)