#!/bin/bash
set -e

# Destination path inside RPM (no subdirectory)
DEST_PATH="/export/compute/software/compilers/intel/i-174"
# Source path inside RPM (as extracted)
SRC_PATH="opt/intel/composer_xe_2013_sp1.3.174"

# Custom working and RPM build directories
REPACK_DIR="repack"
RPMBUILD_DIR="$REPACK_DIR/rpmbuild"
SPEC_DIR="$RPMBUILD_DIR/SPECS"
BUILDROOT_DIR="$REPACK_DIR/BUILDROOT"

mkdir -p "$REPACK_DIR" "$SPEC_DIR" "$BUILDROOT_DIR"

for rpm in "$@"; do
    echo "Processing $rpm..."
    rpm_name=$(basename "$rpm" .rpm)
    work_dir="$REPACK_DIR/$rpm_name"
    mkdir -p "$work_dir"

    # Extract RPM
    (cd "$work_dir" && rpm2cpio "$rpm" | cpio -idmv)

    # Move files directly to DEST_PATH in custom BUILDROOT
    buildroot_pkgroot="$BUILDROOT_DIR/$rpm_name"
    buildroot_dest="$buildroot_pkgroot$DEST_PATH"
    mkdir -p "$buildroot_dest"
    if [ -d "$work_dir/$SRC_PATH" ]; then
        # Remove the target directory if it exists, to prevent "File exists" error
        rm -rf "$buildroot_dest"
        mkdir -p "$buildroot_dest"
        echo "Moving contents of $work_dir/$SRC_PATH/ to $buildroot_dest/"
        mv "$work_dir/$SRC_PATH/"* "$buildroot_dest/"
        rmdir "$work_dir/$SRC_PATH"
    else
        echo "Warning: $SRC_PATH not found in $rpm"
        continue
    fi

    # Verify files are present
    echo "Verifying files in $buildroot_dest/:"
    ls -l "$buildroot_dest/" || {
        echo "ERROR: No files found in $buildroot_dest/"
        exit 1
    }

    # Create minimal spec file
    cat > "$SPEC_DIR/$rpm_name.spec" << EOF
Name:           $rpm_name
Version:        1.0
Release:        1%{?dist}
Summary:        Repackaged $rpm_name for custom path
License:        Proprietary
Group:          System Environment/Libraries
BuildArch:      x86_64

%description
Repackaged $rpm_name for installation to $DEST_PATH

%files
$DEST_PATH
EOF

    # Build RPM using absolute custom buildroot
    buildroot_abs=$(readlink -f "$buildroot_pkgroot")
    echo "Building RPM with --buildroot=$buildroot_abs"
    (cd "$RPMBUILD_DIR" && rpmbuild --define "_topdir $(pwd)/repack/rpmbuild" -bb --buildroot="$buildroot_abs" SPECS/$rpm_name.spec)

    # Output the new RPM location
    echo "Repackaged RPM is at: $RPMBUILD_DIR/RPMS/x86_64/$rpm_name-1.0-1*.rpm"
done

