#!/bin/bash # -*- coding: utf-8 -*- # Timestamp: "2025-09-26 22:46:00 (ywatanabe)" # File: ./paper/scripts/installation/check_requirements.sh ORIG_DIR="$(pwd)" THIS_DIR="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)" PROJECT_ROOT="$(cd $THIS_DIR/../../ && pwd)" GIT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" GRAY='\033[0;90m' GREEN='\033[0;32m' YELLOW='\033[0;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo_info() { echo -e "${GRAY}INFO: $1${NC}"; } echo_success() { echo -e "${GREEN}SUCC: $1${NC}"; } echo_warning() { echo -e "${YELLOW}WARN: $1${NC}"; } echo_error() { echo -e "${RED}ERRO: $1${NC}"; } echo_header() { echo_info "=== $1 ==="; } # --------------------------------------- echo echo_info "Checking SciTeX system requirements..." echo MISSING_REQUIREMENTS=0 # Check for required commands check_command() { local cmd=$1 local description=$2 local install_hint=$3 if command -v $cmd &> /dev/null; then echo_success "✓ $description ($cmd found)" else echo_error "✗ $description ($cmd not found)" if [ -n "$install_hint" ]; then echo_info " Install with: $install_hint" fi MISSING_REQUIREMENTS=$((MISSING_REQUIREMENTS + 1)) fi } # Essential requirements echo_info "Essential requirements:" check_command "bash" "Bash shell" "" check_command "yq" "YAML parser" "pip install yq or snap install yq" echo echo_info "Container runtime (need at least one):" APPTAINER_FOUND=0 SINGULARITY_FOUND=0 if command -v apptainer &> /dev/null; then echo_success "✓ Apptainer found" APPTAINER_FOUND=1 else echo_warning "○ Apptainer not found" fi if command -v singularity &> /dev/null; then echo_success "✓ Singularity found" SINGULARITY_FOUND=1 else echo_warning "○ Singularity not found" fi if [ $APPTAINER_FOUND -eq 0 ] && [ $SINGULARITY_FOUND -eq 0 ]; then echo_error "✗ No container runtime found (need Apptainer or Singularity)" echo_info " Install Apptainer: https://apptainer.org/docs/admin/main/installation.html" echo_info " Install Singularity: https://sylabs.io/guides/3.0/user-guide/installation.html" MISSING_REQUIREMENTS=$((MISSING_REQUIREMENTS + 1)) fi echo echo_info "Optional tools (will use containers if not found):" # Track optional tools separately check_optional_command() { local cmd=$1 local description=$2 local install_hint=$3 if command -v $cmd &> /dev/null; then echo_success "✓ $description ($cmd found)" else echo_warning "○ $description (will use container)" fi } check_optional_command "pdflatex" "LaTeX compiler" check_optional_command "bibtex" "BibTeX processor" check_optional_command "latexdiff" "LaTeX diff tool" check_optional_command "mmdc" "Mermaid diagram tool" check_optional_command "convert" "ImageMagick" echo echo_info "Python dependencies for bibliography tools:" # Check Python packages check_python_package() { local package=$1 local description=$2 local install_hint=$3 if python3 -c "import $package" &> /dev/null; then echo_success "✓ $description ($package)" else echo_warning "○ $description ($package not found)" if [ -n "$install_hint" ]; then echo_info " Install with: $install_hint" fi fi } check_python_package "bibtexparser" "BibTeX parser" "pip install bibtexparser" echo echo_info "Module system (for HPC):" if command -v module &> /dev/null; then echo_success "✓ Module system found" # Check for texlive module if module avail texlive &> /dev/null 2>&1; then echo_success " ✓ texlive module available" else echo_warning " ○ texlive module not available" fi else echo_warning "○ Module system not found (not required if using containers)" fi echo echo_info "Checking container availability..." CONTAINER_DIR="$PROJECT_ROOT/.cache/containers" if [ -f "$CONTAINER_DIR/texlive.sif" ]; then SIZE=$(du -h "$CONTAINER_DIR/texlive.sif" | cut -f1) echo_success "✓ TeXLive container exists ($SIZE)" else echo_warning "○ TeXLive container not found (will download on first use)" fi if [ -f "$CONTAINER_DIR/mermaid_container.sif" ]; then SIZE=$(du -h "$CONTAINER_DIR/mermaid_container.sif" | cut -f1) echo_success "✓ Mermaid container exists ($SIZE)" else echo_warning "○ Mermaid container not found (will download on first use)" fi echo if [ $MISSING_REQUIREMENTS -eq 0 ]; then echo_success "All essential requirements satisfied!" echo_info "Run './compile_manuscript' to compile your document" else echo_error "Missing $MISSING_REQUIREMENTS essential requirement(s)" echo_info "Please install missing requirements and try again" exit 1 fi # EOF