5
# I parse the version from the changelog. This version is generally something
6
# like 0.04-1 Here 0.04 is the main version and 1 is the debian package
7
# version. I only use the main version and strip leading 0s, so the above
9
VERSION := $(shell sed -n 's/.*(\([0-9\.]*[0-9]\).*).*/\1/; s/\.0*/./g; p; q;' Changes)
11
ifeq ($(strip $(VERSION)),)
12
$(error "Couldn't parse version from debian/changelog")
16
CC = gcc # otherwise, CC defaults to clang
17
SO_VERSION=$(API_VERSION).$(VERSION)
18
TARGET_SO_BARE = libdogleg.dylib
19
TARGET_SO_FULL = libdogleg.$(SO_VERSION).dylib
20
TARGET_SO_SONAME = libdogleg.$(API_VERSION).dylib
22
# osx doesn't have DT_NEEDED or something, so I specify these explicitly
23
LDLIBS += -lsuitesparseconfig -lamd -lcolamd -llapack -lblas
25
SO_VERSION=$(API_VERSION).$(VERSION)
26
TARGET_SO_BARE = libdogleg.so
27
TARGET_SO_FULL = $(TARGET_SO_BARE).$(SO_VERSION)
28
TARGET_SO_SONAME = $(TARGET_SO_BARE).$(API_VERSION)
29
LDFLAGS += -Wl,-soname -Wl,libdogleg.so.$(API_VERSION)
32
# Add my optimization flags if none already exist. These could exist if debian
34
OPTFLAGS := $(if $(filter -O%, $(CFLAGS)),,-O3 -ffast-math -mtune=core2)
36
FLAGS += -ggdb -Wall -Wextra -MMD $(OPTFLAGS) -I/usr/include/suitesparse
37
CFLAGS += $(FLAGS) --std=gnu99
42
LIB_TARGETS = libdogleg.a $(TARGET_SO_BARE) $(TARGET_SO_FULL) $(TARGET_SO_SONAME)
45
MAN_TARGET = libdogleg.$(MAN_SECTION)
47
ALL_TARGETS = $(LIB_TARGETS) $(MAN_TARGET)
54
$(TARGET_SO_FULL): dogleg-pic.o
55
$(CC) $(LDFLAGS) -shared $^ $(LDLIBS) -o $@
57
$(TARGET_SO_SONAME) $(TARGET_SO_BARE): $(TARGET_SO_FULL)
61
$(CC) $(CPPFLAGS) -fPIC $(CFLAGS) -c -o $@ $<
63
$(MAN_TARGET): README.pod
64
pod2man --center="libdogleg: Powell's dogleg method" --name=LIBDOGLEG --release="libdogleg $(VERSION)" --section=$(MAN_SECTION) $^ $@
67
sample: sample.o libdogleg.a
68
$(CC) $^ $(LDLIBS) -o $@
70
sample.o: CFLAGS += -I.
73
rm -f libdogleg.so* *.o *.a *.d $(ALL_TARGETS)