################################################################################
# Makefile for Reforming Equilibrium Calculator
################################################################################
#
# Program: Methane/Methanol Steam Reforming Equilibrium Calculator
# Authors: Yashwanth Kutti Pochareddy & Claude AI
# Version: 2.0.4 (Corrected - Official Cantera Docs)
# Date: October 2025
# License: MIT / Academic Use
#
# USAGE - THE 4 STEPS:
#   Step 1: sudo make install_lib  - Install Cantera (20-30 min)
#   Step 2: make                    - Compile the program (30 sec)
#   Step 3: make test               - Run test suite (30 sec)
#   Step 4: sudo make install       - Install to /usr/local/bin (1 sec)
#
################################################################################

#-------------------------------------------------------------------------------
# COMPILER CONFIGURATION
#-------------------------------------------------------------------------------
CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2
CANTERA_FLAGS = $(shell pkg-config --cflags --libs cantera)

#-------------------------------------------------------------------------------
# INSTALLATION DIRECTORIES
#-------------------------------------------------------------------------------
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin

#-------------------------------------------------------------------------------
# PROGRAM NAMES AND FILES
#-------------------------------------------------------------------------------
PROGRAM = Reforming_delG_Min
MAIN_SRC = Reforming_delG_Min.cpp
TEST_SCRIPT = test_cases.sh

#-------------------------------------------------------------------------------
# PHONY TARGETS
#-------------------------------------------------------------------------------
.PHONY: all clean install uninstall test install_lib check_cantera help clean_cantera

#-------------------------------------------------------------------------------
# DEFAULT TARGET
#-------------------------------------------------------------------------------
all: check_cantera $(PROGRAM)
	@echo ""
	@echo "============================================"
	@echo "  Compilation Successful!"
	@echo "============================================"
	@echo "Created: $(PROGRAM)"
	@echo ""
	@echo "Next steps:"
	@echo "  1. Test: make test"
	@echo "  2. Install: sudo make install"
	@echo "  3. Or run directly: ./$(PROGRAM) --help"
	@echo "============================================"
	@echo ""

#-------------------------------------------------------------------------------
# COMPILE PROGRAM
#-------------------------------------------------------------------------------
$(PROGRAM): $(MAIN_SRC)
	@echo "Compiling $(PROGRAM)..."
	@echo "  Source: $(MAIN_SRC)"
	$(CXX) $(CXXFLAGS) $(MAIN_SRC) -o $(PROGRAM) $(CANTERA_FLAGS)
	@echo "  ✓ $(PROGRAM) compiled successfully!"
	@echo ""

#-------------------------------------------------------------------------------
# CHECK CANTERA INSTALLATION
#-------------------------------------------------------------------------------
check_cantera:
	@echo "Checking for Cantera installation..."
	pkg-config --exists cantera || \
		(echo ""; \
		 echo "============================================"; \
		 echo "  ERROR: Cantera not found!"; \
		 echo "============================================"; \
		 echo ""; \
		 echo "To install Cantera, run:"; \
		 echo "  sudo make install_lib"; \
		 echo ""; \
		 echo "Then try compiling again:"; \
		 echo "  make"; \
		 echo ""; \
		 echo "============================================"; \
		 echo ""; \
		 exit 1)
	@echo "  ✓ Cantera found: version $$(pkg-config --modversion cantera)"
	@echo ""

#-------------------------------------------------------------------------------
# INSTALL CANTERA FROM GITHUB SOURCE
# Based on official Cantera documentation:
# https://cantera.org/dev/develop/compiling/dependencies.html
#-------------------------------------------------------------------------------
install_lib:
	@echo ""
	@echo "============================================"
	@echo "  Building Cantera from GitHub Source"
	@echo "============================================"
	@echo ""
	@echo "This will:"
	@echo "  1. Install build dependencies"
	@echo "  2. Clone Cantera from GitHub"
	@echo "  3. Build Cantera (15-20 min)"
	@echo "  4. Install to /usr/local"
	@echo ""
	@echo "Total time: 20-30 minutes"
	@echo "Disk space: ~1GB"
	@echo ""
	@echo "============================================"
	@echo ""
	@echo "[Step 1/4] Installing build dependencies..."
	apt-get install -y liberror-perl
	apt-get update -qq
	apt-get install -y \
		g++ python3 scons python3-packaging git pkg-config \
		libboost-dev libhdf5-dev \
		libsundials-dev libeigen3-dev libyaml-cpp-dev libfmt-dev
	@echo "  ✓ Dependencies installed"
	@echo ""
	@echo "[Step 2/4] Cloning Cantera from GitHub..."
	if [ ! -d "cantera-src" ]; then \
		git clone --depth 1 --branch 3.1 https://github.com/Cantera/cantera.git cantera-src; \
	else \
		echo "  (Source already exists, skipping clone)"; \
	fi
	@echo "  ✓ Source downloaded"
	@echo ""
	@echo "[Step 3/4] Building Cantera (15-20 minutes)..."
	cd cantera-src && \
		scons build -j2 \
			prefix=/usr/local \
			extra_inc_dirs=/usr/include/hdf5/serial \
			extra_lib_dirs=/usr/lib/x86_64-linux-gnu/hdf5/serial \
			system_fmt=y \
			system_yamlcpp=y \
			system_eigen=y \
			system_sundials=n \
			optimize=yes \
			debug=no \
			python_package=n
	@echo "  ✓ Cantera built successfully"
	@echo ""
	@echo "[Step 4/4] Installing Cantera to /usr/local..."
	cd cantera-src && scons install
	/usr/sbin/ldconfig
	@echo "  ✓ Cantera installed"
	@echo ""
	@echo "============================================"
	@echo "  Installation Complete!"
	@echo "============================================"
	@echo ""
	@echo "Cantera version: $$(pkg-config --modversion cantera 2>/dev/null || echo 'installed')"
	@echo "Location: /usr/local"
	@echo ""
	@echo "Next step - compile your program:"
	@echo "  make"
	@echo ""
	@echo "============================================"
	@echo ""

