star-stl

Load STereo Lithography (StL) file format
git clone git://git.meso-star.fr/star-stl.git
Log | Files | Refs | README | LICENSE

Makefile (6327B)


      1 # Copyright (C) 2015, 2016, 2019, 2021, 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: # Clean up default inference rules
     18 
     19 include config.mk
     20 
     21 LIBNAME_STATIC = libsstl.a
     22 LIBNAME_SHARED = libsstl.so
     23 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     24 
     25 default: library
     26 all: library tests util
     27 
     28 ################################################################################
     29 # Library building
     30 ################################################################################
     31 SRC = src/sstl.c src/sstl_ascii.c src/sstl_binary.c src/sstl_writer.c
     32 OBJ = $(SRC:.c=.o)
     33 DEP = $(SRC:.c=.d)
     34 
     35 CFLAGS_LIB = -std=c99 $(CFLAGS_SO) $(INCS) -DSSTL_SHARED_BUILD
     36 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS) -lm
     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): libsstl.o
     52 	$(AR) -rc $@ $?
     53 	$(RANLIB) $@
     54 
     55 libsstl.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) -c $< -o $@
     69 
     70 ################################################################################
     71 # Utils
     72 ################################################################################
     73 UTIL_SRC = src/sstl_main.c
     74 UTIL_OBJ = $(UTIL_SRC:.c=.o)
     75 UTIL_DEP = $(UTIL_SRC:.c=.d)
     76 
     77 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
     78 
     79 INCS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sstl-local)
     80 LIBS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sstl-local)
     81 
     82 CFLAGS_UTIL = -std=c99 $(CFLAGS_EXE) $(INCS_UTIL)
     83 LDFLAGS_UTIL = $(LDFLAGS_EXE) $(LIBS_UTIL)
     84 
     85 util: library $(UTIL_DEP)
     86 	@$(MAKE) -fMakefile -f"$(UTIL_DEP)" sstl
     87 
     88 sstl: config.mk sstl-local.pc $(UTIL_OBJ) $(LIBNAME)
     89 	$(CC) $(CFLAGS_UTIL) -o $@ $(UTIL_OBJ) $(LDFLAGS_UTIL)
     90 
     91 $(UTIL_DEP): config.mk sstl-local.pc
     92 	@$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
     93 
     94 $(UTIL_OBJ): config.mk sstl-local.pc
     95 	$(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
     96 
     97 ################################################################################
     98 # Installation
     99 ################################################################################
    100 pkg:
    101 	sed -e 's#@PREFIX@#$(PREFIX)#g' \
    102 	    -e 's#@VERSION@#$(VERSION)#g' \
    103 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    104 	    sstl.pc.in > sstl.pc
    105 
    106 sstl-local.pc: sstl.pc.in
    107 	sed -e '1d'\
    108 	    -e 's#^includedir=.*#includedir=./src/#' \
    109 	    -e 's#^libdir=.*#libdir=./#' \
    110 	    -e 's#@VERSION@#$(VERSION)#g' \
    111 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    112 	    sstl.pc.in > $@
    113 
    114 install: library util pkg
    115 	install() { mode="$$1"; prefix="$$2"; shift 2; \
    116 	  mkdir -p "$${prefix}"; \
    117 	  cp "$$@" "$${prefix}"; \
    118 	  chmod "$${mode}" "$$@"; \
    119 	}; \
    120 	install 755 "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    121 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" sstl.pc; \
    122 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/sstl.h; \
    123 	install 755 "$(DESTDIR)$(BINPREFIX)" sstl; \
    124 	install 644 "$(DESTDIR)$(MANPREFIX)/man1/" sstl.1; \
    125 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-stl" COPYING README.md
    126 
    127 uninstall:
    128 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
    129 	rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/sstl.pc"
    130 	rm -f "$(DESTDIR)$(INCPREFIX)/star/sstl.h"
    131 	rm -f "$(DESTDIR)$(BINPREFIX)/sstl"
    132 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/sstl.1"
    133 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-stl/COPYING"
    134 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-stl/README.md"
    135 
    136 clean: clean_test
    137 	rm -f $(OBJ) $(DEP) $(LIBNAME)
    138 	rm -f $(UTIL_OBJ) $(UTIL_DEP) sstl
    139 	rm -f .config libsstl.o sstl.pc sstl-local.pc
    140 
    141 lint:
    142 	mandoc -Tlint sstl.1
    143 
    144 ################################################################################
    145 # Tests
    146 ################################################################################
    147 TEST_SRC =\
    148  src/test_sstl.c\
    149  src/test_sstl_desc.c\
    150  src/test_sstl_load_ascii.c\
    151  src/test_sstl_load_binary.c\
    152  src/test_sstl_writer.c
    153 TEST_OBJ = $(TEST_SRC:.c=.o)
    154 TEST_DEP = $(TEST_SRC:.c=.d)
    155 TEST_TGT = $(TEST_SRC:.c=.t)
    156 
    157 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sstl-local)
    158 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sstl-local)
    159 
    160 CFLAGS_TEST = -std=c89 $(CFLAGS_EXE) $(INCS_TEST)
    161 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST) -lm
    162 
    163 tests: library $(TEST_DEP) $(TEST_TGT)
    164 	@$(MAKE) -fMakefile \
    165 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    166 	$$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
    167 	test_list
    168 
    169 $(TEST_TGT):
    170 	@{ \
    171 	  exe="$$(basename "$@" ".t")"; \
    172 	  printf '%s: %s\n' "$${exe}" $(@:.t=.o); \
    173 	  printf 'test_list: %s\n' "$${exe}"; \
    174 	} > $@
    175 
    176 $(TEST_DEP): config.mk sstl-local.pc
    177 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    178 
    179 $(TEST_OBJ): config.mk sstl-local.pc
    180 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    181 
    182 test_sstl \
    183 test_sstl_desc \
    184 test_sstl_load_ascii \
    185 test_sstl_load_binary \
    186 test_sstl_writer \
    187 : config.mk sstl-local.pc $(LIBNAME)
    188 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    189 
    190 clean_test:
    191 	rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT)
    192 	rm -f 1_triangle.stl 1_triangle_no_normal.stl
    193 	rm -f 1_triangle_with_noise.stl empty.stl test.stl
    194 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
    195 
    196 test: tests
    197 	@err=0; \
    198 	for i in $(TEST_SRC); do \
    199 	  test="$$(basename "$${i}" ".c")"; \
    200 	  printf '%s' "$${test}"; \
    201 	  if "./$${test}" > /dev/null 2>&1; then \
    202 	    printf '\n'; \
    203 	  else \
    204 	    printf ': error %s\n' "$$?"; \
    205 	    err=$$((err+1)); \
    206 	  fi \
    207 	done; \
    208 	[ "$${err}" -eq 0 ]