# Makefile for rexx_gtk4.so  (pure C++ native API, ooRexx 5.x)
#
# Tested on: Linux Mint 22.3, ooRexx 5.1.0 (.deb install), GTK 4
#
# All source files live in the same directory as this Makefile:
#   rexx_gtk4_bridge.cpp
#   rexx_gtk4_bridge.h
#   gtk4.cls
#
# Prerequisites:
#   sudo apt install libgtk-4-dev g++ pkg-config
#   # Install ooRexx 5.1.0 .deb from sourceforge
#
# ooRexx 5.x .deb installs to /usr/local by default:
#   headers : /usr/local/include/oorexx/oorexxapi.h
#   library : /usr/local/lib/librexx.so
#
# Override OOREXX_PREFIX if yours differs:
#   make OOREXX_PREFIX=/opt/oorexx
#
# Build:         make
# Install:       sudo make install
# Local install: PREFIX=$HOME/.local make install
#                export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH

# ----------------------------------------------------------------
# ooRexx paths  (override on command line if needed)
# ----------------------------------------------------------------
OOREXX_PREFIX ?= /usr/local
OOREXX_INC    := $(OOREXX_PREFIX)/include
OOREXX_LIB    := $(OOREXX_PREFIX)/lib

# ----------------------------------------------------------------
# Compiler
# ----------------------------------------------------------------
CXX      := g++
CXXFLAGS := -O2 -Wall -Wextra -fPIC -std=c++17

INCLUDES := -I. \
            -I$(OOREXX_INC) \
            $(shell pkg-config --cflags gtk4)

LDFLAGS  := $(shell pkg-config --libs gtk4) \
            -L$(OOREXX_LIB) -lrexx \
            -Wl,-rpath,$(OOREXX_LIB)

# ----------------------------------------------------------------
# Targets  — all files are flat in the project directory
# ----------------------------------------------------------------
LIB_NAME := rexx_gtk4
LIB_SO   := lib$(LIB_NAME).so
SRC      := rexx_gtk4_bridge.cpp
OBJ      := rexx_gtk4_bridge.o

PREFIX   ?= /usr/local
LIBDIR   := $(PREFIX)/lib
CLSDIR   := $(PREFIX)/share/oorexx

.PHONY: all clean install uninstall check-deps show-config

all: check-deps $(LIB_SO)

check-deps:
	@echo "==> Checking dependencies..."
	@test -f $(OOREXX_INC)/oorexxapi.h || \
	    { echo "ERROR: $(OOREXX_INC)/oorexxapi.h not found."; \
	      echo "       Set OOREXX_PREFIX=<path> on the make command line."; \
	      exit 1; }
	@pkg-config --exists "gtk4 >= 4.12" || \
	    { echo "ERROR: gtk4 not found via pkg-config."; \
	      echo "       Run: sudo apt install libgtk-4-dev"; \
	      exit 1; }
	@echo "    oorexxapi.h : $(OOREXX_INC)/oorexxapi.h  OK"
	@echo "    gtk4        : $(shell pkg-config --modversion gtk4)  OK"

$(LIB_SO): $(OBJ)
	$(CXX) -shared -o $@ $^ $(LDFLAGS)
	@echo "==> Built $@"

$(OBJ): $(SRC) rexx_gtk4_bridge.h
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $(SRC) -o $(OBJ)

install: $(LIB_SO)
	install -Dm755 $(LIB_SO) $(LIBDIR)/$(LIB_SO)
	install -Dm644 gtk4.cls   $(CLSDIR)/gtk4.cls
	ldconfig
	@echo "==> Installed $(LIB_SO) → $(LIBDIR)"
	@echo "==> Installed gtk4.cls  → $(CLSDIR)"

uninstall:
	rm -f $(LIBDIR)/$(LIB_SO)
	rm -f $(CLSDIR)/gtk4.cls
	ldconfig

clean:
	rm -f $(OBJ) $(LIB_SO)

show-config:
	@echo "OOREXX_PREFIX : $(OOREXX_PREFIX)"
	@echo "OOREXX_INC    : $(OOREXX_INC)"
	@echo "OOREXX_LIB    : $(OOREXX_LIB)"
	@echo "INCLUDES      : $(INCLUDES)"
	@echo "LDFLAGS       : $(LDFLAGS)"
	@echo "PREFIX        : $(PREFIX)"
	@echo "LIBDIR        : $(LIBDIR)"
	@echo "CLSDIR        : $(CLSDIR)"
