1 2# Build environment can be configured the following 3# environment variables: 4# CC : Specify the C compiler to use 5# CFLAGS : Specify compiler options to use 6# LDFLAGS : Specify linker options to use 7# CPPFLAGS : Specify c-preprocessor options to use 8 9# Extract version from libmseed.h, expected line should include LIBMSEED_VERSION "#.#.#" 10MAJOR_VER = $(shell grep LIBMSEED_VERSION libmseed.h | grep -Eo '[0-9]+.[0-9]+.[0-9]+' | cut -d . -f 1) 11FULL_VER = $(shell grep LIBMSEED_VERSION libmseed.h | grep -Eo '[0-9]+.[0-9]+.[0-9]+') 12COMPAT_VER = $(MAJOR_VER).0.0 13 14# Default settings for install target 15PREFIX ?= /usr/local 16EXEC_PREFIX ?= $(PREFIX) 17LIBDIR ?= $(EXEC_PREFIX)/lib 18INCLUDEDIR ?= $(PREFIX)/include 19DATAROOTDIR ?= $(PREFIX)/share 20DOCDIR ?= $(DATAROOTDIR)/doc/libmseed 21MANDIR ?= $(DATAROOTDIR)/man 22MAN3DIR ?= $(MANDIR)/man3 23 24LIB_SRCS = fileutils.c genutils.c gswap.c lmplatform.c lookup.c \ 25 msrutils.c pack.c packdata.c traceutils.c tracelist.c \ 26 parseutils.c unpack.c unpackdata.c selection.c logging.c 27 28LIB_OBJS = $(LIB_SRCS:.c=.o) 29LIB_DOBJS = $(LIB_SRCS:.c=.lo) 30 31LIB_A = libmseed.a 32LIB_SO_BASE = libmseed.so 33LIB_SO_NAME = $(LIB_SO_BASE).$(MAJOR_VER) 34LIB_SO = $(LIB_SO_BASE).$(FULL_VER) 35LIB_DYN_NAME = libmseed.dylib 36LIB_DYN = libmseed.$(FULL_VER).dylib 37LIB_FILES = Blarg 38 39all: static 40 41static: $(LIB_A) 42 43# Build dynamic (.dylib) on macOS/Darwin, otherwise shared (.so) 44shared dynamic: 45ifeq ($(shell uname -s),Darwin) 46 $(MAKE) $(LIB_DYN) 47else 48 $(MAKE) $(LIB_SO) 49endif 50 51# Build static library 52$(LIB_A): $(LIB_OBJS) 53 @echo "Building static library $(LIB_A)" 54 $(RM) -f $(LIB_A) 55 $(AR) -crs $(LIB_A) $(LIB_OBJS) 56 57# Build shared library using GCC-style options 58$(LIB_SO): $(LIB_DOBJS) 59 @echo "Building shared library $(LIB_SO)" 60 $(RM) -f $(LIB_SO) $(LIB_SONAME) $(LIB_SO_BASE) 61 $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,--version-script=libmseed.map -Wl,-soname,$(LIB_SO_NAME) -o $(LIB_SO) $(LIB_DOBJS) 62 ln -s $(LIB_SO) $(LIB_SO_BASE) 63 ln -s $(LIB_SO) $(LIB_SO_NAME) 64 65# Build dynamic library (usually for macOS) 66$(LIB_DYN): $(LIB_DOBJS) 67 @echo "Building dynamic library $(LIB_DYN)" 68 $(RM) -f $(LIB_DYN) $(LIB_DYN_NAME) 69 $(CC) $(CFLAGS) -dynamiclib -compatibility_version $(COMPAT_VER) -current_version $(FULL_VER) -install_name $(LIB_DYN_NAME) -o $(LIB_DYN) $(LIB_DOBJS) 70 ln -sf $(LIB_DYN) $(LIB_DYN_NAME) 71 72test check: static FORCE 73 @$(MAKE) -C test test 74 75clean: 76 @$(RM) -f $(LIB_OBJS) $(LIB_DOBJS) $(LIB_A) $(LIB_SO) $(LIB_SO_NAME) $(LIB_SO_BASE) $(LIB_DYN) $(LIB_DYN_NAME) 77 @$(MAKE) -C test clean 78 @echo "All clean." 79 80install: shared 81 @echo "Installing into $(PREFIX)" 82 @mkdir -p $(DESTDIR)$(PREFIX)/include 83 @cp libmseed.h $(DESTDIR)$(PREFIX)/include 84 @mkdir -p $(DESTDIR)$(LIBDIR)/pkgconfig 85ifneq ("$(wildcard $(LIB_SO))","") 86 @cp -a $(LIB_SO_BASE) $(LIB_SO_NAME) $(LIB_SO) $(DESTDIR)$(LIBDIR) 87endif 88ifneq ("$(wildcard $(LIB_DYN))","") 89 @cp -a $(LIB_DYN_NAME) $(LIB_DYN) $(DESTDIR)$(LIBDIR) 90endif 91 @sed -e 's|@prefix@|$(PREFIX)|g' \ 92 -e 's|@exec_prefix@|$(EXEC_PREFIX)|g' \ 93 -e 's|@libdir@|$(LIBDIR)|g' \ 94 -e 's|@includedir@|$(PREFIX)/include|g' \ 95 -e 's|@PACKAGE_NAME@|libmseed|g' \ 96 -e 's|@PACKAGE_URL@|http://ds.iris.edu/ds/nodes/dmc/software/downloads/libmseed/|g' \ 97 -e 's|@VERSION@|$(FULL_VER)|g' \ 98 mseed.pc.in > $(DESTDIR)$(LIBDIR)/pkgconfig/mseed.pc 99 @mkdir -p $(DESTDIR)$(DOCDIR)/example 100 @cp -r example $(DESTDIR)$(DOCDIR)/ 101 @cp doc/libmseed-UsersGuide $(DESTDIR)$(DOCDIR)/ 102 @mkdir -p $(DESTDIR)$(MAN3DIR) 103 @cp -a doc/ms*.3 $(DESTDIR)$(MAN3DIR)/ 104 105.SUFFIXES: .c .o .lo 106 107# Standard object building 108.c.o: 109 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ 110 111# Standard object building for dynamic library components using -fPIC 112.c.lo: 113 $(CC) $(CPPFLAGS) $(CFLAGS) -fPIC -c $< -o $@ 114 115FORCE: 116