solstice-anim

Geometry animation library of the solstice app
git clone git://git.meso-star.com/solstice-anim.git
Log | Files | Refs | README | LICENSE

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)