htgop

Optical properties of a gas mixture
git clone git://git.meso-star.fr/htgop.git
Log | Files | Refs | README | LICENSE

Makefile (5512B)


      1 # Copyright (C) 2018-2021, 2023 |Méso|Star> (contact@meso-star.com)
      2 #
      3 # This program is free software: you can redistribute it and/or modify
      4 # it under the terms of the GNU General Public License as published by
      5 # the Free Software Foundation, either version 3 of the License, or
      6 # (at your option) any later version.
      7 #
      8 # This program is distributed in the hope that it will be useful,
      9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     11 # GNU General Public License for more details.
     12 #
     13 # You should have received a copy of the GNU General Public License
     14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     15 
     16 .POSIX:
     17 .SUFFIXES: # Clean up default inference rules
     18 
     19 include config.mk
     20 
     21 LIBNAME_STATIC = libhtgop.a
     22 LIBNAME_SHARED = libhtgop.so
     23 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     24 
     25 ################################################################################
     26 # Library building
     27 ################################################################################
     28 SRC = src/htgop.c
     29 OBJ = $(SRC:.c=.o)
     30 DEP = $(SRC:.c=.d)
     31 
     32 build_library: .config $(DEP)
     33 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     34 	$$(if [ -n "$(LIBNAME)" ]; then \
     35 	     echo "$(LIBNAME)"; \
     36 	   else \
     37 	     echo "$(LIBNAME_SHARED)"; \
     38 	   fi)
     39 
     40 $(DEP) $(OBJ): config.mk
     41 
     42 $(LIBNAME_SHARED): $(OBJ)
     43 	$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(RSYS_LIBS) -lm
     44 
     45 $(LIBNAME_STATIC): libhtgop.o
     46 	$(AR) -rc $@ $?
     47 	$(RANLIB) $@
     48 
     49 libhtgop.o: $(OBJ)
     50 	$(LD) -r $(OBJ) -o $@
     51 	$(OBJCOPY) $(OCPFLAGS) $@
     52 
     53 .config: config.mk
     54 	@if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then \
     55 	  echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi
     56 	@echo "config done" > $@
     57 
     58 .SUFFIXES: .c .d .o
     59 .c.d:
     60 	@$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     61 
     62 .c.o:
     63 	$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -DHTGOP_SHARED_BUILD -c $< -o $@
     64 
     65 ################################################################################
     66 # Installation
     67 ################################################################################
     68 pkg:
     69 	sed -e 's#@PREFIX@#$(PREFIX)#g'\
     70 	    -e 's#@VERSION@#$(VERSION)#g'\
     71 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     72 	    htgop.pc.in > htgop.pc
     73 
     74 htgop-local.pc: htgop.pc.in
     75 	sed -e '1d'\
     76 	    -e 's#^includedir=.*#includedir=./src/#'\
     77 	    -e 's#^libdir=.*#libdir=./#'\
     78 	    -e 's#@VERSION@#$(VERSION)#g'\
     79 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     80 	    htgop.pc.in > $@
     81 
     82 install: build_library pkg
     83 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME)
     84 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" htgop.pc
     85 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/high_tune/" src/htgop.h
     86 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/htgop" COPYING README.md
     87 
     88 uninstall:
     89 	rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)"
     90 	rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/htgop.pc"
     91 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/htgop/COPYING"
     92 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/htgop/README.md"
     93 	rm -f "$(DESTDIR)$(PREFIX)/include/high_tune/htgop.h"
     94 
     95 ################################################################################
     96 # Miscellaneous targets
     97 ################################################################################
     98 all: build_library build_tests
     99 
    100 clean: clean_test
    101 	rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME)
    102 	rm -f .config .test libhtgop.o htgop.pc htgop-local.pc
    103 
    104 distclean: clean
    105 	rm -f $(DEP) $(TEST_DEP)
    106 	rm -f etc/ecrad_opt_prop.txt
    107 
    108 lint:
    109 	shellcheck -o all make.sh
    110 
    111 ################################################################################
    112 # Tests
    113 ################################################################################
    114 TEST_SRC =\
    115  src/test_htgop.c\
    116  src/test_htgop_fetch_radiative_properties.c\
    117  src/test_htgop_get_radiative_properties_bounds.c\
    118  src/test_htgop_load.c\
    119  src/test_htgop_sample.c
    120 TEST_OBJ = $(TEST_SRC:.c=.o)
    121 TEST_DEP = $(TEST_SRC:.c=.d)
    122 TEST_FILE=etc/ecrad_opt_prop.txt
    123 
    124 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
    125 HTGOP_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags htgop-local.pc)
    126 HTGOP_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs htgop-local.pc)
    127 
    128 test: build_tests etc/ecrad_opt_prop.txt
    129 	@$(SHELL) make.sh check test_htgop
    130 	@$(SHELL) make.sh check test_htgop_fetch_radiative_properties "$(TEST_FILE)"
    131 	@$(SHELL) make.sh check test_htgop_get_radiative_properties_bounds "$(TEST_FILE)"
    132 	@$(SHELL) make.sh check test_htgop_load "$(TEST_FILE)"
    133 	@$(SHELL) make.sh check test_htgop_sample "$(TEST_FILE)"
    134 
    135 build_tests: build_library $(TEST_DEP) .test
    136 	@$(MAKE) -fMakefile -f.test $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) test_bin
    137 
    138 .test: Makefile make.sh
    139 	@$(SHELL) make.sh config_test $(TEST_SRC) > $@
    140 
    141 clean_test:
    142 	$(SHELL) make.sh clean_test $(TEST_SRC)
    143 
    144 $(TEST_DEP): config.mk htgop-local.pc
    145 	@$(CC) $(CFLAGS_EXE) $(HTGOP_CFLAGS) $(RSYS_CFLAGS) \
    146 	-MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    147 
    148 $(TEST_OBJ): config.mk htgop-local.pc
    149 	$(CC) $(CFLAGS_EXE) $(HTGOP_CFLAGS) $(RSYS_CFLAGS) -c $(@:.o=.c) -o $@
    150 
    151 test_htgop \
    152 test_htgop_fetch_radiative_properties \
    153 test_htgop_get_radiative_properties_bounds \
    154 test_htgop_load \
    155 test_htgop_sample \
    156 : config.mk htgop-local.pc $(LIBNAME)
    157 	$(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(HTGOP_LIBS) $(RSYS_LIBS) -lm
    158 
    159 # Touch the target to update its timestamp. Otherwise, the extracted file will
    160 # have a timestamp lower than its prerequisite, forcing its re-extraction.
    161 etc/ecrad_opt_prop.txt: etc.tgz
    162 	tar xzvf etc.tgz && touch $@