Makefile.static 12.8 KB
Newer Older
1 2 3 4 5 6 7 8 9

##############################################################################

# If you have a suggestion for a name, tell me about it:
# <oskar.skog.finland@gmail.com>

# No quotes for these four:
# NAME = [technical] name
# NAME_C = Capitalized name (human name)
Oskar Skog's avatar
Oskar Skog committed
10
# DESCRIPTION =
11 12 13 14
# VERSION = x.y.z
NAME := anonymine
NAME_C := Anonymine
DESCRIPTION = Minesweeper without guessing
Oskar Skog's avatar
Oskar Skog committed
15
VERSION := 0.2.1
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

# Three more variables are required: EXECUTABLES and MODULES
# and MODULES_OTHERVER (= "non-existent").
# They will be prepended to the actual Makefile by the "configure" script.

# srcdir, builddir and DESTDIR may also be prepended by the "configure"
# script.

# freedesktop == "" if not freedesktop.org DE.
# windows == "" if not on Windows.
# macosx == "" if not on Mac OS X.

# See "INSTALL".

# Define these to prevent bugs on certain platforms.
PRE_INSTALL = true
NORMAL_INSTALL = true
POST_INSTALL = true
PRE_UNINSTALL = true
NORMAL_UNINSTALL = true
POST_UNINSTALL = true

##############################################################################

Oskar Skog's avatar
Oskar Skog committed
40 41 42
verbose ?= true
info := test "$(verbose)" != true || echo '//'

43 44 45 46 47 48
# Desktop specific prefixes:
# FD_	freedesktop.org
# OSX_	Mac OS X
# CYG_	Cygwin
# W_	Cygwin, "temporary" variables

Oskar Skog's avatar
Oskar Skog committed
49 50 51 52 53
MAIN_SRC := $(srcdir)$(NAME).py
MAIN_STAGE := $(builddir)$(NAME)
MAIN_DEST := $(DESTDIR)$(EXECUTABLES)/$(NAME)

ENGINECFG_STAGE := $(builddir)enginecfg.out
54 55

# freedesktop.org, see desktop/README
Oskar Skog's avatar
Oskar Skog committed
56 57 58
FD_MK_DESKTOP := $(srcdir)desktop/desktop.sh
FD_DESKTOP_STAGE := $(builddir)$(NAME).desktop
FD_DESKTOP_DEST := $(DESTDIR)$(prefix)/share/applications/$(NAME).desktop
59 60

# Mac OS X, see desktop/README
Oskar Skog's avatar
Oskar Skog committed
61 62 63 64 65
OSX_WRAPPER := $(builddir)$(NAME)-wrapper
OSX_INFO_PLIST := $(builddir)Info.plist
OSX_MK_INFO_PLIST := $(srcdir)desktop/Info.plist.py
OSX_ICON := $(builddir)icon.icns
OSX_MK_ICON := $(srcdir)desktop/icon.icns.py
66 67

# Windows/Cygwin, see desktop/README
Oskar Skog's avatar
Oskar Skog committed
68 69
CYG_ICO_SRC := $(srcdir)desktop/$(NAME).ico
CYG_ICO_DIR := $(DESTDIR)$(prefix)/share/pixmaps
70
CYG_ICO_DEST := $(CYG_ICO_DIR)/$(NAME).ico
71 72

# make clean
Oskar Skog's avatar
Oskar Skog committed
73
ALL_STAGE := "$(MAIN_STAGE)" "$(OSX_WRAPPER)" "$(OSX_INFO_PLIST)" \
Oskar Skog's avatar
Oskar Skog committed
74 75 76
	"$(OSX_ICON)" "$(builddir)check.py" "$(FD_DESKTOP_STAGE)" \
	"$(ENGINECFG_STAGE)" "$(builddir)mkenginecfg.py"

Oskar Skog's avatar
Oskar Skog committed
77 78
all : $(MAIN_STAGE) $(ENGINECFG_STAGE)
	@$(info) 'Maybe building .desktop and app/bundle'
79
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
80
		cd "$(builddir)" && make build-freedesktop > /dev/null; \
