https://github.com/lingfeiwang/findr
Tip revision: 8aed971a7c0ade736eb764809f82728fb2fc72a8 authored by Lingfei Wang on 07 December 2023, 14:07:29 UTC
Updated doc.pdf
Updated doc.pdf
Tip revision: 8aed971
Makefile
FTYPEBITS=32
GTYPEBITS=8
LIB_NAME=findr
LIB_NAMEFULL="Fast Inference of Networks from Directed Regulations"
LIB_FNAME=lib$(LIB_NAME).so
AUTHOR="Lingfei Wang"
AUTHOR_EMAIL="Lingfei.Wang.github@outlook.com"
URL_LIB="https://github.com/lingfeiwang/findr"
URL_BIN="https://github.com/lingfeiwang/findr-bin"
URL_PYTHON="https://github.com/lingfeiwang/findr-python"
URL_R="https://github.com/lingfeiwang/findr-R"
URL_DOC="https://github.com/lingfeiwang/findr/blob/master/doc.pdf"
URL_LIB_REL="$(URL_LIB)/releases"
URL_BIN_REL="$(URL_BIN)/releases"
URL_R_REL="$(URL_R)/releases"
VERSION1=1
VERSION2=0
VERSION3=8
LICENSE=AGPL-3
LICENSE_FULL="GNU Affero General Public License, Version 3"
LICENSE_URL="https://www.gnu.org/licenses/agpl-3.0"
ifdef INCLUDE_MAKEFILE_BEFORE
#Input package info here
include $(INCLUDE_MAKEFILE_BEFORE)
endif
include Makefile.flags
ifndef LIB_FNAME
LIB_FNAME=lib
endif
ifndef PREFIX
PREFIX=/usr/local
endif
ifndef DIR_BUILD
DIR_BUILD=.
endif
ifndef DIR_SRC
DIR_SRC=.
endif
DIR_INSTALL_PREFIX=$(PREFIX)
DIR_INSTALL_LIB=$(DIR_INSTALL_PREFIX)/lib
DIR_INSTALL_INC0=$(DIR_INSTALL_PREFIX)/include
DIR_INSTALL_INC=$(DIR_INSTALL_INC0)/$(LIB_NAME)
CC=gcc
CFLAGSI=$(addprefix -I ,. $(R_INCLUDE_DIR) $(PREFIX)/include /usr/local/include)
F90C=gfortran
F90FLAGS=-fPIC -fdefault-real-8 -ffixed-form -O3
LD=gcc
#INSTALL=install
OPTFLAGS=-O3 -DNDEBUG=1 -DGSL_RANGE_CHECK_OFF=1 -DHAVE_INLINE=1
LIB_CONFIG=base/config_auto.h
LIB_C=$(wildcard $(DIR_SRC)/*/*.c) $(wildcard $(DIR_SRC)/*/*/*.c)
LIB_C_B=$(basename $(LIB_C))
LIB_F90=$(wildcard $(DIR_SRC)/*/*.f90) $(wildcard $(DIR_SRC)/*/*/*.f90)
LIB_F90_B=$(basename $(LIB_F90))
LIB_H=$(wildcard $(DIR_SRC)/*/*.h) $(wildcard $(DIR_SRC)/*/*/*.h) $(LIB_CONFIG)
LIB_H_B=$(basename $(LIB_H))
LIB_O_C=$(addsuffix .o,$(LIB_C_B))
LIB_O_F90=$(addsuffix .o,$(LIB_F90_B))
LIB_O=$(LIB_O_C) $(LIB_O_F90)
LIB_PRODUCT=$(LIB_O)
LIB_DPRODUCT=$(DIR_BUILD)/$(LIB_FNAME)
INC_DPRODUCT=$(LIB_CONFIG)
INC_INSTALL_FILES=$(LIB_H)
INC_INSTALL_DIRS=$(dir $(LIB_H))
LIB_UNINSTALL=$(addprefix $(DIR_INSTALL_LIB)/,$(notdir $(LIB_DPRODUCT)))
INC_UNINSTALL=$(DIR_INSTALL_INC)
PKGCONFIG=$(LIB_NAME).pc
PKGCONFIG_UNINSTALL=$(DIR_INSTALL_LIB)/pkgconfig/$(LIB_NAME).pc
.PHONY: all clean distclean install-lib install-inc install uninstall
all: $(LIB_DPRODUCT) $(PKGCONFIG)
$(PKGCONFIG):
@echo "prefix=$(DIR_INSTALL_PREFIX)" > $@
@echo "exec_prefix=$(DIR_INSTALL_PREFIX)" >> $@
@echo "libdir=$(DIR_INSTALL_LIB)" >> $@
@echo "includedir=$(DIR_INSTALL_INC0)" >> $@
@echo >> $@
@echo "Name: $(LIB_NAME)" >> $@
@echo "Description: Fast Inference of Networks from Directed Regulations" >> $@
@echo "Version: $(VERSION1).$(VERSION2).$(VERSION3)" >> $@
@echo "Libs: -L$(DIR_INSTALL_LIB) -l$(LIB_NAME) -lgsl" >> $@
@echo "Cflags: -I$(DIR_INSTALL_INC0)" >> $@
$(LIB_CONFIG):
@echo "#ifndef _HEADER_LIB_CONFIG_AUTO_H_" > $@
@echo "#define _HEADER_LIB_CONFIG_AUTO_H_" >> $@
@echo "#define FTYPEBITS $(FTYPEBITS)" >> $@
@echo "#define GTYPEBITS $(GTYPEBITS)" >> $@
@echo "#define LIB_NAME $(LIB_NAME)" >> $@
@echo "#define VERSION1 $(VERSION1)" >> $@
@echo "#define VERSION2 $(VERSION2)" >> $@
@echo "#define VERSION3 $(VERSION3)" >> $@
@if [ -n "$(DIR_SRC_GSL)" ]; then \
echo "#define LIBGSL_LOCAL $(LIBGSL_LOCAL)" >> $@; \
fi
@echo "#endif" >> $@
$(DIR_BUILD):
mkdir -p $@
$(LIB_O_C): $(LIB_CONFIG)
$(LIB_O_F90):
$(F90C) -o $@ -c $(F90FLAGS) $(addsuffix .f90,$(basename $@))
$(LIB_DPRODUCT): $(LIB_PRODUCT) $(DIR_BUILD)
$(LD) -o $@ $(LIB_PRODUCT) $(LDFLAGS)
clean:
$(RM) $(LIB_PRODUCT)
distclean: clean
$(RM) $(LIB_DPRODUCT) $(PKGCONFIG) $(LIB_CONFIG) Makefile.flags $(TMP_FILE)
install-lib: SHELL:=/bin/bash
install-lib: all
umask 0022 && mkdir -p $(DIR_INSTALL_LIB) && \
cp $(LIB_DPRODUCT) $(DIR_INSTALL_LIB)/ && \
chmod 0755 $(DIR_INSTALL_LIB)/$(notdir $(LIB_DPRODUCT)) && \
ldconfig $(DIR_INSTALL_LIB) || true
install-inc: SHELL:=/bin/bash
install-inc: $(LIB_CONFIG)
umask 0022 && mkdir -p $(DIR_INSTALL_INC) && \
for dname in $(INC_INSTALL_DIRS); do \
mkdir -p $(DIR_INSTALL_INC)/$$dname || exit 1; \
done
# Then Files
umask 0022 && for fname in $(INC_INSTALL_FILES); do \
cp $$fname $(DIR_INSTALL_INC)/$$fname || exit 1; \
chmod 0644 $(DIR_INSTALL_INC)/$$fname || exit 1; \
done
install-pkgconfig: $(PKGCONFIG)
umask 0022 && mkdir -p $(DIR_INSTALL_LIB)/pkgconfig && \
cp $< $(DIR_INSTALL_LIB)/pkgconfig/
chmod 0644 $(DIR_INSTALL_LIB)/pkgconfig/$(notdir $<)
install: install-lib install-inc install-pkgconfig
uninstall:
$(RM) -R $(LIB_UNINSTALL) $(INC_UNINSTALL) $(PKGCONFIG_UNINSTALL)
TMP_FILE=.tmp
Makefile.flags:
@echo "Testing gcc"
if ! $(CC) --version > /dev/null 2>&1; then echo "GCC not found. Please download the latest GCC or specify its location in CC variable in Makefile."; exit 1; fi
gver="$$($(CC) --version)"; \
t1=$$(echo "$$gver" | grep -io gcc); \
if ! [ -n "$$t1" ]; then echo "Invalid GCC version. Please download the latest GCC."; exit 1; fi
cflags="$(CFLAGS) $(CFLAGS_EXTRA) $(CFLAGSI) -fopenmp -ggdb -fPIC -Wall -Wextra -Wconversion -Wsign-conversion -Wundef -Wendif-labels -std=c99 -pedantic-errors $(OPTFLAGS)"; \
ldflags="$(LDFLAGS) $(LDFLAGS_EXTRA) -L $(PREFIX)/lib -L /usr/local/lib -L /usr/lib -fopenmp -lm -shared -lc"; \
echo "Testing test method"; \
if ! $(LD) $$ldflags -o $(TMP_FILE) > /dev/null 2>&1; then \
echo "Linking with default flags failed."; exit 1; fi; \
echo "Testing gfortran"; \
$(LD) $$ldflags -lgfortran -o $(TMP_FILE) > /dev/null 2>&1 && \
ldflags="$$ldflags -lgfortran"; \
echo "Testing local GSL" ; \
if [ -n "$(DIR_SRC_GSL)" ] ; then \
echo "Testing -Wl,--whole-archive" ; \
ldflags2="$(DIR_SRC_GSL)/.libs/libgsl.a $(DIR_SRC_GSL)/cblas/.libs/libgslcblas.a"; \
$(LD) $$ldflags "-Wl,--whole-archive $$ldflags2 -Wl,--no-whole-archive" --shared -o $(TMP_FILE) > /dev/null 2>&1 && \
ldflags2="-Wl,--whole-archive $$ldflags2 -Wl,--no-whole-archive"; \
if ! $(LD) $$ldflags $$ldflags2 --shared -o $(TMP_FILE) > /dev/null 2>&1; then \
echo "Can't link to embedded GSL with right flag." ; exit 1; fi; \
cflags="-I $(DIR_SRC_GSL) $$cflags" ; \
ldflags="$$ldflags $$ldflags2" ; \
else \
ldflags="$$ldflags -lgsl -lgslcblas"; \
if ! $(LD) $$ldflags --shared -o $(TMP_FILE) > /dev/null 2>&1; then \
echo "Link to installed GSL failed."; exit 1; fi; \
fi ; \
echo "Testing -Wl,--no-as-needed" ; \
$(LD) -Wl,--no-as-needed $$ldflags --shared -o $(TMP_FILE) > /dev/null 2>&1 && \
ldflags="-Wl,--no-as-needed $$ldflags"; \
echo "CFLAGS=$$cflags" > $@ && \
echo "LDFLAGS=$$ldflags" >> $@ && \
$(RM) $(TMP_FILE)
ifdef INCLUDE_MAKEFILE_AFTER
include $(INCLUDE_MAKEFILE_AFTER)
endif