#!/bin/bash set -e echo "==> Building libraries inside container and extracting to ./output..." # Create output directory mkdir -p output # Start container in background CONTAINER_NAME="pfextlib-build-$$" echo "==> Starting container: $CONTAINER_NAME" docker run -d --name "$CONTAINER_NAME" centos39-pfextlib:latest sleep infinity # Function to cleanup container on exit cleanup() { echo "==> Cleaning up container..." docker rm -f "$CONTAINER_NAME" 2>/dev/null || true } trap cleanup EXIT # Run builds inside container # Note: install may fail with error 2 (headers already exist), but libs are built successfully docker exec "$CONTAINER_NAME" bash -c ' echo "==> Building cppunit..." bash /usr/local/PFEXTLIB-1.2/build-cppunit.sh || echo "cppunit install failed (expected - libs are built)" echo "==> Building fftw..." bash /usr/local/PFEXTLIB-1.2/build-fftw.sh || echo "fftw build failed" echo "==> Building hdf5..." bash /usr/local/PFEXTLIB-1.2/build-hdf5.sh || echo "hdf5 build failed" echo "==> Building xerces-c..." bash /usr/local/PFEXTLIB-1.2/build-xerces.sh || echo "xerces build failed" ' # Copy compiled files from container echo "==> Copying compiled files from container to ./output..." # Copy cppunit mkdir -p output/cppunit/lib output/cppunit/bin output/cppunit/include docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/cppunit-1.10.2/src/cppunit/.libs/. output/cppunit/lib/ 2>/dev/null || true docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/cppunit-1.10.2/src/DllPlugInTester/.libs/DllPlugInTester output/cppunit/bin/ 2>/dev/null || true docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/cppunit-1.10.2/include/cppunit output/cppunit/include/ 2>/dev/null || true # Copy fftw mkdir -p output/fftw/lib output/fftw/include docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/fftw-3.0.1/.libs/. output/fftw/lib/ 2>/dev/null || true docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/fftw-3.0.1/api/fftw3.h output/fftw/include/ 2>/dev/null || true # Copy hdf5 mkdir -p output/hdf5/lib output/hdf5/include docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/hdf5-1.6.2/src/.libs/. output/hdf5/lib/ 2>/dev/null || true docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/hdf5-1.6.2/src/H5public.h output/hdf5/include/ 2>/dev/null || true # Copy xerces-c mkdir -p output/xerces/lib output/xerces/include docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/xerces-c-src2_1_0/lib/. output/xerces/lib/ 2>/dev/null || true docker cp "$CONTAINER_NAME":/usr/local/PFEXTLIB-1.2/xerces-c-src2_1_0/include/. output/xerces/include/ 2>/dev/null || true # Check library dependencies echo "" echo "==> Checking library dependencies..." echo "" echo "cppunit:" docker exec "$CONTAINER_NAME" ldd /usr/local/PFEXTLIB-1.2/cppunit-1.10.2/src/cppunit/.libs/libcppunit-1.10.so.2.0.0 || true echo "" echo "fftw:" docker exec "$CONTAINER_NAME" ldd /usr/local/PFEXTLIB-1.2/fftw-3.0.1/.libs/libfftw3.so.3.0.1 || true echo "" echo "hdf5:" docker exec "$CONTAINER_NAME" ldd /usr/local/PFEXTLIB-1.2/hdf5-1.6.2/src/.libs/libhdf5.so.0.0.0 || true echo "" echo "xerces-c:" docker exec "$CONTAINER_NAME" ldd /usr/local/PFEXTLIB-1.2/xerces-c-src2_1_0/lib/libxerces-c.so.21.0 || true echo "" echo "========================================" echo "Build complete! Libraries copied to ./output/" echo "========================================" echo "" echo "Directory structure:" ls -lR output/