star-gas

Load and structure gas data
git clone git://git.meso-star.fr/star-gas.git
Log | Files | Refs | README | LICENSE

Makefile (6548B)


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