# oracle_strcrypt - Oracle extproc 메모리 안전 래퍼 빌드
#
# 빌드 요구사항:
#   - ORACLE_HOME 환경변수 설정
#   - Oracle Database 또는 Instant Client SDK (oci.h 포함)
#   - libstrcrypt.so 빌드 완료 (cargo build --release)
#
# 사용법:
#   ORACLE_HOME=/path/to/oracle make          # 빌드
#   ORACLE_HOME=/path/to/oracle make install  # Oracle lib에 설치
#   make clean                                # 정리
#
# OCI 헤더 탐색 순서:
#   $ORACLE_HOME/rdbms/public  (Oracle Database)
#   $ORACLE_HOME/sdk/include   (Instant Client SDK)
#   $ORACLE_HOME/include

# 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 -Werror=return-type -O2 -fPIC -shared
CFLAGS += -I$(STRCRYPT_INCLUDE_DIR)

# ORACLE_HOME 필수 확인
ifndef ORACLE_HOME
$(error ORACLE_HOME is not set. Set it to your Oracle installation directory.)
endif

# OCI 헤더 경로 자동 탐지
OCI_INCLUDE := $(firstword \
    $(foreach d, \
        $(ORACLE_HOME)/rdbms/public \
        $(ORACLE_HOME)/sdk/include \
        $(ORACLE_HOME)/include, \
        $(if $(wildcard $(d)/oci.h),$(d))))

ifeq ($(OCI_INCLUDE),)
$(error oci.h not found under ORACLE_HOME=$(ORACLE_HOME). Install Oracle DB or Instant Client SDK.)
endif

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

TARGET = liboracle_strcrypt.so

.PHONY: all clean install check-strcrypt

all: check-strcrypt $(TARGET)

$(TARGET): oracle_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

install: $(TARGET)
	cp $(TARGET) $(ORACLE_HOME)/lib/
	chmod 755 $(ORACLE_HOME)/lib/$(TARGET)
	@echo "Installed $(TARGET) to $(ORACLE_HOME)/lib/"
	@echo ""
	@echo "Next: sqlplus sys/password@orcl as sysdba @install.sql"

clean:
	rm -f $(TARGET)
