star-mesh

Define and load a binary data format for meshes
git clone git://git.meso-star.fr/star-mesh.git
Log | Files | Refs | README | LICENSE

Makefile (6922B)


      1 # Copyright (C) 2020-2023, 2025 |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: .b .c .d .o
     18 
     19 include config.mk
     20 
     21 LIBNAME_STATIC = libsmsh.a
     22 LIBNAME_SHARED = libsmsh.so
     23 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     24 
     25 default: library utils
     26 all: default tests
     27 
     28 ################################################################################
     29 # Library
     30 ################################################################################
     31 SRC = src/smsh.c src/smsh_log.c
     32 OBJ = $(SRC:.c=.o)
     33 DEP = $(SRC:.c=.d)
     34 
     35 CFLAGS_LIB = -std=c89 $(CFLAGS_SO) $(INCS) -DSMSH_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 $(DEP) $(OBJ): config.mk
     47 
     48 $(LIBNAME_SHARED): $(OBJ)
     49 	$(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
     50 
     51 $(LIBNAME_STATIC): libsmsh.o
     52 	$(AR) -rc $@ $?
     53 	$(RANLIB) $@
     54 
     55 libsmsh.o: $(OBJ)
     56 	$(LD) -r $(OBJ) -o $@
     57 	$(OBJCOPY) $(OCPFLAGS) $@
     58 
     59 .config: config.mk
     60 	$(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys
     61 	@echo "config done" > $@
     62 
     63 .SUFFIXES: .c .d .o
     64 .c.d:
     65 	@$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     66 
     67 .c.o:
     68 	$(CC) $(CFLAGS_LIB) -DSMSH_SHARED_BUILD -c $< -o $@
     69 
     70 ################################################################################
     71 # Util
     72 ################################################################################
     73 UTIL_SRC = src/smsh2vtk.c src/smsh-desc.c src/vtk-data.c
     74 UTIL_BIN = $(UTIL_SRC:.c=.b)
     75 UTIL_OBJ = $(UTIL_SRC:.c=.o)
     76 UTIL_DEP = $(UTIL_SRC:.c=.d)
     77 UTIL_EXE = smsh2vtk smsh-desc vtk-data
     78 
     79 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
     80 INCS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys smsh-local.pc)
     81 LIBS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys smsh-local.pc)
     82 
     83 CFLAGS_UTIL = -std=c99 $(CFLAGS_EXE) $(INCS_UTIL)
     84 LDFLAGS_UTIL = $(LDFLAGS_EXE) $(LIBS_UTIL)
     85 
     86 utils: library $(UTIL_DEP) $(UTIL_BIN)
     87 	@for src in $(UTIL_SRC); do \
     88 	  dep="$${src%*.c}.d"; \
     89 	  bin="$${src%*.c}.b"; \
     90 	  exe="$$(basename "$${src}" ".c")"; \
     91 	  $(MAKE) -fMakefile -f"$${dep}" -f "$${bin}" "$${exe}"; \
     92 	done
     93 
     94 $(UTIL_BIN):
     95 	@exe=$$(basename "$@" ".b"); \
     96 	printf '%s: src/%s.o\n' "$${exe}" "$${exe}" > $@
     97 
     98 $(UTIL_DEP): config.mk smsh-local.pc
     99 	$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    100 
    101 $(UTIL_OBJ): config.mk smsh-local.pc
    102 	$(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
    103 
    104 $(UTIL_EXE): config.mk smsh-local.pc $(LIBNAME)
    105 	$(CC) $(CFLAGS_UTIL) -o $@ src/$@.o $(LDFLAGS_UTIL)
    106 
    107 ################################################################################
    108 # Miscellaneous
    109 ################################################################################
    110 pkg:
    111 	sed -e 's#@PREFIX@#$(PREFIX)#g' \
    112 	    -e 's#@VERSION@#$(VERSION)#g' \
    113 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    114 	    smsh.pc.in > smsh.pc
    115 
    116 smsh-local.pc: smsh.pc.in
    117 	sed -e '1d'\
    118 	    -e 's#^includedir=.*#includedir=./src/#'\
    119 	    -e 's#^libdir=.*#libdir=./#'\
    120 	    -e 's#@VERSION@#$(VERSION)#g'\
    121 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
    122 	    smsh.pc.in > $@
    123 
    124 install: library utils pkg
    125 	install() { mode="$$1"; prefix="$$2"; shift 2; \
    126 	  mkdir -p "$${prefix}"; \
    127 	  cp "$$@" "$${prefix}"; \
    128 	  chmod "$${mode}" "$$@"; \
    129 	}; \
    130 	install 755 "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    131 	install 755 "$(DESTDIR)$(BINPREFIX)" $(UTIL_EXE); \
    132 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" smsh.pc; \
    133 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/smsh.h; \
    134 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/smsh2vtk.1; \
    135 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/smsh-desc.1; \
    136 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/vtk-data.1; \
    137 	install 644 "$(DESTDIR)$(MANPREFIX)/man5" doc/smsh.5; \
    138 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-mesh" COPYING README.md
    139 
    140 uninstall:
    141 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
    142 	rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/smsh.pc"
    143 	rm -f "$(DESTDIR)$(INCPREFIX)/star/smsh.h"
    144 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/smsh2vtk.1"
    145 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/smsh-desc.1"
    146 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/vtk-data.1"
    147 	rm -f "$(DESTDIR)$(MANPREFIX)/man5/smsh.5"
    148 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-mesh/COPYING"
    149 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-mesh/README.md"
    150 	for i in $(UTIL_EXE); do rm -f "$(DESTDIR)$(BINPREFIX)/$${i}"; done
    151 
    152 lint:
    153 	mandoc -T lint -Wbase doc/smsh.5
    154 	mandoc -T lint -Wbase doc/smsh2vtk.1 || [ $$? -eq 1 ];
    155 	mandoc -T lint -Wbase doc/smsh-desc.1 || [ $$? -eq 1 ];
    156 	mandoc -T lint -Wbase doc/vtk-data.1
    157 
    158 clean: clean_test
    159 	rm -f $(DEP) $(OBJ) $(LIBNAME)
    160 	rm -f $(UTIL_BIN) $(UTIL_DEP) $(UTIL_OBJ) $(UTIL_EXE)
    161 	rm -f .config libsmsh.o smsh.pc smsh-local.pc
    162 
    163 ################################################################################
    164 # Tests
    165 ################################################################################
    166 TEST_SRC = src/test_smsh.c src/test_smsh_load.c
    167 TEST_OBJ = $(TEST_SRC:.c=.o)
    168 TEST_DEP = $(TEST_SRC:.c=.d)
    169 TEST_BIN = $(TEST_SRC:.c=.b)
    170 
    171 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys smsh-local.pc)
    172 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys smsh-local.pc)
    173 
    174 CFLAGS_TEST = -std=c89 $(CFLAGS_EXE) $(INCS_TEST)
    175 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
    176 
    177 test: tests
    178 	@err=0; \
    179 	for i in $(TEST_SRC); do \
    180 	  test="$$(basename "$${i}" ".c")"; \
    181 	  if "./$${test}" > /dev/null 2>&1; then \
    182 	    printf '%s\n' "$${test}"; \
    183 	  else \
    184 	    >&2 printf '%s: error %s\n' "$${test}" "$$?"; \
    185 	    err=$$((err+1)); \
    186 	  fi \
    187 	done; \
    188 	[ "$${err}" -eq 0 ]
    189 
    190 tests: library $(TEST_DEP) $(TEST_BIN)
    191 	@$(MAKE) -fMakefile \
    192 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    193 	$$(for i in $(TEST_BIN); do echo -f"$${i}"; done) \
    194 	test_bin
    195 
    196 .c.b:
    197 	@{ \
    198 	  bin="$$(basename "$<" ".c")"; \
    199 	  printf '%s: %s\n' "$${bin}" $(<:.c=.o); \
    200 	  printf 'test_bin: %s\n' "$${bin}"; \
    201 	} > $@
    202 
    203 $(TEST_DEP): config.mk smsh-local.pc
    204 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    205 
    206 $(TEST_OBJ): config.mk smsh-local.pc
    207 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    208 
    209 test_smsh \
    210 test_smsh_load \
    211 : config.mk smsh-local.pc $(LIBNAME)
    212 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    213 
    214 clean_test:
    215 	rm -f $(TEST_BIN) $(TEST_DEP) $(TEST_OBJ)
    216 	rm -f test_file.smsh
    217 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done