diff --git a/Makefile b/Makefile index e07c26d..72f8b90 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,12 @@ vpath %.c src vpath %.h include src PREFIX ?= /usr/local -INSTALL_LIB_DIR = $(PREFIX)/lib +ifneq "$(findstring MINGW64,$(shell uname -s))" "" + INSTALL_LIB_DIR = $(PREFIX)/bin +else + INSTALL_LIB_DIR = $(PREFIX)/lib +endif +INSTALL_LINK_DIR = $(PREFIX)/lib INSTALL_INC_DIR = $(PREFIX)/include INSTALL_SHARE_DIR = $(PREFIX)/share/odpi @@ -44,6 +49,7 @@ SAMPLES_DIR = samples TESTS_DIR = test CC ?= gcc +AR ?= ar AWK ?= awk MAJOR_VERSION := $(shell $(AWK) '/define.*DPI_MAJOR_VERSION/ {print $$3}' \ @@ -67,11 +73,25 @@ ifeq ($(shell uname -s), Darwin) LIB_OUT_OPTS = -dynamiclib \ -install_name $(shell pwd)/$(LIB_DIR)/$(LIB_NAME) \ -o $(LIB_DIR)/$(FULL_LIB_NAME) +else + ifneq "$(findstring MINGW64,$(shell uname -s))" "" + LIB_NAME = libodpic.dll + LIB_OUT_OPTS = -o $(LIB_DIR)/$(FULL_LIB_NAME) + LIBS += -lmingw32 + LDFLAGS += -Wl,-soname,$(LIB_NAME).$(MAJOR_VERSION) -Wl,--out-implib=$(LIB_DIR)/$(LIB_NAME).a -Wl,--export-all-symbols + else + LIB_NAME = libodpic.so + LIB_OUT_OPTS = -o $(LIB_DIR)/$(FULL_LIB_NAME) + LDFLAGS += -Wl,-soname,$(LIB_NAME).$(MAJOR_VERSION) -Wl,--out-implib=$(LIB_DIR)/$(LIB_NAME).a -Wl,--export-all-symbols + endif +endif + +ifneq "$(findstring MINGW64,$(shell uname -s))" "" + LIB_SHARED = $(LIB_NAME).a else - LIB_NAME = libodpic.so - LIB_OUT_OPTS = -o $(LIB_DIR)/$(FULL_LIB_NAME) - LDFLAGS += -Wl,-soname,$(LIB_NAME).$(MAJOR_VERSION) + LIB_SHARED = libodpic.a endif +LIB_STATIC = libodpic_static.a SRCS = dpiConn.c dpiContext.c dpiData.c dpiEnv.c dpiError.c dpiGen.c \ dpiGlobal.c dpiLob.c dpiObject.c dpiObjectAttr.c dpiObjectType.c \ @@ -95,8 +115,9 @@ TESTS_TARGETS := $(TESTS_FILES:%=$(INSTALL_SHARE_DIR)/%) INSTALL_TESTS_SQL_DIR := $(INSTALL_SHARE_DIR)/$(TESTS_DIR)/sql INSTALL_TARGETS = $(INSTALL_INC_DIR)/dpi.h \ - $(INSTALL_LIB_DIR)/$(LIB_NAME) $(INSTALL_LIB_DIR)/$(FULL_LIB_NAME) \ - $(INSTALL_LIB_DIR)/$(VERSION_LIB_NAME) $(INSTALL_SHARE_DIR) + $(INSTALL_LIB_DIR)/$(LIB_NAME) $(INSTALL_LIB_DIR)/$(FULL_LIB_NAME) \ + $(INSTALL_LIB_DIR)/$(VERSION_LIB_NAME) $(INSTALL_SHARE_DIR) \ + $(INSTALL_LINK_DIR)/$(LIB_SHARED) $(INSTALL_LINK_DIR)/$(LIB_STATIC) all: $(LIB_DIR)/$(FULL_LIB_NAME) $(LIB_DIR)/$(VERSION_LIB_NAME) \ $(LIB_DIR)/$(LIB_NAME) @@ -113,6 +134,9 @@ $(LIB_DIR): $(BUILD_DIR)/%.o: %.c dpi.h dpiImpl.h dpiErrorMessages.h $(CC) -c $(INCLUDES) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ +$(LIB_DIR)/$(LIB_STATIC): + $(AR) rs $(LIB_DIR)/$(LIB_STATIC) $(OBJS) + $(LIB_DIR)/$(FULL_LIB_NAME): $(BUILD_DIR) $(LIB_DIR) $(OBJS) $(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LIB_OUT_OPTS) $(OBJS) $(LIBS) @@ -125,6 +149,12 @@ $(LIB_DIR)/$(LIB_NAME): $(LIB_DIR)/$(VERSION_LIB_NAME) $(INSTALL_LIB_DIR): mkdir -p $@ +$(INSTALL_LINK_DIR): + mkdir -p $@ + +$(INSTALL_SHARE_DIR): + mkdir -p $@ + $(INSTALL_INC_DIR): mkdir -p $@ @@ -148,13 +178,19 @@ $(INSTALL_LIB_DIR)/$(VERSION_LIB_NAME): $(INSTALL_LIB_DIR)/$(FULL_LIB_NAME) $(INSTALL_LIB_DIR)/$(LIB_NAME): $(INSTALL_LIB_DIR)/$(VERSION_LIB_NAME) ln -sf $(VERSION_LIB_NAME) $@ +$(INSTALL_LINK_DIR)/$(LIB_STATIC): $(LIB_DIR)/$(LIB_STATIC) + $(INSTALL) $< $@ + +$(INSTALL_LINK_DIR)/$(LIB_SHARED): $(LIB_DIR)/$(LIB_SHARED) + $(INSTALL) $< $@ + $(INSTALL_SHARE_DIR)/%: % $(INSTALL) $< $@ -install: $(INSTALL_SAMPLES_SQL_DIR) $(INSTALL_TESTS_SQL_DIR) \ - $(INSTALL_INC_DIR) $(INSTALL_LIB_DIR) $(INSTALL_TARGETS) \ - $(INSTALL_SHARE_DIR)/README.md $(INSTALL_SHARE_DIR)/LICENSE.txt \ - $(SAMPLES_TARGETS) $(TESTS_TARGETS) +install: $(INSTALL_INC_DIR) $(INSTALL_LIB_DIR) $(INSTALL_LINK_DIR) $(INSTALL_TARGETS) \ + $(INSTALL_SHARE_DIR)/README.md $(INSTALL_SHARE_DIR)/LICENSE.txt + +document: $(INSTALL_SAMPLES_SQL_DIR) $(INSTALL_TESTS_SQL_DIR) $(SAMPLES_TARGETS) $(TESTS_TARGETS) uninstall: rm -rf $(INSTALL_TARGETS)