--- Makefile.orig 2012-04-12 03:37:14.000000000 +0900 +++ Makefile 2012-11-10 08:41:14.000000000 +0900 @@ -1,28 +1,67 @@ -CXX ?= g++ -CFLAGS = -Wall -Wconversion -O3 -fPIC -SHVER = 3 -OS = $(shell uname) -ifeq ($(OS),Darwin) - SHARED_LIB_FLAG = -dynamiclib -Wl,-install_name,libsvm.so.$(SHVER) -else - SHARED_LIB_FLAG = -shared -Wl,-soname,libsvm.so.$(SHVER) -endif +CC ?= clang +CXX ?= clang++ -# Uncomment the following lines to enable parallelization with OpenMP -# CFLAGS += -fopenmp -# SHARED_LIB_FLAG += -fopenmp +CPPFLAGS += +CFLAGS += +LDFLAGS += -L. +LIBS += -all: svm-train svm-predict svm-scale +VMAJOR := $(shell echo $(VERSION) | sed -rne 's/([0-9]*)\.[0-9].*/\1/p') +VMINOR := $(shell echo $(VERSION) | sed -rne 's/[0-9]\.([0-9]*)\..*/\1/p') +VPATCH := $(shell echo $(VERSION) | sed -rne 's/[0-9]*\.[0-9]*\.([0-9]*).*/\1/p') +SHVER = $(VMAJOR) -lib: svm.o - $(CXX) $(SHARED_LIB_FLAG) svm.o -o libsvm.so.$(SHVER) -svm-predict: svm-predict.c svm.o - $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm -svm-train: svm-train.c svm.o - $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm +DYLIBFILE = libsvm.$(VERSION).dylib + +LIB_LIBS += $(LIBS) +LIB_CFLAGS += $(CFLAGS) +LIB_LDFLAGS += $(LIBS) -fPIC + +EXE_CFLAGS += $(CFLAGS) +EXE_LDFLAGS += $(LDFLAGS) + +incdir ?= $(PREFIX)/include +bindir ?= $(PREFIX)/bin +libdir ?= $(PREFIX)/lib +incdest = $(DESTDIR)$(incdir) +bindest = $(DESTDIR)$(bindir) +libdest = $(DESTDIR)$(libdir) + +all: svm-train svm-predict svm-scale libsvm.a + +svm-predict: svm-predict.c $(DYLIBFILE) + $(CC) $(CPPFLAGS) $(EXE_CFLAGS) $(EXE_LDFLAGS) svm-predict.c -o $@ -lm -lsvm -lstdc++ + +svm-train: svm-train.c $(DYLIBFILE) + $(CC) $(CPPFLAGS) $(EXE_CFLAGS) $(EXE_LDFLAGS) svm-train.c -o $@ -lm -lsvm -lstdc++ + svm-scale: svm-scale.c - $(CXX) $(CFLAGS) svm-scale.c -o svm-scale -svm.o: svm.cpp svm.h - $(CXX) $(CFLAGS) -c svm.cpp + $(CC) $(CPPFLAGS) $(EXE_CFLAGS) $(EXE_LDFLAGS) svm-scale.c -o $@ + +$(DYLIBFILE): svm.cpp svm.h + $(CXX) $(CPPFLAGS) $(LIB_CFLAGS) $(LIB_LDFLAGS) -dynamiclib \ + -install_name $(libdir)/$@ \ + -current_version $(VERSION) \ + -compatibility_version $(SHVER).$(VMINOR) \ + -o $@ svm.cpp + rm -f libsvm.$(SHVER).dylib libsvm.dylib + ln -s $@ libsvm.$(SHVER).dylib + ln -s libsvm.$(SHVER).dylib libsvm.dylib + +libsvm.a: + $(CXX) $(CPPFLAGS) $(LIB_CFLAGS) -c -o svm.o svm.cpp + ar rc libsvm.a svm.o + ranlib -c libsvm.a + +install: all + $(INSTALL) -d $(bindest) $(libdest) + $(INSTALL) -m 755 svm-train svm-predict svm-scale $(bindest) + $(INSTALL) -m 644 libsvm.a $(libdest) + $(INSTALL) -m 644 $(DYLIBFILE) $(libdest) + $(INSTALL) -m 644 svm.h $(incdest) + cd $(libdest) && ln -s $(DYLIBFILE) libsvm.$(SHVER).dylib + cd $(libdest) && ln -s libsvm.$(SHVER).dylib libsvm.dylib + clean: - rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER) + rm -f *~ svm.o svm-train svm-predict svm-scale + rm -f *.a *.dylib