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

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

# If you have a suggestion for a name, tell me about it:
# <[email protected]>

# 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
15
VERSION := 0.1.20
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
ALL_STAGE := "$(MAIN_STAGE)" "$(OSX_WRAPPER)" "$(OSX_INFO_PLIST)" \
	"$(OSX_ICON)" "$(builddir)check.py" "$(FD_DESKTOP_STAGE)"

# all : FORCE
# 	@: # Create the appropriate shebang line
# 	@echo "#!`which python`" > $(MAIN_STAGE)
# 	@cat $(MAIN_SRC) >> $(MAIN_STAGE)
# 	@: # Refer to desktop/README for information about the following.
# 	@if [ -n "$(freedesktop)" ]; then \
# 		$(FD_MK_DESKTOP) $(FD_DESKTOP_STAGE) $(NAME) "$(NAME_C)" \
# 			"$(DESCRIPTION) -- version $(VERSION)"; \
# 	fi
# 	@if [ -n "$(macosx)" ]; then \
# 		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)"; \
# 	fi
all : $(MAIN_STAGE) $(ENGINECFG_STAGE)
	@$(info) 'Maybe building .desktop and app/bundle'
95
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
96
		cd "$(builddir)" && make build-freedesktop > /dev/null; \
97 98
	fi
	@if [ -n "$(macosx)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
99
		cd "$(builddir)" && make build-macosx > /dev/null; \
100 101
	fi

Oskar Skog's avatar
Oskar Skog committed
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
$(MAIN_STAGE) : $(MAIN_SRC)
	@$(info) 'Creating the appropriate shebang line'
	@echo "#!`which python`" > "$(MAIN_STAGE)"
	@cat "$(MAIN_SRC)" >> "$(MAIN_STAGE)"

$(ENGINECFG_STAGE) :
	@$(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)"

124 125 126
clean : FORCE
	@rm $(ALL_STAGE) 2> /dev/null || true
	@: # Remove the bytecode files.
Oskar Skog's avatar
Oskar Skog committed
127 128
	@rm -- "$(srcdir)"*.pyc 2> /dev/null || true
	@rm -r -- "$(srcdir)"__pycache__/ 2> /dev/null || true
129 130

# configure.py will choose /usr/ucb/install on Solares.
131
INSTALL ?= install
132

Oskar Skog's avatar
Oskar Skog committed
133 134 135
INSTALL_CFG := python "$(srcdir)install-cfg" "$(INSTALL)"

CFG_DIR := $(DESTDIR)/etc/$(NAME)
136
# Modules: FOO_SRC, FOO_DEST, FOO_DEST_OTHERVER
Oskar Skog's avatar
Oskar Skog committed
137 138 139 140 141 142 143 144 145
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
146 147 148 149 150

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

# See desktop/README
Oskar Skog's avatar
Oskar Skog committed
151 152
FD_ICON_SRC := $(srcdir)desktop/$(NAME)-$$size.png
FD_ICON_DESTDIR := $(DESTDIR)$(prefix)/share/icons/hicolor/$$size/apps
153 154
FD_ICON_SIZES := 16x16 32x32 64x64 256x256
FD_ICON_DEST := $(FD_ICON_DESTDIR)/$(NAME).png
155 156

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

159 160 161 162

check-install-cfg : FORCE
	@$(PRE_INSTALL)
	@: # Cause installation to fail if the configuration is incompatible.
Oskar Skog's avatar
Oskar Skog committed
163 164 165 166
	@$(info) 'Installing or checking configuration'
	@$(INSTALL) -d "$(CFG_DIR)"
	@$(INSTALL_CFG) "$(srcdir)cursescfg" "$(CFG_DIR)/cursescfg"
	@$(INSTALL_CFG) "$(ENGINECFG_STAGE)" "$(CFG_DIR)/enginecfg"
167 168

overwrite-cfg: FORCE
Oskar Skog's avatar
Oskar Skog committed
169 170
	@$(INSTALL) -m 644 "$(srcdir)cursescfg" "$(CFG_DIR)/cursescfg"
	@$(INSTALL) -m 644 "$(ENGINECFG_STAGE)" "$(CFG_DIR)/enginecfg"
171 172 173 174
	@echo "Configuration has been overwritten"
	@echo "All (if any) system-wide modifications are lost"

install-dirs : FORCE
Oskar Skog's avatar
Oskar Skog committed
175 176 177
	@$(info) 'Installing directories'
	@mkdir -p "$(DESTDIR)$(EXECUTABLES)" || true
	@mkdir -p "$(DESTDIR)$(MODULES)" || true
178
	@if [ "$(MODULES_OTHERVER)" != "non-existent" ]; then \
Oskar Skog's avatar
Oskar Skog committed
179
		mkdir -p "$(DESTDIR)$(MODULES_OTHERVER)" || true; \
180 181
	fi
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
182 183 184 185 186 187 188
		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"; \
189 190 191 192 193 194
	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
195 196 197 198 199
	@$(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)"
200
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
201 202
		$(info) 'Installing icons and .desktop (NORMAL_INSTALL)'; \
		$(INSTALL) -m 644 "$(FD_DESKTOP_STAGE)" "$(FD_DESKTOP_DEST)"; \
203
		for size in $(FD_ICON_SIZES); do \
Oskar Skog's avatar
Oskar Skog committed
204 205
			$(INSTALL) -d "$(FD_ICON_DESTDIR)"; \
			$(INSTALL) -m 644 "$(FD_ICON_SRC)" "$(FD_ICON_DEST)"; \
206 207 208
		done; \
	fi
	@if [ -n "$(macosx)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
209 210 211 212 213 214 215
		$(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"; \
216
	fi
Oskar Skog's avatar
Oskar Skog committed
217 218 219 220
	@$(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)"
221 222
	@$(POST_INSTALL)
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
223
		$(info) 'Installing icons and .desktop (POST_INSTALL)'; \
224
		xdg-desktop-menu install --novendor --mode system \
Oskar Skog's avatar
Oskar Skog committed
225
			"$(FD_DESKTOP_DEST)" || true; \
226 227
	fi
	@if [ -n "$(windows)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
228 229
		$(info) 'Installing shortcuts'; \
		$(INSTALL) "$(CYG_ICO_SRC)" "$(CYG_ICO_DEST)"; \
230
		mkshortcut -A -P -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
231
			-i "$(CYG_ICO_DEST)" /bin/bash.exe || \
232
			mkshortcut -P -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
233
			-i "$(CYG_ICO_DEST)" /bin/bash.exe; \
234
		mkshortcut -A -D -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
235
			-i "$(CYG_ICO_DEST)" /bin/bash.exe || \
236
			mkshortcut -D -a '-lc $(NAME)' -n "$(NAME_C)" \
Oskar Skog's avatar
Oskar Skog committed
237
			-i "$(CYG_ICO_DEST)" /bin/bash.exe; \
238 239 240
	fi

# http://superuser.com/questions/86078/where-do-start-menu-all-programs-shortcuts-reside
Oskar Skog's avatar
Oskar Skog committed
241 242 243 244
W_C := $(DESTDIR)/cygdrive/c
W_U := $(DESTDIR)`cygpath --unix '$(USERPROFILE)'`
W_F := $(NAME_C).lnk
W_M := /Start Menu/Programs/
245 246 247
# 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
248
CYG_STARTMENU_NT5X_ALL := $(W_C)/Documents and Settings/All Users$(W_M)$(W_F)
249
CYG_STARTMENU_NT5X_ME := $(W_U)$(W_M)$(W_F)
Oskar Skog's avatar
Oskar Skog committed
250 251 252
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)
253 254
CYG_DESKTOP_NT6X_ALL := $(W_C)/Users/Public/Desktop/$(W_F)
CYG_DESKTOP_ME := $(W_U)/Desktop/$(W_F)
255 256 257 258 259

uninstall: FORCE
	@$(PRE_UNINSTALL)
	@if [ -n "$(freedesktop)" ]; then \
		xdg-desktop-menu uninstall --novendor --mode system \
Oskar Skog's avatar
Oskar Skog committed
260
			"$(FD_DESKTOP_DEST)" || true; \
261 262
	fi
	@$(NORMAL_UNINSTALL)
Oskar Skog's avatar
Oskar Skog committed
263 264 265 266
	@-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
267
	@if [ -n "$(freedesktop)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
268
		rm "$(FD_DESKTOP_DEST)" || true; \
269
		for size in $(FD_ICON_SIZES); do \
Oskar Skog's avatar
Oskar Skog committed
270
			rm "$(FD_ICON_DEST)" || true; \
271 272 273
		done; \
	fi
	@if [ -n "$(macosx)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
274
		rm -r "$(BUNDLE)" || true; \
275 276
	fi
	@if [ -n "$(windows)" ]; then \
Oskar Skog's avatar
Oskar Skog committed
277 278 279 280 281 282 283
		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; \
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298
	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 \
299 300 301
		echo "> [freedesktop.org] .desktop:\t" $(FD_DESKTOP_DEST); \
		for size in $(FD_ICON_SIZES); do \
			echo "> [freedesktop.org] Icon:\t" $(FD_ICON_DEST); \
302 303 304 305 306 307
		done; \
	fi
	@if [ -n "$(macosx)" ]; then \
		echo "> [Mac OS X] Bundle (App):\t" $(BUNDLE); \
	fi
	@if [ -n "$(windows)" ]; then \
308 309 310 311 312 313 314 315
		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); \
316 317 318
	fi

PKG_INDIR := $(NAME)-$(VERSION)
Oskar Skog's avatar
Oskar Skog committed
319
PKG := $(builddir)$(PKG_INDIR)
320 321 322 323 324
# .txt in zips.
PKG_TEXTFILES := BUGS ChangeLog FAQ FILES INSTALL NEWS README desktop/FILES \
	desktop/README
# Already CRLF + old crap.
PKG_NOCONV := Windows.txt Windows-admin.bat Windows-user.bat \
Oskar Skog's avatar
Oskar Skog committed
325 326
	configure check.sh desktop/$(NAME).ico desktop/desktop.sh \
	desktop/$(NAME)-*.png desktop/$(NAME)*.xcf mkenginecfg
327
PKG_FILES := $(NAME).py $(NAME)_engine.py $(NAME)_fields.py $(NAME)_solver.py \
Oskar Skog's avatar
Oskar Skog committed
328 329
	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
330
PKG_SUBDIRS := desktop
331 332 333 334 335 336

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

dist : tarballs zip
	@echo Depends on '"'tarballs'"' and '"'zip'"'
Oskar Skog's avatar
Oskar Skog committed
337
	@$(info) 'make check; This will take a while'
338
	@make check >/dev/null
Oskar Skog's avatar
Oskar Skog committed
339
	@$(info) 'make release'
340 341 342
	@make release >/dev/null

release : FORCE
Oskar Skog's avatar
Oskar Skog committed
343
	@cp -t ~www-data/archive/"$(NAME)/" "$(PKG).tar.gz" \
344
		|| echo You are not me.
Oskar Skog's avatar
Oskar Skog committed
345
	@cp -t ~www-data/archive/"$(NAME)/" "$(PKG).zip" \
346 347 348
		|| echo You are not me.

tarballs : FORCE
Oskar Skog's avatar
Oskar Skog committed
349 350
	@mkdir "$(PKG)"
	@for subdir in $(PKG_SUBDIRS); do mkdir "$(PKG)/$$subdir"; done;
351
	@: # Copy all files normally:
Oskar Skog's avatar
Oskar Skog committed
352 353 354
	@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
355
	@: # Tar:
Oskar Skog's avatar
Oskar Skog committed
356
	@cd "$(builddir)" && tar -cf "$(PKG_INDIR).tar" "$(PKG_INDIR)"
357
	@: # Compress:
Oskar Skog's avatar
Oskar Skog committed
358
	@gzip -f9k -- "$(PKG).tar"
359
	@: # Clean-up:
Oskar Skog's avatar
Oskar Skog committed
360 361
	@rm -- "$(PKG).tar"
	@rm -r -- "$(PKG)"
362 363

zip : FORCE
Oskar Skog's avatar
Oskar Skog committed
364 365
	@mkdir "$(PKG)"
	@for subdir in $(PKG_SUBDIRS); do mkdir "$(PKG)/$$subdir"; done;
366 367
	@: # /(.*)$/ -> /\1.txt/
	@for f in $(PKG_TEXTFILES); do \
Oskar Skog's avatar
Oskar Skog committed
368
		unix2dos -q -n "$(srcdir)$$f" "$(PKG)/$$f.txt"; \
369
	done
Oskar Skog's avatar
Oskar Skog committed
370 371
	@: # Already with CRLF line ends + shell scripts.
	@for f in $(PKG_NOCONV); do cp "$(srcdir)$$f" "$(PKG)/$$f"; done
372
	@: # Notepad is stupid.
Oskar Skog's avatar
Oskar Skog committed
373 374 375 376 377
	@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)"
378 379 380


FORCE: