# mysql_strcrypt - MySQL UDF for STRCrypt
#
# 빌드 요구사항:
#   - MySQL 개발 패키지 (mysql-devel 또는 libmysqlclient-dev)
#   - mysql_config이 PATH에 있어야 함
#   - libstrcrypt.so가 빌드되어 있어야 함
#
# 사용법:
#   make                    # 빌드
#   make install            # plugin 디렉토리에 복사 (sudo 필요)
#   make clean              # 정리

# STRCrypt 프로젝트 루트 (상대 경로)
# rpath 에 들어가므로 절대 경로로 둔다. 상대 경로는 DB 서버의 작업 디렉토리 기준으로 풀려 엉뚱한 libstrcrypt.so 를 로드할 수 있다.
STRCRYPT_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../..)
STRCRYPT_LIB_DIR = $(STRCRYPT_ROOT)/target/release
STRCRYPT_INCLUDE_DIR = ../include

CC = gcc
CFLAGS = -Wall -Wextra -O2 -fPIC -shared
CFLAGS += -I$(STRCRYPT_INCLUDE_DIR)
CFLAGS += $(shell mysql_config --include 2>/dev/null || mariadb_config --include 2>/dev/null)

LDFLAGS = -L$(STRCRYPT_LIB_DIR) -lstrcrypt
LDFLAGS += -Wl,-rpath,'$$ORIGIN' -Wl,-rpath,$(STRCRYPT_LIB_DIR)

PLUGIN_DIR = $(shell mysql_config --plugindir 2>/dev/null || mariadb_config --plugindir 2>/dev/null)

TARGET = mysql_strcrypt.so

.PHONY: all clean install check-strcrypt check-deps

all: check-strcrypt check-deps $(TARGET)

$(TARGET): mysql_strcrypt.c $(STRCRYPT_INCLUDE_DIR)/strcrypt.h
	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)

check-strcrypt:
	@if [ ! -f "$(STRCRYPT_LIB_DIR)/libstrcrypt.so" ]; then \
		echo "Error: libstrcrypt.so not found."; \
		echo "Run 'cargo build --release' in $(STRCRYPT_ROOT) first."; \
		exit 1; \
	fi

check-deps:
	@if ! command -v mysql_config >/dev/null 2>&1 && \
	    ! command -v mariadb_config >/dev/null 2>&1; then \
		echo "Error: mysql_config or mariadb_config not found."; \
		echo "Install mysql-devel or libmysqlclient-dev package."; \
		exit 1; \
	fi

install: $(TARGET)
	@if [ -z "$(PLUGIN_DIR)" ]; then \
		echo "Error: cannot determine MySQL plugin directory."; \
		exit 1; \
	fi
	cp $(TARGET) $(PLUGIN_DIR)/
	chmod 755 $(PLUGIN_DIR)/$(TARGET)
	@echo "Installed $(TARGET) to $(PLUGIN_DIR)/"
	@echo ""
	@echo "Next: mysql -u root -p < sql/install.sql"

clean:
	rm -f $(TARGET)