81 82
	fi
	@if [ -n "$(macosx)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
83
		cd "$(builddir)" && make build-macosx > /dev/null; \
84 85
	fi

Oskar Skog's avatar
Oskar Skog committed
86 87 88 89 90
$(MAIN_STAGE) : $(MAIN_SRC)
	@$(info) 'Creating the appropriate shebang line'
	@echo "#!`which python`" > "$(MAIN_STAGE)"
	@cat "$(MAIN_SRC)" >> "$(MAIN_STAGE)"

91
$(ENGINECFG_STAGE) : $(srcdir)mkenginecfg
Oskar Skog's avatar
Oskar Skog committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
	@$(info) 'Calibrating enginecfg: 10^8 no-ops'
	@"$(srcdir)mkenginecfg" "$(srcdir)" "$(builddir)"

build-freedesktop : FORCE
	@: # Refer to desktop/README for information about the following.
	@"$(FD_MK_DESKTOP)" "$(FD_DESKTOP_STAGE)" $(NAME) "$(NAME_C)" \
		"$(DESCRIPTION) -- version $(VERSION)"

build-macosx : FORCE
	@: # Refer to desktop/README for information about the following.
	@echo '#!/bin/sh' > "$(OSX_WRAPPER)"
	@echo 'open -b com.apple.terminal' "$(MAIN_DEST)" >> "$(OSX_WRAPPER)"
	@python "$(OSX_MK_INFO_PLIST)" "$(OSX_INFO_PLIST)" "$(NAME_C)" \
		"$(NAME_C) - $(DESCRIPTION)" $(VERSION) $(NAME)
	@python "$(OSX_MK_ICON)" "$(OSX_ICON)" "$(srcdir)desktop/$(NAME)"

108 109 110
clean : FORCE
	@rm $(ALL_STAGE) 2> /dev/null || true
	@: # Remove the bytecode files.
Oskar Skog's avatar
Oskar Skog committed
111 112
	@rm -- "$(srcdir)"*.pyc 2> /dev/null || true
	@rm -r -- "$(srcdir)"__pycache__/ 2> /dev/null || true
113 114

# configure.py will choose /usr/ucb/install on Solares.
115
INSTALL ?= install
116

Oskar Skog's avatar
Oskar Skog committed
117 118 119
INSTALL_CFG := python "$(srcdir)install-cfg" "$(INSTALL)"

CFG_DIR := $(DESTDIR)/etc/$(NAME)
120
# Modules: FOO_SRC, FOO_DEST, FOO_DEST_OTHERVER
Oskar Skog's avatar
Oskar Skog committed
121 122 123 124 125 126 127 128 129
ENGINE_SRC := $(srcdir)$(NAME)_engine.py
ENGINE_DEST := $(DESTDIR)$(MODULES)/$(NAME)_engine.py
ENGINE_DEST_OTHERVER := $(DESTDIR)$(MODULES_OTHERVER)/$(NAME)_engine.py
SOLVER_SRC := $(srcdir)$(NAME)_solver.py
SOLVER_DEST := $(DESTDIR)$(MODULES)/$(NAME)_solver.py
SOLVER_DEST_OTHERVER := $(DESTDIR)$(MODULES_OTHERVER)/$(NAME)_solver.py
FIELDS_SRC := $(srcdir)$(NAME)_fields.py
FIELDS_DEST := $(DESTDIR)$(MODULES)/$(NAME)_fields.py
FIELDS_DEST_OTHERVER := $(DESTDIR)$(MODULES_OTHERVER)/$(NAME)_fields.py
130 131 132 133 134

# Installation commands for modules:
NO_OTHERVER := test "$(MODULES_OTHERVER)" "=" non-existent

# See desktop/README
Oskar Skog's avatar
Oskar Skog committed
135 136
FD_ICON_SRC := $(srcdir)desktop/$(NAME)-$$size.png
FD_ICON_DESTDIR := $(DESTDIR)$(prefix)/share/icons/hicolor/$$size/apps
137 138
FD_ICON_SIZES := 16x16 32x32 64x64 256x256
FD_ICON_DEST := $(FD_ICON_DESTDIR)/$(NAME).png
139 140

# See desktop/README
Oskar Skog's avatar
Oskar Skog committed
141 142
BUNDLE := $(DESTDIR)/Applications/$(NAME_C).app

143 144 145 146

check-install-cfg : FORCE
	@$(PRE_INSTALL)
	@: # Cause installation to fail if the configuration is incompatible.
Oskar Skog's avatar
Oskar Skog committed
147 148 149 150
	@$(info) 'Installing or checking configuration'
	@$(INSTALL) -d "$(CFG_DIR)"
	@$(INSTALL_CFG) "$(srcdir)cursescfg" "$(CFG_DIR)/cursescfg"
	@$(INSTALL_CFG) "$(ENGINECFG_STAGE)" "$(CFG_DIR)/enginecfg"
151 152

overwrite-cfg: FORCE
Oskar Skog's avatar
Oskar Skog committed
153 154
	@$(INSTALL) -m 644 "$(srcdir)cursescfg" "$(CFG_DIR)/cursescfg"
	@$(INSTALL) -m 644 "$(ENGINECFG_STAGE)" "$(CFG_DIR)/enginecfg"
155 156 157 158
	@echo "Configuration has been overwritten"
	@echo "All (if any) system-wide modifications are lost"

install-dirs : FORCE
Oskar Skog's avatar
Oskar Skog committed
159 160 161
	@$(info) 'Installing directories'
	@mkdir -p "$(DESTDIR)$(EXECUTABLES)" || true
	@mkdir -p "$(DESTDIR)$(MODULES)" || true
162
	@if [ "$(MODULES_OTHERVER)" != "non-existent" ]; then \
Oskar Skog's avatar
Oskar Skog committed
163
		mkdir -p "$(DESTDIR)$(MODULES_OTHERVER)" || true; \
164 165
	fi
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
166 167 168 169 170 171 172
		mkdir -p "$(DESTDIR)$(prefix)/share/applications" || true; \
		mkdir -p "$(DESTDIR)$(prefix)/share/pixmaps" || true; \
	fi
	@if [ -n "$(macosx)" ]; then \
		$(INSTALL) -d "$(BUNDLE)/Contents"; \
		$(INSTALL) -d "$(BUNDLE)/Contents/MacOS"; \
		$(INSTALL) -d "$(BUNDLE)/Contents/Resources"; \
173 174 175 176 177 178
	fi

install : check-install-cfg install-dirs
	@$(NORMAL_INSTALL)
	@: # When the configuration has been installed, install the main
	@: # program, and then the modules for both versions of Python.
Oskar Skog's avatar
Oskar Skog committed
179 180 181 182 183
	@$(info) 'Installing executable and modules'
	@$(INSTALL) -m 755 "$(MAIN_STAGE)" "$(MAIN_DEST)"
	@$(INSTALL) -m 644 "$(ENGINE_SRC)" "$(ENGINE_DEST)"
	@$(INSTALL) -m 644 "$(SOLVER_SRC)" "$(SOLVER_DEST)"
	@$(INSTALL) -m 644 "$(FIELDS_SRC)" "$(FIELDS_DEST)"
184
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
185 186
		$(info) 'Installing icons and .desktop (NORMAL_INSTALL)'; \
		$(INSTALL) -m 644 "$(FD_DESKTOP_STAGE)" "$(FD_DESKTOP_DEST)"; \
187
		for size in $(FD_ICON_SIZES); do \
Oskar Skog's avatar
Oskar Skog committed
188 189
			$(INSTALL) -d "$(FD_ICON_DESTDIR)"; \
			$(INSTALL) -m 644 "$(FD_ICON_SRC)" "$(FD_ICON_DEST)"; \
190 191 192
		done; \
	fi
	@if [ -n "$(macosx)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
193 194 195 196 197 198 199
		$(info) 'Installing app/bundle'; \
		$(INSTALL) -m 644 "$(OSX_INFO_PLIST)" \
			"$(BUNDLE)/Contents/Info.plist"; \
		$(INSTALL) -m 755 "$(OSX_WRAPPER)" \
			"$(BUNDLE)/Contents/MacOS/$(NAME)-wrapper"; \
		$(INSTALL) -m 644 "$(OSX_ICON)" \
			"$(BUNDLE)/Contents/Resources/icon.icns"; \
200
	fi
Oskar Skog's avatar
Oskar Skog committed
201 202 203 204
	@$(info) 'Symlinking the modules to the other Python'
	@$(NO_OTHERVER) || ln -sf "$(ENGINE_DEST)" "$(ENGINE_DEST_OTHERVER)"
	@$(NO_OTHERVER) || ln -sf "$(SOLVER_DEST)" "$(SOLVER_DEST_OTHERVER)"
	@$(NO_OTHERVER) || ln -sf "$(FIELDS_DEST)" "$(FIELDS_DEST_OTHERVER)"
205 206
	@$(POST_INSTALL)
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
207
		$(info) 'Installing icons and .desktop (POST_INSTALL)'; \
208
		xdg-desktop-menu install --novendor --mode system \
Oskar Skog's avatar
Oskar Skog committed
209
			"$(FD_DESKTOP_DEST)" || true; \
210 211
	fi
	@if [ -n "$(windows)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
212 213
		$(info) 'Installing shortcuts'; \
		$(INSTALL) "$(CYG_ICO_SRC)" "$(CYG_ICO_DEST)"; \
214
		mkshortcut -A -P -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
215
			-i "$(CYG_ICO_DEST)" /bin/bash.exe || \
216
			mkshortcut -P -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
217
			-i "$(CYG_ICO_DEST)" /bin/bash.exe; \
218
		mkshortcut -A -D -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
219
			-i "$(CYG_ICO_DEST)" /bin/bash.exe || \
220
			mkshortcut -D -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
221
			-i "$(CYG_ICO_DEST)" /bin/bash.exe; \
222 223 224
	fi

# http://superuser.com/questions/86078/where-do-start-menu-all-programs-shortcuts-reside
Oskar Skog's avatar
Oskar Skog committed
225 226 227 228
W_C := $(DESTDIR)/cygdrive/c
W_U := $(DESTDIR)`cygpath --unix '$(USERPROFILE)'`
W_F := $(NAME_C).lnk
W_M := /Start Menu/Programs/
229 230 231
# W_C is the C drive, W_U is the users real home directory,
# W_F is the filename and W_M is a part of the path to the start menu
# common for both NT 5 and 6.
Oskar Skog's avatar
Oskar Skog committed
232
CYG_STARTMENU_NT5X_ALL := $(W_C)/Documents and Settings/All Users$(W_M)$(W_F)
233
CYG_STARTMENU_NT5X_ME := $(W_U)$(W_M)$(W_F)
Oskar Skog's avatar
Oskar Skog committed
234 235 236
CYG_STARTMENU_NT6X_ALL := $(W_C)/ProgramData/Microsoft/Windows$(W_M)$(W_F)
CYG_STARTMENU_NT6X_ME := $(W_U)/AppData/Roaming/Microsoft/Windows$(W_M)$(W_F)
CYG_DESKTOP_NT5X_ALL := $(W_C)/Documents and Settings/All Users/Desktop$(W_F)
237 238
CYG_DESKTOP_NT6X_ALL := $(W_C)/Users/Public/Desktop/$(W_F)
CYG_DESKTOP_ME := $(W_U)/Desktop/$(W_F)
239 240 241 242 243

uninstall: FORCE
	@$(PRE_UNINSTALL)
	@if [ -n "$(freedesktop)" ]; then \
		xdg-desktop-menu uninstall --novendor --mode system \
Oskar Skog's avatar
Oskar Skog committed
244
			"$(FD_DESKTOP_DEST)" || true; \
245 246
	fi
	@$(NORMAL_UNINSTALL)
Oskar Skog's avatar
Oskar Skog committed
247 248 249 250
	@-rm -r "$(CFG_DIR)"
	@-rm "$(ENGINE_DEST)" "$(SOLVER_DEST)" "$(FIELDS_DEST)" "$(MAIN_DEST)"
	@$(NO_OTHERVER) || rm "$(ENGINE_DEST_OTHERVER)" \
		"$(SOLVER_DEST_OTHERVER)" "$(FIELDS_DEST_OTHERVER)" || true
251
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
252
		rm "$(FD_DESKTOP_DEST)" || true; \
253
		for size in $(FD_ICON_SIZES); do \
Oskar Skog's avatar
Oskar Skog committed
254
			rm "$(FD_ICON_DEST)" || true; \
255 256 257
		done; \
	fi
	@if [ -n "$(macosx)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
258
		rm -r "$(BUNDLE)" || true; \
259 260
	fi
	@if [ -n "$(windows)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
261 262 263 264 265 266 267
		rm "$(CYG_STARTMENU_NT5X_ALL)" || true; \
		rm "$(CYG_STARTMENU_NT5X_ME)" || true; \
		rm "$(CYG_STARTMENU_NT6X_ALL)" || true; \
		rm "$(CYG_STARTMENU_NT6X_ME)" || true; \
		rm "$(CYG_DESKTOP_NT5X_ALL)" || true; \
		rm "$(CYG_DESKTOP_NT6X_ALL)" || true; \
		rm "$(CYG_DESKTOP_ME)" || true; \
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
	fi

print-destinations: FORCE
	@echo "> Main program:\t\t\t" $(MAIN_DEST)
	@echo "> Engine module:\t\t" $(ENGINE_DEST)
	@echo "> Solver module:\t\t" $(SOLVER_DEST)
	@echo "> Fields module:\t\t" $(FIELDS_DEST)
	@$(NO_OTHERVER) || \
		echo "> Engine module symlink:\t" $(ENGINE_DEST_OTHERVER)
	@$(NO_OTHERVER) || \
		echo "> Solver module symlink:\t" $(SOLVER_DEST_OTHERVER)
	@$(NO_OTHERVER) || \
		echo "> Fields module symlink:\t" $(FIELDS_DEST_OTHERVER)
	@echo "> Configuration files:\t\t" $(CFG_DIR)
	@if [ -n "$(freedesktop)" ]; then \
283 284 285
		echo "> [freedesktop.org] .desktop:\t" $(FD_DESKTOP_DEST); \
		for size in $(FD_ICON_SIZES); do \
			echo "> [freedesktop.org] Icon:\t" $(FD_ICON_DEST); \
286 287 288 289 290 291
		done; \
	fi
	@if [ -n "$(macosx)" ]; then \
		echo "> [Mac OS X] Bundle (App):\t" $(BUNDLE); \
	fi
	@if [ -n "$(windows)" ]; then \
292 293 294 295 296 297 298 299
		echo "> [Windows] Shortcut:\t\t" $(CYG_STARTMENU_NT5X_ALL); \
		echo "> [Windows] Shortcut:\t\t" $(CYG_STARTMENU_NT5X_ME); \
		echo "> [Windows] Shortcut:\t\t" $(CYG_STARTMENU_NT6X_ALL); \
		echo "> [Windows] Shortcut:\t\t" $(CYG_STARTMENU_NT6X_ME); \
		echo "> [Windows] Shortcut:\t\t" $(CYG_DESKTOP_NT5X_ALL); \
		echo "> [Windows] Shortcut:\t\t" $(CYG_DESKTOP_NT6X_ALL); \
		echo "> [Windows] Shortcut:\t\t" $(CYG_DESKTOP_ME); \
		echo "> [Windows] Icon:\t\t" $(CYG_ICO_DEST); \
300 301 302
	fi

PKG_INDIR := $(NAME)-$(VERSION)
Oskar Skog's avatar
Oskar Skog committed
303
PKG := $(builddir)$(PKG_INDIR)
304
# .txt in zips.
305 306
PKG_TEXTFILES := BUGS ChangeLog FAQ INSTALL NEWS README desktop/FILES \
	desktop/README LICENSE
307 308
# Already CRLF + old crap.
PKG_NOCONV := Windows.txt Windows-admin.bat Windows-user.bat \
Oskar Skog's avatar
Oskar Skog committed
309 310
	configure check.sh desktop/$(NAME).ico desktop/desktop.sh \
	desktop/$(NAME)-*.png desktop/$(NAME)*.xcf mkenginecfg
311
PKG_FILES := $(NAME).py $(NAME)_engine.py $(NAME)_fields.py $(NAME)_solver.py \
Oskar Skog's avatar
Oskar Skog committed
312 313
	configure.py Makefile.static install-cfg enginecfg.default \
	cursescfg test.py desktop/Info.plist.py desktop/icon.icns.py
Oskar Skog's avatar
Oskar Skog committed
314
PKG_SUBDIRS := desktop
315 316 317 318 319 320

check: FORCE
	@$(srcdir)check.sh "$(srcdir)" "$(builddir)"

dist : tarballs zip
	@echo Depends on '"'tarballs'"' and '"'zip'"'
Oskar Skog's avatar
Oskar Skog committed
321
	@$(info) 'make check; This will take a while'
322
	@make check >/dev/null
Oskar Skog's avatar
Oskar Skog committed
323
	@$(info) 'make release'
324 325 326
	@make release >/dev/null

release : FORCE
Oskar Skog's avatar
Oskar Skog committed
327
	@cp -t ~www-data/archive/"$(NAME)/" "$(PKG).tar.gz" \
328
		|| echo You are not me.
Oskar Skog's avatar
Oskar Skog committed
329
	@cp -t ~www-data/archive/"$(NAME)/" "$(PKG).zip" \
330 331 332
		|| echo You are not me.

tarballs : FORCE
Oskar Skog's avatar
Oskar Skog committed
333 334
	@mkdir "$(PKG)"
	@for subdir in $(PKG_SUBDIRS); do mkdir "$(PKG)/$$subdir"; done;
335
	@: # Copy all files normally:
Oskar Skog's avatar
Oskar Skog committed
336 337 338
	@for f in $(PKG_TEXTFILES); do cp "$(srcdir)$$f" "$(PKG)/$$f"; done
	@for f in $(PKG_NOCONV); do cp "$(srcdir)$$f" "$(PKG)/$$f"; done
	@for f in $(PKG_FILES); do cp "$(srcdir)$$f" "$(PKG)/$$f"; done
339
	@: # Tar:
Oskar Skog's avatar
Oskar Skog committed
340
	@cd "$(builddir)" && tar -cf "$(PKG_INDIR).tar" "$(PKG_INDIR)"
341
	@: # Compress:
Oskar Skog's avatar
Oskar Skog committed
342
	@gzip -f9k -- "$(PKG).tar"
343
	@: # Clean-up:
Oskar Skog's avatar
Oskar Skog committed
344 345
	@rm -- "$(PKG).tar"
	@rm -r -- "$(PKG)"
346 347

zip : FORCE
Oskar Skog's avatar
Oskar Skog committed
348 349
	@mkdir "$(PKG)"
	@for subdir in $(PKG_SUBDIRS); do mkdir "$(PKG)/$$subdir"; done;
350 351
	@: # /(.*)$/ -> /\1.txt/
	@for f in $(PKG_TEXTFILES); do \
Oskar Skog's avatar
Oskar Skog committed
352
		unix2dos -q -n "$(srcdir)$$f" "$(PKG)/$$f.txt"; \
353
	done
Oskar Skog's avatar
Oskar Skog committed
354 355
	@: # Already with CRLF line ends + shell scripts.
	@for f in $(PKG_NOCONV); do cp "$(srcdir)$$f" "$(PKG)/$$f"; done
356
	@: # Notepad is stupid.
Oskar Skog's avatar
Oskar Skog committed
357 358 359 360 361
	@for f in $(PKG_FILES); \
		do unix2dos -q -n "$(srcdir)$$f" "$(PKG)/$$f"; \
	done
	@cd "$(builddir)" && zip -rXq "$(PKG_INDIR).zip" "$(PKG_INDIR)"
	@rm -r -- "$(PKG)"
362 363 364


FORCE: