Makefile (6454B)
1 # Copyright (C) 2018-2026 |Meso|Star> (contact@meso-star.com) 2 # Copyright (C) 2016-2018 CNRS 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 .SUFFIXES: # Clean up default inference rules 19 20 include config.mk 21 22 LIBNAME_STATIC = libsanim.a 23 LIBNAME_SHARED = libsanim.so 24 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 25 26 default: library 27 all: default tests 28 29 ################################################################################ 30 # Library building 31 ################################################################################ 32 SRC =\ 33 src/sanim_node.c 34 OBJ = $(SRC:.c=.o) 35 DEP = $(SRC:.c=.d) 36 37 # Headers to configure 38 HDR=\ 39 src/sanim_version.h 40 41 CFLAGS_LIB = $(CFLAGS_SO) $(INCS) -DSANIM_SHARED_BUILD 42 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS) 43 44 $(LIBNAME_SHARED) $(DEP) $(OBJ): src/.config 45 46 library: $(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 $(LIBNAME_SHARED): $(OBJ) 55 $(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB) 56 57 $(LIBNAME_STATIC): src/libsanim.o 58 $(AR) -rc $@ $? 59 $(RANLIB) $@ 60 61 src/libsanim.o: $(OBJ) 62 $(LD) -r $(OBJ) -o $@ 63 $(OBJCOPY) $(OCPFLAGS) $@ 64 65 src/.config: config.mk 66 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 67 @echo "config done" > $@ 68 69 $(DEP) : $(HDR) src/sanim.pc 70 @$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 71 72 $(OBJ) : $(HDR) src/sanim.pc 73 $(CC) $(CFLAGS_LIB) -c $(@:.o=.c) -o $@ 74 75 ################################################################################ 76 # Installation 77 ################################################################################ 78 pkg: src/sanim.pc 79 80 src/sanim.pc: sanim.pc.in src/.config 81 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 82 -e 's#@VERSION@#$(VERSION)#g'\ 83 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 84 sanim.pc.in > $@ 85 86 src/sanim_version.h: src/sanim_version.h.in src/.config 87 sed -e 's#@VERSION_MAJOR@#$(VERSION_MAJOR)#g' \ 88 -e 's#@VERSION_MINOR@#$(VERSION_MINOR)#g' \ 89 -e 's#@VERSION_PATCH@#$(VERSION_PATCH)#g' \ 90 src/sanim_version.h.in > $@ 91 92 install: library pkg 93 install() { mode="$$1"; prefix="$$2"; shift 2; \ 94 mkdir -p "$${prefix}"; \ 95 cp "$$@" "$${prefix}"; \ 96 chmod "$${mode}" "$${prefix}/$${@##*/}"; \ 97 }; \ 98 if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \ 99 install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \ 100 install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" src/sanim.pc; \ 101 install 644 "$(DESTDIR)$(INCPREFIX)/solstice" src/sanim.h; \ 102 install 644 "$(DESTDIR)$(INCPREFIX)/solstice" src/sanim_version.h; \ 103 install 644 "$(DESTDIR)$(PREFIX)/share/doc/solstice-anim" COPYING; \ 104 install 644 "$(DESTDIR)$(PREFIX)/share/doc/solstice-anim" README.md 105 106 uninstall: 107 rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)" 108 rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/sanim.pc" 109 rm -f "$(DESTDIR)$(INCPREFIX)/solstice/sanim.h" 110 rm -f "$(DESTDIR)$(INCPREFIX)/solstice/sanim_version.h" 111 rm -f "$(DESTDIR)$(PREFIX)/share/doc/solstice-anim/COPYING" 112 rm -f "$(DESTDIR)$(PREFIX)/share/doc/solstice-anim/README.md" 113 114 clean: clean_test 115 rm -f $(HDR) $(DEP) $(OBJ) $(LIBNAME) 116 rm -f src/.config src/.config_test src/libsanim.o src/sanim.pc 117 118 ################################################################################ 119 # Tests 120 ################################################################################ 121 TEST_SRC =\ 122 src/test_sanim_node.c\ 123 src/test_sanim_node_pivot.c\ 124 src/test_sanim_node_transform.c\ 125 src/test_sanim_search.c\ 126 src/test_sanim_visit.c 127 TEST_OBJ =\ 128 $(TEST_SRC:.c=.o)\ 129 src/test_sanim_utils.o 130 TEST_DEP =\ 131 $(TEST_SRC:.c=.d)\ 132 src/test_sanim_utils.d 133 TEST_TGT =\ 134 $(TEST_SRC:.c=.t)\ 135 src/test_sanim_utils.t 136 137 src/sanim-local.pc: sanim.pc.in config.mk 138 sed -e '1d'\ 139 -e 's#^includedir=.*#includedir=./src/#'\ 140 -e 's#^libdir=.*#libdir=./#'\ 141 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 142 sanim.pc.in > $@ 143 144 # Regular cflags 145 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="src:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 146 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sanim-local) 147 LIBS_TEST = src/test_sanim_utils.o\ 148 $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sanim-local)\ 149 -lm 150 151 tests: library src/sanim-local.pc $(TEST_DEP) $(TEST_TGT) 152 @$(MAKE) -fMakefile \ 153 $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \ 154 $$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \ 155 test_list 156 157 $(TEST_TGT): 158 @{ \ 159 exe="$$(basename "$@" ".t")"; \ 160 printf '%s: %s\n' "$${exe}" $(@:.t=.o); \ 161 printf 'test_list: %s\n' "$${exe}"; \ 162 } > $@ 163 164 src/.config_test: config.mk 165 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 166 @echo "config done" > $@ 167 168 clean_test: 169 rm -f src/sanim-local.pc src/.config_test 170 for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done 171 rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) 172 173 test: tests 174 @err=0; \ 175 check() { name="$$1"; prog="$$2"; shift 2; \ 176 printf '%s' "$${name}"; \ 177 if PATH=./:"$${PATH}" "$${prog}" $$@ > /dev/null 2>&1; then \ 178 printf '\n'; \ 179 else \ 180 printf ': error %s\n' "$$?"; \ 181 err=$$((err+1)); \ 182 fi; \ 183 }; \ 184 \ 185 for i in $(TEST_SRC); do \ 186 test="$$(basename "$${i}" ".c")"; \ 187 check "$${test}" "$${test}"; \ 188 done; \ 189 \ 190 [ "$${err}" -eq 0 ] 191 192 ################################################################################ 193 # Regular tests 194 ################################################################################ 195 CFLAGS_TEST = $(CFLAGS_EXE) $(INCS_TEST) 196 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST) 197 198 $(TEST_DEP) : src/.config_test src/sanim-local.pc 199 @$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 200 201 $(TEST_OBJ) : src/.config_test src/sanim-local.pc 202 $(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@ 203 204 test_sanim_node\ 205 test_sanim_node_pivot\ 206 test_sanim_node_transform\ 207 test_sanim_search\ 208 test_sanim_visit\ 209 : config.mk src/sanim-local.pc $(LIBNAME) src/test_sanim_utils.o 210 $(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)