Packages

Implementation of the FDSN dataselect webservice for Epos-France seismological datacenter

Current section

Files

Jump to
Raw

Makefile

##
# exmseed
#
# @file
# @version 0.1
#
# Environment variables passed via elixir_make
# ERTS_INCLUDE_DIR
MIX_APP_PATH ?= $(realpath .)
TEMP ?= $(HOME)/.cache
MSEED_SO = $(PRIV_DIR)/exmseed.so
MSEED_VERSION ?= 3.5.4
MSEED_RELEASE ?= https://github.com/EarthScope/libmseed/archive/refs/tags/v$(MSEED_VERSION).tar.gz
MSEED_LIB_DIR = $(TEMP)/libmseed-$(MSEED_VERSION)
MSEED_LOCAL_ARCHIVE = $(TEMP)/libmseed-$(MSEED_VERSION).tar.gz
MSEED_LIB_DIR_FLAG = $(MSEED_LIB_DIR)/exmseed.ok
# Private config
PRIV_DIR = $(MIX_APP_PATH)/priv
EXMSEED_DIR = $(realpath c/exmseed)
EXMSEED_CACHE_SO = cache/libexmseed.so
EXMSEED_CACHE_LIB_DIR = cache/lib
EXMSEED_SO = $(PRIV_DIR)/libexmseed.so
EXMSEED_LIB_DIR = $(PRIV_DIR)/lib
CFLAGS = -I$(EXMSEED_DIR)/include -I$(MSEED_LIB_DIR) -I$(ERTS_INCLUDE_DIR) -fPIC -O3 -shared -std=c11
C_SRCS = $(wildcard $(EXMSEED_DIR)/src/*.c) $(wildcard $(EXMSEED_DIR)/include/*.h)
LDFLAGS = -L$(EXMSEED_CACHE_LIB_DIR) -lmseed -Wl,-rpath,'$$ORIGIN/lib' -Wl,-z,origin
# Test configuration
TEST_DIR = $(EXMSEED_DIR)/test
TEST_CFLAGS = -I$(EXMSEED_DIR)/include -I$(MSEED_LIB_DIR) -std=c11 -O0 -g -coverage
TEST_LDFLAGS = -L$(MSEED_LIB_DIR) -lmseed -Wl,-rpath,$(MSEED_LIB_DIR) -coverage
TEST_BIN = $(TEST_DIR)/exmseed_test
TEST_COVERAGE_DIR = $(MIX_APP_PATH)/cover/c
.PHONY: all clean clean_cache test-c test-c-coverage
$(EXMSEED_SO): $(EXMSEED_CACHE_SO)
@ mkdir -p $(PRIV_DIR)
cp -a $(abspath $(EXMSEED_CACHE_LIB_DIR)) $(EXMSEED_LIB_DIR) ; \
cp -a $(abspath $(EXMSEED_CACHE_SO)) $(EXMSEED_SO) ;
$(EXMSEED_CACHE_SO): $(MSEED_LIB_DIR_FLAG) $(C_SRCS)
@ mkdir -p cache/lib
cp $(MSEED_LIB_DIR)/libmseed.so* $(EXMSEED_CACHE_LIB_DIR)
$(CC) $(CFLAGS) $(wildcard $(EXMSEED_DIR)/src/*.c) $(LDFLAGS) -o $(EXMSEED_CACHE_SO)
$(POST_INSTALL)
# Téléchargement de la libmseed + décompilation et compilation en "shared"
$(MSEED_LIB_DIR_FLAG):
@echo "Fetching libmseed version 3.2.4"
mkdir -p $(MSEED_LIB_DIR) && \
wget -qO $(MSEED_LOCAL_ARCHIVE) $(MSEED_RELEASE) && \
tar -C $(TEMP) -xzf $(MSEED_LOCAL_ARCHIVE) && \
make -C $(MSEED_LIB_DIR) shared
touch $@
# Compile and run C unit tests
$(TEST_BIN): $(MSEED_LIB_DIR_FLAG) $(TEST_DIR)/test.c $(EXMSEED_DIR)/src/helpers.c
$(CC) $(TEST_CFLAGS) $(TEST_DIR)/test.c $(EXMSEED_DIR)/src/helpers.c $(TEST_LDFLAGS) -o $(TEST_BIN)
test-c: $(TEST_BIN)
$(TEST_BIN)
test-c-coverage: $(TEST_BIN)
@mkdir -p $(TEST_COVERAGE_DIR)
$(TEST_BIN)
# Generate coverage report for each source file.
# With multiple sources in one binary, gcc names the gcno files
# <binary>-<source_basename>.gcno, so gcov -o needs that pattern.
gcov $(TEST_DIR)/test.c -o $(TEST_BIN)-test
gcov $(EXMSEED_DIR)/src/helpers.c -o $(TEST_BIN)-helpers
# Move coverage data to cover directory
@mkdir -p $(TEST_COVERAGE_DIR)
mv *.gcov $(TEST_COVERAGE_DIR)/ 2>/dev/null; true
# Generate coverage info for CI (lcov text format)
lcov --capture --directory $(TEST_DIR) --output-file $(TEST_COVERAGE_DIR)/coverage.info > /dev/null; true
lcov --summary $(TEST_COVERAGE_DIR)/coverage.info; true
clean:
rm -rf $(EXMSEED_CACHE_SO)
rm -rf $(EXMSEED_CACHE_LIB_DIR)
rm -rf $(EXMSEED_SO)
rm -rf $(EXMSEED_LIB_DIR)
rm -rf $(MSEED_LIB_DIR)
rm -f $(TEST_BIN)
rm -f $(TEST_DIR)/*.gcda $(TEST_DIR)/*.gcno $(EXMSEED_DIR)/src/*.gcda $(EXMSEED_DIR)/src/*.gcno
rm -rf $(TEST_COVERAGE_DIR)
@echo "All clean"
# end