1## 2## Gophernicus server Makefile 3## 4 5# 6# Variables and default configuration 7# 8NAME = gophernicus 9PACKAGE = $(NAME) 10BINARY = $(NAME) 11VERSION = 3.0.1 12CODENAME = Dungeon Edition 13AUTHOR = h9bnks and fosslinux 14EMAIL = gophernicus@gophernicus.org 15STARTED = 2009 16 17SOURCES = $(NAME).c file.c menu.c string.c platform.c session.c options.c 18HEADERS = functions.h files.h 19OBJECTS = $(SOURCES:.c=.o) 20README = README.md 21DOCS = LICENSE README.md INSTALL.md TODO changelog README.Gophermap gophertag 22 23INSTALL = PATH=$$PATH:/usr/sbin ./install-sh -o 0 -g 0 24DESTDIR = /usr 25OSXDEST = /usr/local 26SBINDIR = $(DESTDIR)/sbin 27DOCDIR = $(DESTDIR)/share/doc/$(PACKAGE) 28 29ROOT = /var/gopher 30OSXROOT = /Library/GopherServer 31WRTROOT = /gopher 32MAP = gophermap 33 34INETD = /etc/inetd.conf 35XINETD = /etc/xinetd.d 36INETLIN = "gopher stream tcp nowait nobody $(SBINDIR)/$(BINARY) $(BINARY) -h `hostname`" 37INETPID = /var/run/inetd.pid 38LAUNCHD = /Library/LaunchDaemons 39PLIST = org.$(NAME).server.plist 40NET_SRV = /boot/common/settings/network/services 41SYSTEMD = /lib/systemd/system /usr/lib/systemd/system 42HAS_STD = /run/systemd/system 43SYSCONF = /etc/sysconfig 44DEFAULT = /etc/default 45 46CC = gcc 47HOSTCC = $(CC) 48CFLAGS = -O2 -Wall 49LDFLAGS = 50 51IPCRM = /usr/bin/ipcrm 52 53 54# 55# Platform support, compatible with both BSD and GNU make 56# 57all: headers 58 @case `uname` in \ 59 Darwin) $(MAKE) ROOT="$(OSXROOT)" DESTDIR="$(OSXDEST)" $(BINARY); ;; \ 60 Haiku) $(MAKE) EXTRA_LIBS="-lnetwork" $(BINARY); ;; \ 61 *) if [ -f "/usr/include/tcpd.h" ]; then $(MAKE) withwrap; else $(MAKE) $(BINARY); fi; ;; \ 62 esac 63 64generic: $(BINARY) 65 66withwrap: 67 $(MAKE) EXTRA_CFLAGS="-DHAVE_LIBWRAP" EXTRA_LIBS="-lwrap" $(BINARY) 68 69 70# 71# Special targets 72# 73deb: 74 dpkg-buildpackage -rfakeroot -uc -us 75 76# 77# Building 78# 79$(NAME).c: headers $(NAME).h 80 81$(BINARY): $(OBJECTS) 82 $(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) $(OBJECTS) $(EXTRA_LIBS) -o $@ 83 84.c.o: 85 $(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DVERSION="\"$(VERSION)\"" -DCODENAME="\"$(CODENAME)\"" -DDEFAULT_ROOT="\"$(ROOT)\"" $< -o $@ 86 87 88headers: $(HEADERS) 89 @echo 90 91functions.h: 92 echo "/* Automatically generated function definitions */" > $@ 93 echo >> $@ 94 grep -h "^[a-z]" $(SOURCES) | \ 95 grep -v "int main" | \ 96 grep -v "strlc" | \ 97 grep -v "[a-z]:" | \ 98 sed -e "s/ =.*$$//" -e "s/ *$$/;/" >> $@ 99 @echo 100 101bin2c: bin2c.c 102 $(HOSTCC) bin2c.c -o $@ 103 @echo 104 105README: $(README) 106 cat $(README) > $@ 107 108files.h: bin2c README 109 sed -e '/^(end of option list)/,$$d' README > README.options 110 ./bin2c -0 -n README README.options > $@ 111 ./bin2c -0 LICENSE >> $@ 112 ./bin2c -n ERROR_GIF error.gif >> $@ 113 @echo 114 115 116# 117# Cleanup after building 118# 119clean: clean-build clean-deb 120 121clean-build: 122 rm -f $(BINARY) $(OBJECTS) $(HEADERS) README.options README bin2c 123 124clean-deb: 125 if [ -d debian/$(PACKAGE) ]; then fakeroot debian/rules clean; fi 126 127clean-shm: 128 if [ -x $(IPCRM) ]; then $(IPCRM) -M `awk '/SHM_KEY/ { print $$3 }' $(NAME).h` || true; fi 129 130 131# 132# Install targets 133# 134install: clean-shm 135 @case `uname` in \ 136 Darwin) $(MAKE) ROOT="$(OSXROOT)" DESTDIR="$(OSXDEST)" install-files install-docs install-root install-osx install-done; ;; \ 137 Haiku) $(MAKE) SBINDIR=/boot/common/bin DOCDIR=/boot/common/share/doc/$(PACKAGE) \ 138 install-files install-docs install-root install-haiku install-done; ;; \ 139 *) $(MAKE) install-files install-docs install-root; ;; \ 140 esac 141 @if [ -d "$(HAS_STD)" ]; then $(MAKE) install-systemd install-done; \ 142 elif [ -d "$(XINETD)" ]; then $(MAKE) install-xinetd install-done; \ 143 elif [ -f "$(INETD)" ]; then $(MAKE) install-inetd install-done; fi 144 145.PHONY: install 146 147install-done: 148 @echo 149 @echo "======================================================================" 150 @echo 151 @echo "If there were no errors shown above," 152 @echo "Gophernicus has now been succesfully installed. To try it out, launch" 153 @echo "your favorite gopher browser and navigate to your gopher root." 154 @echo 155 @echo "Gopher URL...: gopher://`hostname`/" 156 @for CONFFILE in /etc/sysconfig/gophernicus \ 157 /etc/default/gophernicus \ 158 /Library/LaunchDaemons/org.gophernicus.server.plist \ 159 /boot/common/settings/network/services \ 160 /lib/systemd/system/gophernicus\@.service \ 161 /etc/xinetd.d/gophernicus \ 162 /etc/inetd.conf; do \ 163 if [ -f $$CONFFILE ]; then echo "Configuration: $$CONFFILE"; break; fi; done; 164 @echo 165 @echo "======================================================================" 166 @echo 167 168install-files: $(BINARY) 169 mkdir -p $(SBINDIR) 170 $(INSTALL) -s -m 755 $(BINARY) $(SBINDIR) 171 @echo 172 173install-docs: 174 mkdir -p $(DOCDIR) 175 $(INSTALL) -m 644 $(DOCS) $(DOCDIR) 176 @echo 177 178install-root: 179 if [ ! -d "$(ROOT)" -o ! -f "$(ROOT)/$(MAP)" ]; then \ 180 mkdir -p $(ROOT); \ 181 $(INSTALL) -m 644 $(MAP) $(ROOT); \ 182 ln -s $(DOCDIR) $(ROOT)/docs; \ 183 fi 184 @echo 185 186install-inetd: install-files install-docs install-root 187 @if update-inetd --add $(INETLIN); then \ 188 echo update-inetd install worked ; \ 189 else if grep '^gopher' $(INETD) >/dev/null 2>&1 ; then \ 190 echo "::::: Gopher entry in $(INETD) already present -- please check! :::::"; \ 191 else echo "Trying to add gopher entry to $(INETD)" ; \ 192 echo "$(INETLIN)" >> $(INETD) ; \ 193 if [ -r $(INETPID) ] ; then kill -HUP `cat $(INETPID)` ; \ 194 else echo "::::: No PID for inetd found, not restarted -- please check! :::::" ; fi ; \ 195 fi ; \ 196 fi 197 @echo 198 199install-xinetd: install-files install-docs install-root 200 if [ -d "$(XINETD)" -a ! -f "$(XINETD)/$(NAME)" ]; then \ 201 sed -e "s/@HOSTNAME@/`hostname`/g" $(NAME).xinetd > $(XINETD)/$(NAME); \ 202 [ -x /sbin/service ] && /sbin/service xinetd reload; \ 203 fi 204 @echo 205 206install-osx: 207 if [ -d "$(LAUNCHD)" -a ! -f "$(LAUNCHD)/$(PLIST)" ]; then \ 208 sed -e "s/@HOSTNAME@/`hostname`/g" $(PLIST) > $(LAUNCHD)/$(PLIST); \ 209 launchctl load $(LAUNCHD)/$(PLIST); \ 210 fi 211 @echo 212 chown -h root:admin $(ROOT) $(ROOT)/* 213 chmod -h 0775 $(ROOT) $(ROOT)/docs 214 @echo 215 216install-haiku: 217 if [ -f "$(NET_SRV)" -a ! "`grep -m1 gopher $(NET_SRV)`" ]; then \ 218 (echo ""; \ 219 echo "service gopher {"; \ 220 echo " family inet"; \ 221 echo " protocol tcp"; \ 222 echo " port 70"; \ 223 echo " launch $(BINARY) -h `hostname`"; \ 224 echo "}") >> $(NET_SRV); \ 225 fi 226 @echo 227 chown user:root $(DOCDIR)/* $(SBINDIR)/$(BINARY) $(ROOT)/$(MAP) 228 @echo 229 ps | grep net_server | grep -v grep | awk '{ print $$2 }' | xargs kill 230 nohup /boot/system/servers/net_server >/dev/null 2>/dev/null & 231 @echo 232 233install-systemd: install-files install-docs install-root 234 if [ -d "$(HAS_STD)" ]; then \ 235 if [ -d "$(SYSCONF)" -a ! -f "$(SYSCONF)/$(NAME)" ]; then \ 236 $(INSTALL) -m 644 $(NAME).env $(SYSCONF)/$(NAME); \ 237 fi; \ 238 if [ ! -d "$(SYSCONF)" -a -d "$(DEFAULT)" -a ! -f $(DEFAULT)/$(NAME) ]; then \ 239 $(INSTALL) -m 644 $(NAME).env $(DEFAULT)/$(NAME); \ 240 fi; \ 241 for DIR in $(SYSTEMD); do \ 242 if [ -d "$$DIR" ]; then \ 243 $(INSTALL) -m 644 $(NAME).socket $(NAME)\@.service $$DIR; \ 244 break; \ 245 fi; \ 246 done; \ 247 if pidof systemd ; then \ 248 systemctl daemon-reload; \ 249 systemctl enable $(NAME).socket; \ 250 systemctl start $(NAME).socket; \ 251 fi; \ 252 fi 253 @echo 254 255# 256# Uninstall targets 257# 258uninstall: uninstall-xinetd uninstall-launchd uninstall-systemd uninstall-inetd 259 rm -f $(SBINDIR)/$(BINARY) 260 for DOC in $(DOCS); do rm -f $(DOCDIR)/$$DOC; done 261 rmdir -p $(SBINDIR) $(DOCDIR) 2>/dev/null || true 262 @echo 263 264uninstall-inetd: 265 @if [ -f "$(INETD)" ] && update-inetd --remove "^gopher.*gophernicus" ; then \ 266 echo update-inetd remove worked ; \ 267 else if grep '^gopher' $(INETD) >/dev/null 2>&1 && \ 268 sed -i .bak -e 's/^gopher/#gopher/' $(INETD) ; then \ 269 echo "commented out gopher entry in $(INETD), reloading inetd" ; \ 270 [ -r $(INETPID) ] && kill -HUP `cat $(INETPID)` ; \ 271 else echo "::::: could not find gopher entry in $(INETD) :::::" ; \ 272 fi ; \ 273 fi 274 @echo 275 276uninstall-xinetd: 277 if grep -q $(BINARY) "$(XINETD)/gopher" 2>/dev/null; then \ 278 rm -f $(XINETD)/gopher; \ 279 [ -x /sbin/service ] && service xinetd reload; \ 280 fi 281 @echo 282 283uninstall-launchd: 284 if [ -f $(LAUNCHD)/$(PLIST) ]; then \ 285 launchctl unload $(LAUNCHD)/$(PLIST); \ 286 rm -f $(LAUNCHD)/$(PLIST); \ 287 fi 288 if [ -L $(ROOT) ]; then \ 289 rm -f $(ROOT); \ 290 fi 291 @echo 292 293uninstall-systemd: 294 if [ -d "$(HAS_STD)" ]; then \ 295 for DIR in $(SYSTEMD); do \ 296 if [ -f "$$DIR/$(NAME).socket" ]; then \ 297 systemctl stop $(NAME).socket; \ 298 systemctl disable $(NAME).socket; \ 299 rm -f $$DIR/$(NAME).socket $$DIR/$(NAME)\@.service $(SYSCONF)/$(NAME) $(DEFAULT)/$(NAME); \ 300 systemctl daemon-reload; \ 301 break; \ 302 fi; \ 303 done; \ 304 fi 305 @echo 306 307 308# 309# List all C defines 310# 311defines: functions.h files.h 312 $(CC) -dM -E $(NAME).c 313 314 315# 316# LOC 317# 318loc: 319 @wc -l *.c 320 321 322# 323# Fix copyright notes 324# 325copyright: README 326 sed -i .stupid -e "s/Copyright .c. 2.*$$/Copyright (c) $(STARTED)-`date +%Y` $(AUTHOR) <$(EMAIL)>/" *.c *.h LICENSE $(README) debian/copyright 327 sed -i .stupid -e "s/Maintainer: .*$$/Maintainer: $(AUTHOR) <$(EMAIL)>/" debian/control 328 rm -f *.stupid debian/*.stupid 329 330