#-------------------------------------------------------------------------------
# RUN TEST SUITE
#-------------------------------------------------------------------------------
test: $(PROGRAM)
	@echo ""
	@echo "============================================"
	@echo "  Running Test Suite"
	@echo "============================================"
	@echo ""
	chmod +x $(TEST_SCRIPT)
	./$(TEST_SCRIPT)
	@echo ""

#-------------------------------------------------------------------------------
# INSTALL PROGRAM SYSTEM-WIDE
#-------------------------------------------------------------------------------
install: $(PROGRAM)
	@echo ""
	@echo "============================================"
	@echo "  Installing Program System-Wide"
	@echo "============================================"
	@echo ""
	@echo "Installing to: $(BINDIR)"
	install -d $(BINDIR)
	install -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
	@echo "  ✓ $(PROGRAM) installed"
	@echo ""
	@echo "============================================"
	@echo "  Installation Complete!"
	@echo "============================================"
	@echo ""
	@echo "Program location: $(BINDIR)/$(PROGRAM)"
	@echo ""
	@echo "You can now run from anywhere:"
	@echo "  $(PROGRAM) --help"
	@echo "  $(PROGRAM) --CH4 1.0 --H2O 3.0 --temp 1073"
	@echo ""
	@echo "============================================"
	@echo ""

#-------------------------------------------------------------------------------
# INSTALL PROGRAM SYSTEM-WIDE
#-------------------------------------------------------------------------------
update: $(PROGRAM)
	@echo ""
	@echo "============================================"
	@echo "  Installing Program System-Wide"
	@echo "============================================"
	@echo ""
	@echo "Installing to: $(BINDIR)"
	install -d $(BINDIR)
	install -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
	@echo "  ✓ $(PROGRAM) installed"
	@echo ""
	@echo "============================================"
	@echo "  Installation Complete!"
	@echo "============================================"
	@echo ""
	@echo "Program location: $(BINDIR)/$(PROGRAM)"
	@echo ""
	@echo "You can now run from anywhere:"
	@echo "  $(PROGRAM) --help"
	@echo "  $(PROGRAM) --CH4 1.0 --H2O 3.0 --temp 1073"
	@echo ""
	@echo "============================================"
	@echo ""

#-------------------------------------------------------------------------------
# UNINSTALL PROGRAM
#-------------------------------------------------------------------------------
uninstall:
	@echo ""
	@echo "Removing $(PROGRAM) from system..."
	rm -f $(BINDIR)/$(PROGRAM)
	@echo "  ✓ $(PROGRAM) removed from $(BINDIR)"
	@echo ""

#-------------------------------------------------------------------------------
# CLEAN BUILD FILES
#-------------------------------------------------------------------------------
clean:
	@echo ""
	@echo "Cleaning build files..."
	rm -f $(PROGRAM)
	rm -f *.o
	rm -f results.csv
	rm -f test_output.txt
	@echo "  ✓ Build files removed"
	@echo ""
	@echo "To recompile: make"
	@echo ""

#-------------------------------------------------------------------------------
# CLEAN CANTERA SOURCE
#-------------------------------------------------------------------------------
clean_cantera:
	@echo ""
	@echo "Removing Cantera source directory..."
	rm -rf cantera-src
	@echo "  ✓ Cantera source removed"
	@echo ""
	@echo "To rebuild Cantera: sudo make install_lib"
	@echo ""

#-------------------------------------------------------------------------------
# HELP
#-------------------------------------------------------------------------------
help:
	@echo ""
	@echo "============================================"
	@echo "  Reforming Calculator - Makefile Help"
	@echo "============================================"
	@echo ""
	@echo "INSTALLATION (4 Steps):"
	@echo ""
	@echo "  Step 1: sudo make install_lib"
	@echo "          Builds Cantera from GitHub (20-30 min)"
	@echo ""
	@echo "  Step 2: make"
	@echo "          Compiles your program (30 sec)"
	@echo ""
	@echo "  Step 3: make test"
	@echo "          Tests the program (30 sec)"
	@echo ""
	@echo "  Step 4: sudo make install"
	@echo "          Installs system-wide (optional)"
	@echo ""
	@echo "============================================"
	@echo ""
	@echo "ALL AVAILABLE TARGETS:"
	@echo ""
	@echo "  make                 Compile program"
	@echo "  make install_lib     Build & install Cantera (needs sudo)"
	@echo "  make test            Run test suite"
	@echo "  make install         Install system-wide (needs sudo)"
	@echo "  make uninstall       Remove from system (needs sudo)"
	@echo "  make clean           Remove compiled files"
	@echo "  make clean_cantera   Remove Cantera source (needs sudo)"
	@echo "  make help            Show this help"
	@echo ""
	@echo "============================================"
	@echo ""

################################################################################
# END OF MAKEFILE
################################################################################
