star-schiff

Library for estimating radiative properties
git clone git://git.meso-star.com/star-schiff.git
Log | Files | Refs | README | LICENSE

Makefile (6113B)


      1 # Copyright (C) 2015, 2016, 2026 Centre National de la Recherche Scientifique
      2 # Copyright (C) 2026 Clermont Auvergne INP
      3 # Copyright (C) 2026 Institut Mines Télécom Albi-Carmaux
      4 # Copyright (C) 2020, 2021, 2023, 2026 |Méso|Star> (contact@meso-star.com)
      5 # Copyright (C) 2026 Université de Lorraine
      6 # Copyright (C) 2026 Université de Toulouse
      7 #
      8 # This program is free software: you can redistribute it and/or modify
      9 # it under the terms of the GNU General Public License as published by
     10 # the Free Software Foundation, either version 3 of the License, or
     11 # (at your option) any later version.
     12 #
     13 # This program is distributed in the hope that it will be useful,
     14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     16 # GNU General Public License for more details.
     17 #
     18 # You should have received a copy of the GNU General Public License
     19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     20 
     21 .POSIX:
     22 .SUFFIXES: # Clean up default inference rules
     23 
     24 include config.mk
     25 
     26 LIBNAME_STATIC = libsschiff.a
     27 LIBNAME_SHARED = libsschiff.so
     28 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     29 
     30 default: library
     31 all: default tests
     32 
     33 ################################################################################
     34 # Library
     35 ################################################################################
     36 SRC =\
     37  src/sschiff_device.c\
     38  src/sschiff_estimator.c\
     39  src/sschiff_scattering_angles_distributions.c
     40 OBJ = $(SRC:.c=.o)
     41 DEP = $(SRC:.c=.d)
     42 
     43 CFLAGS_LIB = $(CFLAGS_SO) $(INCS) -DSSCHIFF_SHARED_BUILD
     44 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS)
     45 
     46 library: .config $(DEP)
     47 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f "$${i}"; done) \
     48 	$$(if [ -n "$(LIBNAME)" ]; then \
     49 	     echo "$(LIBNAME)"; \
     50 	   else \
     51 	     echo "$(LIBNAME_SHARED)"; \
     52 	   fi)
     53 
     54 $(DEP) $(OBJ): config.mk
     55 
     56 $(LIBNAME_SHARED): $(OBJ)
     57 	$(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
     58 
     59 $(LIBNAME_STATIC): libsschiff.o
     60 	$(AR) -rc $@ $?
     61 	$(RANLIB) $@
     62 
     63 libsschiff.o: $(OBJ)
     64 	$(LD) -r $(OBJ) -o $@
     65 	$(OBJCOPY) $(OCPFLAGS) $@
     66 
     67 .config: Makefile config.mk
     68 	$(PKG_CONFIG) --atleast-version $(GSL_VERSION) gsl
     69 	$(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys
     70 	$(PKG_CONFIG) --atleast-version $(S3D_VERSION) s3d
     71 	$(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp
     72 	echo "config done" > $@
     73 
     74 .SUFFIXES: .c .d .o
     75 .c.d:
     76 	@$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     77 
     78 .c.o:
     79 	$(CC) $(CFLAGS_LIB) -c $< -o $@
     80 
     81 ################################################################################
     82 # Installation
     83 ################################################################################
     84 pkg:
     85 	sed -e 's#@PREFIX@#$(PREFIX)#g'\
     86 	    -e 's#@VERSION@#$(VERSION)#g'\
     87 	    -e 's#@GSL_VERSION@#$(GSL_VERSION)#g'\
     88 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     89 	    -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\
     90 	    -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\
     91 	    sschiff.pc.in > sschiff.pc
     92 
     93 sschiff-local.pc: sschiff.pc.in
     94 	sed -e '1d'\
     95 	    -e 's#^includedir=.*#includedir=./src/#'\
     96 	    -e 's#^libdir=.*#libdir=./#'\
     97 	    -e 's#@VERSION@#$(VERSION)#g'\
     98 	    -e 's#@GSL_VERSION@#$(GSL_VERSION)#g'\
     99 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
    100 	    -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\
    101 	    -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\
    102 	    sschiff.pc.in > $@
    103 
    104 install: library pkg
    105 	install() { mode="$$1"; prefix="$$2"; shift 2; \
    106 	  mkdir -p "$${prefix}"; \
    107 	  cp "$$@" "$${prefix}"; \
    108 	  printf '%s\n' "$${@}" | while read -r i; do \
    109 	    chmod "$${mode}" "$${prefix}/$${i##*/}"; \
    110 	  done; \
    111 	}; \
    112 	if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \
    113 	install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    114 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" sschiff.pc; \
    115 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/sschiff.h; \
    116 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-schiff" COPYING README.md
    117 
    118 uninstall:
    119 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
    120 	rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/sschiff.pc"
    121 	rm -f "$(DESTDIR)$(INCPREFIX)/star/sschiff.h"
    122 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-schiff/COPYING"
    123 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-schiff/README.md"
    124 
    125 clean: clean_test
    126 	rm -f $(OBJ) $(DEP) $(LIBNAME)
    127 	rm -f .config libsschiff.o sschiff.pc sschiff-local.pc
    128 
    129 ################################################################################
    130 # Tests
    131 ################################################################################
    132 TEST_SRC =\
    133  src/test_sschiff_device.c\
    134  src/test_sschiff_estimator_cylinder.c\
    135  src/test_sschiff_estimator_rhodo.c\
    136  src/test_sschiff_estimator_sphere.c
    137 TEST_OBJ = $(TEST_SRC:.c=.o)
    138 TEST_DEP = $(TEST_SRC:.c=.d)
    139 TEST_TGT = $(TEST_SRC:.c=.t)
    140 
    141 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
    142 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys s3d star-sp sschiff-local)
    143 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys s3d star-sp sschiff-local) -lm
    144 
    145 CFLAGS_TEST = $(CFLAGS_EXE) $(INCS_TEST)
    146 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
    147 
    148 tests: library $(TEST_DEP) $(TEST_TGT)
    149 	@$(MAKE) -fMakefile \
    150 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    151 	$$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
    152 	test_list
    153 
    154 $(TEST_TGT):
    155 	@{ \
    156 	  exe="$$(basename "$@" ".t")"; \
    157 	  printf '%s: %s\n' "$${exe}" $(@:.t=.o); \
    158 	  printf 'test_list: %s\n' "$${exe}"; \
    159 	} > $@
    160 
    161 $(TEST_DEP): config.mk sschiff-local.pc
    162 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    163 
    164 $(TEST_OBJ): config.mk sschiff-local.pc
    165 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    166 
    167 clean_test:
    168 	rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) mixture.txt
    169 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
    170 
    171 test_sschiff_device\
    172 test_sschiff_estimator_cylinder\
    173 test_sschiff_estimator_rhodo\
    174 test_sschiff_estimator_sphere\
    175 : config.mk sschiff-local.pc $(LIBNAME)
    176 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    177 
    178 test: tests
    179 	@err=0; \
    180 	for i in $(TEST_SRC); do \
    181 	  test="$$(basename "$${i}" ".c")"; \
    182 	  printf '%s' "$${test}"; \
    183 	  if "./$${test}" > /dev/null 2>&1; then \
    184 	    printf '\n'; \
    185 	  else \
    186 	    printf ': error %s\n' "$$?"; \
    187 	    err=$$((err+1)); \
    188 	  fi \
    189 	done; \
    190 	[ "$${err}" -eq 0 ]