Makefile (6145B)
1 # Copyright (C) 2022, 2023, 2025 Centre National de la Recherche Scientifique 2 # Copyright (C) 2022, 2023, 2025 Institut Pierre-Simon Laplace 3 # Copyright (C) 2022, 2023, 2025 Institut de Physique du Globe de Paris 4 # Copyright (C) 2022, 2023, 2025, 2026 |Méso|Star> (contact@meso-star.com) 5 # Copyright (C) 2022, 2023, 2025 Observatoire de Paris 6 # Copyright (C) 2022, 2023, 2025 Université de Reims Champagne-Ardenne 7 # Copyright (C) 2022, 2023, 2025 Université de Versaille Saint-Quentin 8 # Copyright (C) 2022, 2023, 2025 Université Paul Sabatier 9 # 10 # This program is free software: you can redistribute it and/or modify 11 # it under the terms of the GNU General Public License as published by 12 # the Free Software Foundation, either version 3 of the License, or 13 # (at your option) any later version. 14 # 15 # This program is distributed in the hope that it will be useful, 16 # but WITHOUT ANY WARRANTY; without even the implied warranty of 17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 # GNU General Public License for more details. 19 # 20 # You should have received a copy of the GNU General Public License 21 # along with this program. If not, see <http://www.gnu.org/licenses/>. 22 23 .POSIX: 24 .SUFFIXES: # Clean up default inference rules 25 26 include config.mk 27 28 LIBNAME_STATIC = librngrd.a 29 LIBNAME_SHARED = librngrd.so 30 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 31 32 default: library utils 33 all: default 34 35 ################################################################################ 36 # Library building 37 ################################################################################ 38 SRC = src/rngrd.c src/rngrd_log.c src/rngrd_mesh.c src/rngrd_properties.c 39 OBJ = $(SRC:.c=.o) 40 DEP = $(SRC:.c=.d) 41 42 CFLAGS_LIB = $(CFLAGS_SO) $(INCS) -DRNGRD_SHARED_BUILD 43 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS) 44 45 library: .config $(DEP) 46 @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \ 47 $$(if [ -n "$(LIBNAME)" ]; then \ 48 echo "$(LIBNAME)"; \ 49 else \ 50 echo "$(LIBNAME_SHARED)"; \ 51 fi) 52 53 $(DEP) $(OBJ): config.mk 54 55 $(LIBNAME_SHARED): $(OBJ) 56 $(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB) 57 58 $(LIBNAME_STATIC): librngrd.o 59 $(AR) -rc $@ $? 60 $(RANLIB) $@ 61 62 librngrd.o: $(OBJ) 63 $(LD) -r $(OBJ) -o $@ 64 $(OBJCOPY) $(OCPFLAGS) $@ 65 66 .config: config.mk 67 $(PKG_CONFIG) --atleast-version $(MRUMTL_VERSION) mrumtl 68 $(PKG_CONFIG) --atleast-version $(RNSL_VERSION) rnsl 69 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 70 $(PKG_CONFIG) --atleast-version $(S3D_VERSION) s3d 71 $(PKG_CONFIG) --atleast-version $(SBUF_VERSION) sbuf 72 $(PKG_CONFIG) --atleast-version $(SMSH_VERSION) smsh 73 $(PKG_CONFIG) --atleast-version $(SSF_VERSION) ssf 74 echo "config done" > $@ 75 76 .SUFFIXES: .c .d .o 77 .c.d: 78 @$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@ 79 80 .c.o: 81 $(CC) $(CFLAGS_LIB) -c $< -o $@ 82 83 ################################################################################ 84 # Utils 85 ################################################################################ 86 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 87 88 INCS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rngrd-local rsys) 89 LIBS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rngrd-local rsys) 90 91 CFLAGS_UTIL = $(CFLAGS_EXE) $(INCS_UTIL) 92 LDFLAGS_UTIL = $(LDFLAGS_EXE) $(LIBS_UTIL) 93 94 utils: library src/rngrd_lint.d 95 @$(MAKE) -fMakefile -f src/rngrd_lint.d rngrd-lint 96 97 src/rngrd_lint.d: config.mk rngrd-local.pc src/rngrd_lint.c 98 @$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 99 100 src/rngrd_lint.o: config.mk rngrd-local.pc src/rngrd_lint.c 101 $(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@ 102 103 rngrd-lint: config.mk rngrd-local.pc src/rngrd_lint.o $(LIBNAME) 104 $(CC) $(CFLAGS_UTIL) -o $@ src/rngrd_lint.o $(LDFLAGS_UTIL) 105 106 ################################################################################ 107 # Installation 108 ################################################################################ 109 pkg: 110 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 111 -e 's#@VERSION@#$(VERSION)#g'\ 112 -e 's#@MRUMTL_VERSION@#$(MRUMTL_VERSION)#g'\ 113 -e 's#@RNSL_VERSION@#$(RNSL_VERSION)#g'\ 114 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 115 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 116 -e 's#@SBUF_VERSION@#$(SBUF_VERSION)#g'\ 117 -e 's#@SMSH_VERSION@#$(SMSH_VERSION)#g'\ 118 -e 's#@SSF_VERSION@#$(SSF_VERSION)#g'\ 119 rngrd.pc.in > rngrd.pc 120 121 rngrd-local.pc: rngrd.pc.in 122 sed -e '1d'\ 123 -e 's#^includedir=.*#includedir=./src/#'\ 124 -e 's#^libdir=.*#libdir=./#'\ 125 -e 's#@VERSION@#$(VERSION)#g'\ 126 -e 's#@MRUMTL_VERSION@#$(MRUMTL_VERSION)#g'\ 127 -e 's#@RNSL_VERSION@#$(RNSL_VERSION)#g'\ 128 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 129 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 130 -e 's#@SBUF_VERSION@#$(SBUF_VERSION)#g'\ 131 -e 's#@SMSH_VERSION@#$(SMSH_VERSION)#g'\ 132 -e 's#@SSF_VERSION@#$(SSF_VERSION)#g'\ 133 rngrd.pc.in > $@ 134 135 install: library utils pkg 136 install() { mode="$$1"; prefix="$$2"; shift 2; \ 137 mkdir -p "$${prefix}"; \ 138 cp "$$@" "$${prefix}"; \ 139 printf '%s\n' "$${@}" | while read -r i; do \ 140 chmod "$${mode}" "$${prefix}/$${i##*/}"; \ 141 done; \ 142 }; \ 143 if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \ 144 install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \ 145 install 755 "$(DESTDIR)$(BINPREFIX)" rngrd-lint; \ 146 install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" rngrd.pc; \ 147 install 644 "$(DESTDIR)$(INCPREFIX)/rad-net" src/rngrd.h; \ 148 install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/rngrd-lint.1; \ 149 install 644 "$(DESTDIR)$(MANPREFIX)/man5" doc/rnsp.5; \ 150 install 644 "$(DESTDIR)$(PREFIX)/share/doc/rngrd" COPYING README.md 151 152 uninstall: 153 rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)" 154 rm -f "$(DESTDIR)$(BINPREFIX)/rngrd-lint" 155 rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/rngrd.pc" 156 rm -f "$(DESTDIR)$(INCPREFIX)/rad-net/rngrd.h" 157 rm -f "$(DESTDIR)$(MANPREFIX)/man1/rngrd-lint.1" 158 rm -f "$(DESTDIR)$(MANPREFIX)/man5/rnsp.5" 159 rm -f "$(DESTDIR)$(PREFIX)/share/doc/rngrd/COPYING" 160 rm -f "$(DESTDIR)$(PREFIX)/share/doc/rngrd/README.md" 161 162 clean: 163 rm -f $(OBJ) $(DEP) $(LIBNAME) 164 rm -f rngrd-lint src/rngrd_lint.o src/rngrd_lint.d 165 rm -f .config librngrd.o rngrd.pc rngrd-local.pc 166 167 lint: 168 mandoc -Tlint -Wwarning doc/rnsp.5 169 mandoc -Tlint -Wwarning doc/rngrd-lint.1