File Makefile deleted (index cb5f5dd..0000000) |
1 |
|
NAME=honeydew |
|
2 |
|
VERSION=0.1.2-WIP |
|
3 |
|
CLASSIFIER=1.27 |
|
4 |
|
LANG=en |
|
5 |
|
|
|
6 |
|
NAMEFULL=$(NAME)-$(VERSION)-$(CLASSIFIER)-$(LANG) |
|
7 |
|
NAMEASSEMBLY=$(NAME)-$(VERSION)-project |
|
8 |
|
|
|
9 |
|
SHELL=/bin/sh |
|
10 |
|
.SUFFIXES: |
|
11 |
|
|
|
12 |
|
BUILDDIR=target |
|
13 |
|
srcdir=. |
|
14 |
|
|
|
15 |
|
.PRECIOUS: *.w3x *.w3m *.w3n |
|
16 |
|
.PHONY: clean distclean dist run check all $(BUILDDIR)/$(NAMEASSEMBLY).zip |
|
17 |
|
|
|
18 |
|
GIT=git |
|
19 |
|
GPG=gpg |
|
20 |
|
SMPQ=smpq |
|
21 |
|
|
|
22 |
|
M4=m4 |
|
23 |
|
M4FLAGS=-I "$(srcdir)" -E |
|
24 |
|
|
|
25 |
|
PJASS=pjass |
|
26 |
|
PJASSFLAGS="$(srcdir)/etc/common.j" "$(srcdir)/etc/Blizzard.j" -rb +filter +shadow +checkglobalsinit +checkstringhash |
|
27 |
|
SNIPPETS=$(wildcard $(srcdir)/src/*.j) |
|
28 |
|
|
|
29 |
|
WAR3EXE=Frozen\ Throne.exe |
|
30 |
|
# TODO add configurable map path for testing |
|
31 |
|
MAPSDIR="Maps/$(NAME)/" |
|
32 |
|
|
|
33 |
|
#vpath *.j src:$(BUILDDIR) |
|
34 |
|
|
|
35 |
|
include $(srcdir)/src/Makefile |
|
36 |
|
sinclude $(srcdir)/Makefile.config |
|
37 |
|
TESTS= |
|
38 |
|
sinclude $(srcdir)/test/Makefile |
|
39 |
|
|
|
40 |
|
all: $(BUILDDIR)/$(NAMEFULL).w3x $(BUILDDIR)/war3map.j | $(BUILDDIR) |
|
41 |
|
$(PJASS) $(PJASSFLAGS) "$(BUILDDIR)/war3map.j" |
|
42 |
|
cd "$(BUILDDIR)" && \ |
|
43 |
|
$(SMPQ) --append --overwrite "$(NAMEFULL).w3x" "war3map.j" && \ |
|
44 |
|
$(SMPQ) --list "$(NAMEFULL).w3x" |
|
45 |
|
|
|
46 |
|
dist: $(BUILDDIR)/$(NAMEASSEMBLY).zip $(BUILDDIR)/$(NAMEASSEMBLY).zip.sig | $(BUILDDIR) |
|
47 |
|
|
|
48 |
|
install: all |
|
49 |
|
cp "$(BUILDDIR)/$(NAMEFULL).w3x" "$(DESTDIR)" |
|
50 |
|
|
|
51 |
|
$(BUILDDIR)/$(NAMEFULL).w3x: $(srcdir)/$(NAME).w3x | $(BUILDDIR) |
|
52 |
|
cp "$(srcdir)/$(NAME).w3x" "$(BUILDDIR)/$(NAMEFULL).w3x" |
|
53 |
|
|
|
54 |
|
$(BUILDDIR): |
|
55 |
|
mkdir "$@" |
|
56 |
|
|
|
57 |
|
check: $(SNIPPETS) $(TESTS) |
|
58 |
|
$(PJASS) $(PJASSFLAGS) $^ |
|
59 |
|
|
|
60 |
|
# All `m4` sources must be loaded before all `Jass` sources. |
|
61 |
|
# Source file `jass_globals.m4` must be loaded after all other `m4` sources and |
|
62 |
|
# before all `Jass` sources. |
|
63 |
|
$(BUILDDIR)/war3map.j: $(srcdir)/src/jass_module.m4 $(srcdir)/src/jass_globals.m4 $(SNIPPETS) $(TESTS) | $(BUILDDIR) check |
|
64 |
|
$(M4) $(M4FLAGS) $^ > "$@" |
|
65 |
|
|
|
66 |
|
$(BUILDDIR)/$(NAMEASSEMBLY).zip: | $(BUILDDIR) |
|
67 |
|
$(GIT) archive --format zip --output "$@" --prefix "$(NAME)-$(VERSION)/" HEAD |
|
68 |
|
|
|
69 |
|
$(BUILDDIR)/$(NAMEASSEMBLY).zip.sig: $(BUILDDIR)/$(NAMEASSEMBLY).zip |
|
70 |
|
$(GPG) --detach-sign --yes $^ |
|
71 |
|
|
|
72 |
|
clean: |
|
73 |
|
$(GIT) clean -i -x "$(BUILDDIR)" |
|
74 |
|
|
|
75 |
|
distclean: |
|
76 |
|
$(GIT) clean -i -x "$(srcdir)" |
|
77 |
|
|
|
78 |
|
run: all |
|
79 |
|
# Path to the map relative to data directory (game installation directory in almost every case). |
|
80 |
|
# Must be given exact file name. Wildcards or tokens will not be expanded. |
|
81 |
|
$(WAR3EXE) -loadfile "Maps/${NAME}/${NAMEFULL}.w3x" |
|
File README.adoc renamed from README.md (similarity 73%) (mode: 100644) (index eca50c7..6672e4b) |
1 |
|
# honeydew |
|
|
1 |
|
= honeydew |
|
2 |
|
Vladyslav Bondarenko <vladyslavbond@pm.me> |
|
3 |
|
0.1.3WIP, 2024-04-13 |
2 |
4 |
|
|
3 |
5 |
This is a custom scenario for an old computer game WarCraft 3: The Frozen |
This is a custom scenario for an old computer game WarCraft 3: The Frozen |
4 |
6 |
Throne, made by fan community of modders. |
Throne, made by fan community of modders. |
5 |
7 |
|
|
6 |
8 |
The only supported version of the game is 1.27. |
The only supported version of the game is 1.27. |
7 |
9 |
|
|
8 |
|
## Players |
|
|
10 |
|
== Players |
9 |
11 |
|
|
10 |
12 |
Players should only be interested in the map archive file, recognizeable by the |
Players should only be interested in the map archive file, recognizeable by the |
11 |
13 |
file extension `*.w3x`. This repository contains scripts that are used to |
file extension `*.w3x`. This repository contains scripts that are used to |
|
... |
... |
The complete scenario that is ready to be played or tested should be found |
16 |
18 |
naturally on fan websites. This repository and instructions it contains are |
naturally on fan websites. This repository and instructions it contains are |
17 |
19 |
aimed at developers first. |
aimed at developers first. |
18 |
20 |
|
|
19 |
|
## Developers |
|
|
21 |
|
== Developers |
20 |
22 |
|
|
21 |
|
TODO add detailed build instructions |
|
22 |
|
|
|
23 |
|
Instructions on how to build the project are contained in `doc/build.md` text |
|
|
23 |
|
Instructions on how to build the project are contained in `doc/build.adoc` text |
24 |
24 |
file. Beside the original game itself (patch 1.27), required tools include: |
file. Beside the original game itself (patch 1.27), required tools include: |
25 |
25 |
`git`, `pjass`, `m4`, `smpq`, `make`. |
`git`, `pjass`, `m4`, `smpq`, `make`. |
26 |
26 |
|
|
|
... |
... |
Source scripts for custom spells and other Jass utilities are under `src/` |
28 |
28 |
directory. Most of these may be easily exported to other projects, without |
directory. Most of these may be easily exported to other projects, without |
29 |
29 |
understanding the whole build process. |
understanding the whole build process. |
30 |
30 |
|
|
31 |
|
## Copying |
|
|
31 |
|
Useful `m4` macros may also be found under `src/` directory. |
|
32 |
|
|
|
33 |
|
include::doc/build.adoc[honeydew build instructions] |
|
34 |
|
|
|
35 |
|
== Copying |
32 |
36 |
|
|
33 |
37 |
Everyone is free to use, modify or share this project. Text file `COPYING.txt` |
Everyone is free to use, modify or share this project. Text file `COPYING.txt` |
34 |
38 |
contains more details on the mode in which this project is shared. |
contains more details on the mode in which this project is shared. |
35 |
39 |
|
|
36 |
|
## Authors |
|
|
40 |
|
== Authors |
37 |
41 |
|
|
38 |
42 |
Text file `AUTHORS.txt` contains list of contributions that were made |
Text file `AUTHORS.txt` contains list of contributions that were made |
39 |
|
explicitly for this project alone. Tools and experience employed are outside of |
|
40 |
|
it's scope, and are tracked entirely separately in their respective projects. |
|
|
43 |
|
*explicitly* for this project alone. Tools and experience that were relied upon |
|
44 |
|
during development are outside of it's scope, and are tracked entirely |
|
45 |
|
separately in their respective projects. |
File doc/build.adoc added (mode: 100644) (index 0000000..7f7d3c4) |
|
1 |
|
== honeydew build instructions |
|
2 |
|
|
|
3 |
|
=== Motivation |
|
4 |
|
|
|
5 |
|
The purpose of the custom build process is to aid script developer convenience |
|
6 |
|
and add some advanced development features. Specifically, macro preprocessor, |
|
7 |
|
dependency management, detailed error messages, automated packaging, |
|
8 |
|
versioning. Also planned for eventual implementation are globalization and |
|
9 |
|
semi-automated testing. |
|
10 |
|
|
|
11 |
|
Most of the major features were implemented in the past by Word Editor |
|
12 |
|
modifications, like Jass New Gen Pack or vjass. Instead of implementing a |
|
13 |
|
custom integrated solution, this project relies much more on free generic |
|
14 |
|
software development tools. |
|
15 |
|
|
|
16 |
|
=== Dependencies |
|
17 |
|
|
|
18 |
|
.List of build tools |
|
19 |
|
* `make` build orchestration tool; |
|
20 |
|
* `sh` used by `make` to execute commands on the operating system; |
|
21 |
|
* `m4` generic macro preprocessor, used to process source files; |
|
22 |
|
* `git` employed for versioning, development history and distribution; |
|
23 |
|
* `pjass` source code validation tool; |
|
24 |
|
* `smpq` MPQ archiver that only features command-line interface; |
|
25 |
|
|
|
26 |
|
* `jasstags` (optional, not required for the build) for developers that use |
|
27 |
|
`vim` or `emacs` text processors https://gitlab.com/vladyslavbond/jasstags |
|
28 |
|
|
|
29 |
|
==== Windows |
|
30 |
|
|
|
31 |
|
To build this project on Windows advanced user knowledge is required. |
|
32 |
|
Contributions to the instructions are welcome. Obviously, the resulting map |
|
33 |
|
archive file must work in game regardless of the underlying operating system. |
|
34 |
|
|
|
35 |
|
.Useful options for Windows |
|
36 |
|
* `Git Bash` for Windows https://gitforwindows.org/ |
|
37 |
|
* `busybox` for Windows https://frippery.org/busybox/index.html |
|
38 |
|
* `m4` for Windows https://gnuwin32.sourceforge.net/packages/m4.htm |
|
39 |
|
* `GNU make` for Windows https://gnuwin32.sourceforge.net/packages/make.htm |
|
40 |
|
* `pjass` is readily available for Windows bundled with community tools like |
|
41 |
|
`JNGP` or bundled with the latest versions of the game itself |
|
42 |
|
https://github.com/lep/pjass https://jass.sourceforge.net/ |
|
43 |
|
|
|
44 |
|
`Git Bash` provides `sh` and `git`. |
|
45 |
|
|
|
46 |
|
`busybox` provides `sh` and conditionally `make`, specifically `pdpmake`. |
|
47 |
|
Alternatively, a port of `GNU` `make` (`gmake`) may be installed. |
|
48 |
|
|
|
49 |
|
A port of `GNU m4` is probably the easiest implementation of `m4` to install. |
|
50 |
|
|
|
51 |
|
As of version 0.1.3, the project build was tested with `gmake`, `pdpmake`, `m4` |
|
52 |
|
and `om4`, with highest compatibility settings possible. Therefore, most tools |
|
53 |
|
that claim to implement `make` or `m4` should work. |
|
54 |
|
|
|
55 |
|
`smpq` was not tested outside Debian. Supposedly, the following release should |
|
56 |
|
work for Windows. https://launchpad.net/smpq |
|
57 |
|
|
|
58 |
|
`smpq` may be effectively replaced by any of the MPQ editors for Windows that |
|
59 |
|
support command-line arguments. The problem then is in patching the project's |
|
60 |
|
`makefile` to employ different command argument order. |
|
61 |
|
|
|
62 |
|
==== Debian 12 (bullseye) |
|
63 |
|
|
|
64 |
|
---- |
|
65 |
|
apt-get install git m4 make smpq |
|
66 |
|
---- |
|
67 |
|
|
|
68 |
|
Most importantly, it requires `pjass`. Some distributions of the game may bundle |
|
69 |
|
`pjass`. |
|
70 |
|
|
|
71 |
|
Upstream `pjass` repository may be found here: |
|
72 |
|
|
|
73 |
|
https://github.com/lep/pjass |
|
74 |
|
|
|
75 |
|
The upstream version will likely require compilation to be installed. `pjass` |
|
76 |
|
is written in *C* and depends on `GNU make` and `bison`. |
|
77 |
|
|
|
78 |
|
Alternatively, a fork of `pjass` with Debian 12 packaging may be found here: |
|
79 |
|
|
|
80 |
|
https://rocketgit.com/user/vrtc/pjass |
|
81 |
|
|
|
82 |
|
==== Build |
|
83 |
|
|
|
84 |
|
After the map is saved in the World Editor, the World Editor will remove all |
|
85 |
|
the patches this project makes to the map archive file. Therefore, the map will |
|
86 |
|
become unplayable. |
|
87 |
|
|
|
88 |
|
To make the scripts work, this build process must be followed. Every time |
|
89 |
|
updates to terrain or objects need to be saved, the build process for scripts |
|
90 |
|
must be repeated again, to make sure the map archive file is patched correctly. |
|
91 |
|
|
|
92 |
|
The only supported version of the game is 1.27. It may work on some slightly |
|
93 |
|
older or slightly newer versions. |
|
94 |
|
|
|
95 |
|
In an ideal world, simply executing the `Makefile` should produce a valid map |
|
96 |
|
archive file. The instructions assume that the current directory is the |
|
97 |
|
project's root, that is base directory, that is sources directory (`srcdir`). |
|
98 |
|
|
|
99 |
|
The following command should update the map archive file `honeydew.w3x` with |
|
100 |
|
latest changes to the source files in `${srcdir}/src/` directory. |
|
101 |
|
|
|
102 |
|
---- |
|
103 |
|
make |
|
104 |
|
---- |
|
105 |
|
|
|
106 |
|
Check Jass script snippets for validity. This does not necessarily require the |
|
107 |
|
game installed, only `pjass`, `m4` and `make`. |
|
108 |
|
|
|
109 |
|
---- |
|
110 |
|
make check |
|
111 |
|
---- |
|
112 |
|
|
|
113 |
|
Build playable map archive file. This requires `pjass`, `m4`, `make` and |
|
114 |
|
`smpq`. This is synonymous with just calling `make`. |
|
115 |
|
|
|
116 |
|
Initially, it loads `m4` macros. Then, it processes every `Jass` source file |
|
117 |
|
and produces a `war3map.j` file. `pjass` validates the sources every step. |
|
118 |
|
Finally, the map MPQ archive `*.w3x` is patched using `smpq` with the produced |
|
119 |
|
`war3map.j` script. |
|
120 |
|
|
|
121 |
|
---- |
|
122 |
|
make all |
|
123 |
|
---- |
|
124 |
|
|
|
125 |
|
Assemble a distribution zip package, that contains the playable map and all the |
|
126 |
|
sources needed to rebuild it. This requires all of the above and `git`. This |
|
127 |
|
only works with a valid `git` repository and only on committed files. |
|
128 |
|
|
|
129 |
|
---- |
|
130 |
|
make dist |
|
131 |
|
---- |
|
132 |
|
|
|
133 |
|
Test the map in the game. |
|
134 |
|
|
|
135 |
|
This requires the game to be installed. Additionally, this requires the |
|
136 |
|
developer to supply additional settings to the build tool. See advanced build |
|
137 |
|
options. |
|
138 |
|
|
|
139 |
|
---- |
|
140 |
|
make run |
|
141 |
|
---- |
|
142 |
|
|
|
143 |
|
Copy the map archive to the game data directory (Maps/), so that it can be |
|
144 |
|
played. See advanced build options. |
|
145 |
|
|
|
146 |
|
---- |
|
147 |
|
make install |
|
148 |
|
---- |
|
149 |
|
|
|
150 |
|
Build and run the map with development stage test scripts. See advanced build |
|
151 |
|
options for details. |
|
152 |
|
|
|
153 |
|
---- |
|
154 |
|
make TESTS=test/test.j run |
|
155 |
|
---- |
|
156 |
|
|
|
157 |
|
===== Advanced build options |
|
158 |
|
|
|
159 |
|
The following `make` tasks should help troubleshooting. Generally, the project |
|
160 |
|
aims to to follow GNU `make` convetions whenever possible. |
|
161 |
|
|
|
162 |
|
At least basic knowledge of `make` is required. Any flavour should be |
|
163 |
|
applicable. |
|
164 |
|
|
|
165 |
|
Optionally, create a build directory and change into it. The directory may be a |
|
166 |
|
mounted temporary file system to spare the hard drive and loading time. |
|
167 |
|
|
|
168 |
|
---- |
|
169 |
|
mkdir -p target/ |
|
170 |
|
cd target/ |
|
171 |
|
---- |
|
172 |
|
|
|
173 |
|
Then, redefine the necessary variables to allow the build tool to navigate |
|
174 |
|
correctly. Choose one of the methods. |
|
175 |
|
|
|
176 |
|
First, using command line arguments. |
|
177 |
|
|
|
178 |
|
`${HOME}/honeydew/` is the example source directory. |
|
179 |
|
|
|
180 |
|
WARNING: Trailing slashes are *mandatory*. |
|
181 |
|
|
|
182 |
|
---- |
|
183 |
|
make -f ${HOME}/honeydew/makefile srcidr=${HOME}/honeydew/ DESTDIR=${HOME}/games/warcraft3/ datadir=Maps/ |
|
184 |
|
---- |
|
185 |
|
|
|
186 |
|
Second, using a *local* `makefile`. Create and save a text file with your local |
|
187 |
|
settings and load it after the primary `makefile`. |
|
188 |
|
|
|
189 |
|
local.mk: |
|
190 |
|
|
|
191 |
|
---- |
|
192 |
|
srcidr=/home/myuser/honeydew/ |
|
193 |
|
DESTDIR=/home/myuser/games/warcraft3/ |
|
194 |
|
datadir=Maps/ |
|
195 |
|
WAR3EXE=wine64 ~/local/share/wine-devel/drive_c/games/warcraft3-1.27/Frozen\ Throne.exe -opengl -window |
|
196 |
|
---- |
|
197 |
|
|
|
198 |
|
---- |
|
199 |
|
make -f ${HOME}/honeydew/makefile -f local.mk |
|
200 |
|
---- |
|
201 |
|
|
|
202 |
|
`srcdir` is the absolute path (preferably) to the project's source directory. Usually where `git` repository was cloned to. |
|
203 |
|
|
|
204 |
|
`DESTDIR` is the absolute path to game installation directory. |
|
205 |
|
|
|
206 |
|
`datadir` is a *relative* path to game installation directory, where maps will |
|
207 |
|
be installed to. |
|
208 |
|
|
|
209 |
|
`WAR3EXE` is a command to run the game itself. `make` task will append to it |
|
210 |
|
the path to the map archive to load, constructed with other variables. |
|
211 |
|
|
|
212 |
|
To enable tests, list test source files like this. The test source files will |
|
213 |
|
be included in the build process and will affect the runtime (gameplay). |
|
214 |
|
|
|
215 |
|
The game calls `function` `test_init` from `main.j:function init`, to |
|
216 |
|
initialize all tests at runtime. The function `test_init` must take no |
|
217 |
|
arguments and return no values. |
|
218 |
|
|
|
219 |
|
`TESTS` variable (macro) is a list of source files that must be included to |
|
220 |
|
test the map in game. As of 0.1.3, only one test case is provided. |
|
221 |
|
|
|
222 |
|
---- |
|
223 |
|
TESTS=${srcdir}/test/test.j |
|
224 |
|
---- |
File doc/build.md deleted (index 752d2be..0000000) |
1 |
|
# honeydew build instructions |
|
2 |
|
|
|
3 |
|
## Motivation |
|
4 |
|
|
|
5 |
|
The purpose of the custom build process is to aid script developer convenience |
|
6 |
|
and add some advanced development features. Specifically, macro preprocessor, |
|
7 |
|
dependency management, detailed error messages, automated packaging, |
|
8 |
|
versioning. Also planned for eventual implementation are globalization and |
|
9 |
|
semi-automated testing. |
|
10 |
|
|
|
11 |
|
Most of the major features were implemented in the past by Word Editor |
|
12 |
|
modifications, like Jass New Gen Pack or vjass. Instead of implementing a |
|
13 |
|
custom integrated solution, this project relies much more on free generic |
|
14 |
|
software development tools. |
|
15 |
|
|
|
16 |
|
## Dependencies |
|
17 |
|
|
|
18 |
|
### Windows |
|
19 |
|
|
|
20 |
|
To build this project on Windows advanced user knowledge is required. |
|
21 |
|
Contributions to the instructions are welcome. Obviously, the resulting map |
|
22 |
|
archive file must work in game regardless of the underlying operating system. |
|
23 |
|
|
|
24 |
|
Most likely, at least Windows `Git Bash` will be required. First to install |
|
25 |
|
`git`, second to install UNIX-like shell, that is required for `make` to work. |
|
26 |
|
|
|
27 |
|
`make` and `m4` should be easy to install after that, as they are popular |
|
28 |
|
tools. |
|
29 |
|
|
|
30 |
|
`smpq` is much more obscure. It may require some more effort to install. |
|
31 |
|
|
|
32 |
|
`smpq` may be effectively replaced by any of the MPQ editors for Windows that |
|
33 |
|
support command-line arguments. The problem then is in patching the project's |
|
34 |
|
"`Makefile`" to employ different command argument order. Users are on their own |
|
35 |
|
here. |
|
36 |
|
|
|
37 |
|
### Debian 12 (bullseye) |
|
38 |
|
|
|
39 |
|
``` |
|
40 |
|
apt-get install git m4 make smpq |
|
41 |
|
``` |
|
42 |
|
|
|
43 |
|
Most importantly, it requires `pjass`. Some distributions of the game may bundle |
|
44 |
|
`pjass`. |
|
45 |
|
|
|
46 |
|
Upstream `pjass` repository may be found here: |
|
47 |
|
|
|
48 |
|
https://github.com/lep/pjass |
|
49 |
|
|
|
50 |
|
Fork of `pjass` with Debian 12 packaging may be found here: |
|
51 |
|
|
|
52 |
|
https://rocketgit.com/user/vrtc/pjass |
|
53 |
|
|
|
54 |
|
## Build |
|
55 |
|
|
|
56 |
|
### Build summary |
|
57 |
|
|
|
58 |
|
After the map is saved in the World Editor, the World Editor will remove all |
|
59 |
|
the patches this project makes to the map archive file. Therefore, the map will |
|
60 |
|
become unplayable. |
|
61 |
|
|
|
62 |
|
To make the scripts work, this build process must be followed. Every time |
|
63 |
|
updates to terrain or objects need to be saved, the build process for scripts |
|
64 |
|
must be repeated again, to make sure the map archive file is patched correctly. |
|
65 |
|
|
|
66 |
|
The only supported version of the game is 1.27. It may work on some slightly |
|
67 |
|
older or slightly newer versions. |
|
68 |
|
|
|
69 |
|
In an ideal world, simply executing the "`Makefile`" should produce a valid map |
|
70 |
|
archive file. The instructions assume that the current directory is the |
|
71 |
|
project's root, that is base directory, that is sources directory ("`srcdir`"). |
|
72 |
|
|
|
73 |
|
``` |
|
74 |
|
make |
|
75 |
|
``` |
|
76 |
|
|
|
77 |
|
### Build details |
|
78 |
|
|
|
79 |
|
The following make tasks should help troubleshooting. Generally, the project |
|
80 |
|
aims to to follow GNU `make` convetions whenever possible. |
|
81 |
|
|
|
82 |
|
Ensure that the build directory exists. By default, the build directory is set |
|
83 |
|
to "target". |
|
84 |
|
|
|
85 |
|
``` |
|
86 |
|
mkdir -p target/ |
|
87 |
|
``` |
|
88 |
|
|
|
89 |
|
The build directory may be overriden like this, for every `make` invocation. |
|
90 |
|
|
|
91 |
|
``` |
|
92 |
|
make BUILDDIR=/home/myuser/mybuilddir/ |
|
93 |
|
``` |
|
94 |
|
|
|
95 |
|
Similarly, the project base directory, or sources directory, may be overriden |
|
96 |
|
like this. Then the "`Makefile`" location must be explicitly specified as well. |
|
97 |
|
Overriding build and sources directory may be convenient for setting up |
|
98 |
|
development environment or packaging. |
|
99 |
|
|
|
100 |
|
``` |
|
101 |
|
make -f /home/myuser/mysrcdir/Makefile srcdir=/home/myuser/mysrcdir/ |
|
102 |
|
``` |
|
103 |
|
|
|
104 |
|
Check Jass script snippets for validity. This does not necessarily require the |
|
105 |
|
game installed, only `pjass`, `m4` and `make`. |
|
106 |
|
|
|
107 |
|
``` |
|
108 |
|
make check |
|
109 |
|
``` |
|
110 |
|
|
|
111 |
|
Build playable map archive file. This requires `pjass`, `m4`, `make` and |
|
112 |
|
`smpq`. |
|
113 |
|
|
|
114 |
|
``` |
|
115 |
|
make all |
|
116 |
|
``` |
|
117 |
|
|
|
118 |
|
Assemble a distribution zip package, that contains the playable map and all the |
|
119 |
|
sources needed to rebuild it. This requires all of the above and `git`. |
|
120 |
|
|
|
121 |
|
``` |
|
122 |
|
make dist |
|
123 |
|
``` |
|
124 |
|
|
|
125 |
|
Test the map in the game. |
|
126 |
|
|
|
127 |
|
``` |
|
128 |
|
make run |
|
129 |
|
``` |
|
130 |
|
|
|
131 |
|
This requires the game to be installed. Additionally, this requires the |
|
132 |
|
developer to create a local "`Makefile.config`" that is not commited to the |
|
133 |
|
project's repository. Makefile.config must be placed in the same directory as |
|
134 |
|
the "`Makefile`" (normally under `srcdir`). |
|
135 |
|
|
|
136 |
|
Example "`Makefile.config`". |
|
137 |
|
|
|
138 |
|
``` |
|
139 |
|
WAR3EXE=wine64 ~/local/share/wine-devel/drive_c/games/warcraft3-1.27/Frozen\ Throne.exe -opengl -window |
|
140 |
|
``` |
|
141 |
|
|
|
142 |
|
Build and run the map with development stage test scripts. |
|
143 |
|
|
|
144 |
|
``` |
|
145 |
|
make TESTS=test/test.j run |
|
146 |
|
``` |
|
147 |
|
|
|
148 |
|
The Jass snippet "`test/test.j`" must exist. The snippet must define "`function |
|
149 |
|
test_init`", that is called from "`src/main.j:function main`". |
|
File makefile added (mode: 100644) (index 0000000..a01629b) |
|
1 |
|
.POSIX: |
|
2 |
|
# Allow file paths and not just file names. |
|
3 |
|
.PRAGMA: target_name |
|
4 |
|
|
|
5 |
|
NAME=honeydew |
|
6 |
|
VERSION=0.1.3WIP |
|
7 |
|
CLASSIFIER=1.27 |
|
8 |
|
LANG=en |
|
9 |
|
|
|
10 |
|
NAMEFULL=$(NAME)_$(VERSION)_$(CLASSIFIER)_$(LANG) |
|
11 |
|
NAMEASSEMBLY=$(NAME)_$(VERSION)_project |
|
12 |
|
|
|
13 |
|
SHELL=/bin/sh |
|
14 |
|
|
|
15 |
|
srcdir=./ |
|
16 |
|
|
|
17 |
|
GIT=git |
|
18 |
|
GITFLAGS=--git-dir=${srcdir}/.git/ |
|
19 |
|
|
|
20 |
|
GPG=gpg |
|
21 |
|
SMPQ=smpq |
|
22 |
|
|
|
23 |
|
M4=m4 |
|
24 |
|
M4FLAGS=-I "$(srcdir)" -E |
|
25 |
|
|
|
26 |
|
PJASS=pjass |
|
27 |
|
PJASSFLAGS="$(srcdir)/etc/common.j" "$(srcdir)/etc/Blizzard.j" -rb +filter +shadow +checkglobalsinit +checkstringhash |
|
28 |
|
SNIPPETS=$(wildcard $(srcdir)/src/*.j) |
|
29 |
|
|
|
30 |
|
# TODO add configurable map path for testing |
|
31 |
|
datadir=Maps/ |
|
32 |
|
|
|
33 |
|
WAR3EXE=Frozen\ Throne.exe |
|
34 |
|
|
|
35 |
|
include $(srcdir)/src/src.mk |
|
36 |
|
|
|
37 |
|
all: check $(NAME).w3x war3map.j |
|
38 |
|
|
|
39 |
|
$(NAME).w3x: war3map.j |
|
40 |
|
test ! -f $@ && cp $(srcdir)/$(NAME).w3x $@ |
|
41 |
|
$(SMPQ) --append --overwrite "$@" war3map.j && \ |
|
42 |
|
$(SMPQ) --list "$@" |
|
43 |
|
|
|
44 |
|
dist: $(NAME).w3x $(NAMEASSEMBLY).zip $(NAMEASSEMBLY).zip.sig |
|
45 |
|
|
|
46 |
|
install: $(NAME).w3x |
|
47 |
|
cp $(NAME).w3x $(DESTDIR)/$(datadir)/$(NAME).w3x |
|
48 |
|
|
|
49 |
|
check: war3map.j |
|
50 |
|
$(PJASS) $(PJASSFLAGS) war3map.j |
|
51 |
|
|
|
52 |
|
tags: |
|
53 |
|
ctags --recurse ${srcdir} |
|
54 |
|
|
|
55 |
|
# All `m4` sources must be loaded before all `Jass` sources. |
|
56 |
|
# Source file `jass_globals.m4` must be loaded after all other `m4` sources and |
|
57 |
|
# before all `Jass` sources. |
|
58 |
|
war3map.j: $(srcdir)/src/jass_module.m4 $(srcdir)/src/jass_globals.m4 $(SNIPPETS) $(TESTS) |
|
59 |
|
$(PJASS) $(PJASSFLAGS) $(SNIPPETS) $(TESTS) |
|
60 |
|
$(M4) $(M4FLAGS) $(srcdir)/src/jass_module.m4 $(srcdir)/src/jass_globals.m4 $(SNIPPETS) $(TESTS) > $@ |
|
61 |
|
$(PJASS) $(PJASSFLAGS) $@ |
|
62 |
|
|
|
63 |
|
$(NAMEASSEMBLY).zip: |
|
64 |
|
$(GIT) $(GITFLAGS) archive --format zip --output "$@" --prefix "$(NAME)-$(VERSION)/" HEAD |
|
65 |
|
|
|
66 |
|
$(NAMEASSEMBLY).zip.sig: $(NAMEASSEMBLY).zip |
|
67 |
|
$(GPG) --detach-sign --yes --output $@ $(NAMEASSEMBLY).zip |
|
68 |
|
|
|
69 |
|
clean: |
|
70 |
|
$(GIT) clean -i -x |
|
71 |
|
|
|
72 |
|
distclean: |
|
73 |
|
$(GIT) clean -i -x "$(srcdir)" |
|
74 |
|
|
|
75 |
|
# Path to the map relative to data directory (game installation directory in |
|
76 |
|
# almost every case). Must be given exact file name. Wildcards or tokens will |
|
77 |
|
# not be expanded. |
|
78 |
|
# |
|
79 |
|
# A valid path looks like this "Maps/Test/WorldEditTestMap.w3x". It is always relative to the |
|
80 |
|
# game installation directory. |
|
81 |
|
# |
|
82 |
|
run: all |
|
83 |
|
test ! -f ${DESTDIR}/${datadir}/${NAME}.w3x && cp $(NAME).w3x ${DESTDIR}/${datadir}/${NAME}.w3x |
|
84 |
|
$(WAR3EXE) -loadfile "${datadir}${NAME}.w3x" |