htmie

Optical properties of water droplets
git clone git://git.meso-star.fr/htmie.git
Log | Files | Refs | README | LICENSE

Makefile (6243B)


      1 # Copyright (C) 2018, 2020-2023 |Méso|Star> (contact@meso-star.com)
      2 # Copyright (C) 2018 Centre National de la Recherche Scientifique
      3 # Copyright (C) 2018 Université Paul Sabatier
      4 #
      5 # This program is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation, either version 3 of the License, or
      8 # (at your option) any later version.
      9 #
     10 # This program is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     13 # GNU General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU General Public License
     16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     17 
     18 .POSIX:
     19 .SUFFIXES: # Clean up default inference rules
     20 
     21 include config.mk
     22 
     23 LIBNAME_STATIC = libhtmie.a
     24 LIBNAME_SHARED = libhtmie.so
     25 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     26 
     27 ################################################################################
     28 # Library building
     29 ################################################################################
     30 SRC = src/htmie.c
     31 OBJ = $(SRC:.c=.o)
     32 DEP = $(SRC:.c=.d)
     33 
     34 build_library: .config $(DEP)
     35 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     36 	$$(if [ -n "$(LIBNAME)" ]; then \
     37 	     echo "$(LIBNAME)"; \
     38 	   else \
     39 	     echo "$(LIBNAME_SHARED)"; \
     40 	   fi)
     41 
     42 $(DEP) $(OBJ): config.mk
     43 
     44 $(LIBNAME_SHARED): $(OBJ)
     45 	$(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(DPDC_LIBS)
     46 
     47 $(LIBNAME_STATIC): libhtmie.o
     48 	$(AR) -rc $@ $?
     49 	$(RANLIB) $@
     50 
     51 libhtmie.o: $(OBJ)
     52 	$(LD) -r $(OBJ) -o $@
     53 	$(OBJCOPY) $(OCPFLAGS) $@
     54 
     55 .config: config.mk
     56 	@if ! $(PKG_CONFIG) --atleast-version $(NETCDF_VERSION) netcdf; then \
     57 	  echo "netcdf $(NETCDF_VERSION) not found" >&2; exit 1; fi
     58 	@if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then \
     59 	  echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi
     60 	@echo "config done" > $@
     61 
     62 .SUFFIXES: .c .d .o
     63 .c.d:
     64 	@$(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     65 
     66 .c.o:
     67 	$(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -DHTMIE_SHARED_BUILD -c $< -o $@
     68 
     69 ################################################################################
     70 # Installation
     71 ################################################################################
     72 pkg:
     73 	sed -e 's#@PREFIX@#$(PREFIX)#g'\
     74 	    -e 's#@VERSION@#$(VERSION)#g'\
     75 	    -e 's#@NETCDF_VERSION@#$(NETCDF_VERSION)#g'\
     76 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     77 	    htmie.pc.in > htmie.pc
     78 
     79 htmie-local.pc: htmie.pc.in
     80 	sed -e '1d'\
     81 	    -e 's#^includedir=.*#includedir=./src/#'\
     82 	    -e 's#^libdir=.*#libdir=./#'\
     83 	    -e 's#@VERSION@#$(VERSION)#g'\
     84 	    -e 's#@NETCDF_VERSION@#$(NETCDF_VERSION)#g'\
     85 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     86 	    htmie.pc.in > $@
     87 
     88 install: build_library pkg
     89 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME)
     90 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" htmie.pc
     91 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/high_tune" src/htmie.h
     92 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/htmie" COPYING README.md
     93 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/man/man5" htmie.5
     94 
     95 uninstall:
     96 	rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)"
     97 	rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/htmie.pc"
     98 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/htmie/COPYING"
     99 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/htmie/README.md"
    100 	rm -f "$(DESTDIR)$(PREFIX)/include/high_tune/htmie.h"
    101 	rm -f "$(DESTDIR)$(PREFIX)/share/man/man5/htmie.5"
    102 
    103 ################################################################################
    104 # Miscellaneous targets
    105 ################################################################################
    106 all: build_library build_tests
    107 
    108 clean: clean_test
    109 	rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME)
    110 	rm -f .config .test libhtmie.o htmie.pc htmie-local.pc
    111 
    112 distclean: clean
    113 	rm -f $(DEP) $(TEST_DEP)
    114 
    115 lint:
    116 	shellcheck -o all make.sh
    117 	shellcheck -o all src/dump_netcdf_data.sh
    118 	mandoc -Tlint -Wall htmie.5 || [ $$? -le 1 ]
    119 
    120 ################################################################################
    121 # Tests
    122 ################################################################################
    123 TEST_SRC = src/test_htmie.c src/test_htmie_load.c
    124 TEST_OBJ = $(TEST_SRC:.c=.o)
    125 TEST_DEP = $(TEST_SRC:.c=.d)
    126 
    127 TEST_MIE_LUT = Mie_LUT_Cloud
    128 TEST_MIE_LUT_CDL = $(TEST_MIE_LUT).cdl
    129 TEST_MIE_LUT_NETCDF = $(TEST_MIE_LUT).nc
    130 TEST_MIE_LUT_VARS =\
    131  $(TEST_MIE_LUT).g\
    132  $(TEST_MIE_LUT).lambda\
    133  $(TEST_MIE_LUT).macs\
    134  $(TEST_MIE_LUT).mscs
    135 
    136 TEST_DUMMY = dummy
    137 TEST_DUMMY_CDL = $(TEST_DUMMY).cdl
    138 TEST_DUMMY_NETCDF = $(TEST_DUMMY).nc
    139 TEST_DUMMY_VARS =\
    140  $(TEST_DUMMY).g\
    141  $(TEST_DUMMY).lambda\
    142  $(TEST_DUMMY).macs\
    143  $(TEST_DUMMY).mscs
    144 
    145 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
    146 HTMIE_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags htmie-local.pc)
    147 HTMIE_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs htmie-local.pc)
    148 
    149 test: $(TEST_MIE_LUT_VARS) $(TEST_MIE_LUT_NETCDF)
    150 test: $(TEST_DUMMY_VARS) $(TEST_DUMMY_NETCDF)
    151 test: build_tests
    152 	@$(SHELL) make.sh check test_htmie test_htmie
    153 	@$(SHELL) make.sh check test_htmie_load_LUT test_htmie_load Mie_LUT_Cloud.nc .
    154 	@$(SHELL) make.sh check test_htmie_load_dummy test_htmie_load dummy.nc .
    155 
    156 .SUFFIXES: .cdl .nc .g .lambda .macs .mscs
    157 .cdl.nc:
    158 	ncgen -o $@ $<
    159 
    160 .nc.g .nc.lambda .nc.macs .nc.mscs:
    161 	$(SHELL) src/dump_netcdf_data.sh $$(p="$@"; echo "$${p##*.}") $< > $@
    162 
    163 build_tests: build_library $(TEST_DEP) .test $(TEST_MIE_LUT_VARS) $(TEST_DUMMY_VARS)
    164 	@$(MAKE) -fMakefile -f.test $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) test_bin
    165 
    166 .test: Makefile make.sh
    167 	@$(SHELL) make.sh config_test $(TEST_SRC) > $@
    168 
    169 clean_test:
    170 	$(SHELL) make.sh clean_test $(TEST_SRC)
    171 	rm -rf $(TEST_MIE_LUT_VARS) $(TEST_MIE_LUT_NETCDF)
    172 	rm -rf $(TEST_DUMMY_VARS) $(TEST_DUMMY_NETCDF)
    173 
    174 $(TEST_DEP): config.mk htmie-local.pc
    175 	@$(CC) $(CFLAGS_EXE) $(HTMIE_CFLAGS) $(RSYS_CFLAGS) \
    176 	-MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    177 
    178 $(TEST_OBJ): config.mk htmie-local.pc
    179 	$(CC) $(CFLAGS_EXE) $(HTMIE_CFLAGS) $(RSYS_CFLAGS) -c $(@:.o=.c) -o $@
    180 
    181 test_htmie test_htmie_load: config.mk htmie-local.pc $(LIBNAME)
    182 	$(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(HTMIE_LIBS) $(RSYS_LIBS) -lm