Skip to content

Commit c5f2a50

Browse files
use catalog_update.py to also update Makefile.am with game files
1 parent cf67585 commit c5f2a50

2 files changed

Lines changed: 102 additions & 88 deletions

File tree

Makefile.am

Lines changed: 59 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,27 @@ EXTRA_DIST = \
100100
src/gui/bitmaps/zoomout.xpm \
101101
src/gui/bitmaps/zoom1.xpm \
102102
src/gui/bitmaps/gambitrc.rc \
103+
src/README.rst \
103104
src/pygambit/contrib/games/2s2x2x2.efg \
104105
src/pygambit/contrib/games/2smp.efg \
106+
src/pygambit/contrib/games/2x2.nfg \
107+
src/pygambit/contrib/games/2x2a.nfg \
108+
src/pygambit/contrib/games/2x2const.nfg \
109+
src/pygambit/contrib/games/2x2x2-nau.nfg \
105110
src/pygambit/contrib/games/2x2x2.efg \
111+
src/pygambit/contrib/games/2x2x2.nfg \
112+
src/pygambit/contrib/games/2x2x2x2.nfg \
113+
src/pygambit/contrib/games/2x2x2x2x2.nfg \
114+
src/pygambit/contrib/games/3x3x3.nfg \
106115
src/pygambit/contrib/games/4cards.efg \
116+
src/pygambit/contrib/games/5x4x3.nfg \
117+
src/pygambit/contrib/games/8x2x2.nfg \
118+
src/pygambit/contrib/games/8x8.nfg \
107119
src/pygambit/contrib/games/artist1.efg \
108120
src/pygambit/contrib/games/artist2.efg \
109121
src/pygambit/contrib/games/badgame1.efg \
110122
src/pygambit/contrib/games/badgame2.efg \
123+
src/pygambit/contrib/games/bagwell.efg \
111124
src/pygambit/contrib/games/bayes1a.efg \
112125
src/pygambit/contrib/games/bayes2a.efg \
113126
src/pygambit/contrib/games/bcp2.efg \
@@ -120,45 +133,66 @@ EXTRA_DIST = \
120133
src/pygambit/contrib/games/bhg5.efg \
121134
src/pygambit/contrib/games/caro2.efg \
122135
src/pygambit/contrib/games/cent2.efg \
136+
src/pygambit/contrib/games/cent2.nfg \
123137
src/pygambit/contrib/games/cent3.efg \
124138
src/pygambit/contrib/games/cent4.efg \
125139
src/pygambit/contrib/games/cent6.efg \
126140
src/pygambit/contrib/games/centcs10.efg \
127141
src/pygambit/contrib/games/centcs6.efg \
128142
src/pygambit/contrib/games/condjury.efg \
129143
src/pygambit/contrib/games/coord2.efg \
144+
src/pygambit/contrib/games/coord2.nfg \
130145
src/pygambit/contrib/games/coord2ts.efg \
131146
src/pygambit/contrib/games/coord3.efg \
147+
src/pygambit/contrib/games/coord3.nfg \
148+
src/pygambit/contrib/games/coord333.nfg \
132149
src/pygambit/contrib/games/coord4.efg \
150+
src/pygambit/contrib/games/coord4.nfg \
133151
src/pygambit/contrib/games/cross.efg \
134152
src/pygambit/contrib/games/cs.efg \
153+
src/pygambit/contrib/games/csg1.nfg \
154+
src/pygambit/contrib/games/csg2.nfg \
155+
src/pygambit/contrib/games/csg3.nfg \
156+
src/pygambit/contrib/games/csg4.nfg \
157+
src/pygambit/contrib/games/deg1.nfg \
158+
src/pygambit/contrib/games/deg2.nfg \
135159
src/pygambit/contrib/games/e01.efg \
160+
src/pygambit/contrib/games/e01.nfg \
136161
src/pygambit/contrib/games/e02.efg \
162+
src/pygambit/contrib/games/e02.nfg \
137163
src/pygambit/contrib/games/e03.efg \
138164
src/pygambit/contrib/games/e04.efg \
165+
src/pygambit/contrib/games/e04.nfg \
139166
src/pygambit/contrib/games/e05.efg \
140167
src/pygambit/contrib/games/e06.efg \
141168
src/pygambit/contrib/games/e07.efg \
169+
src/pygambit/contrib/games/e07.nfg \
142170
src/pygambit/contrib/games/e08.efg \
143171
src/pygambit/contrib/games/e09.efg \
144-
src/pygambit/contrib/games/e10a.efg \
145172
src/pygambit/contrib/games/e10.efg \
173+
src/pygambit/contrib/games/e10a.efg \
146174
src/pygambit/contrib/games/e13.efg \
147175
src/pygambit/contrib/games/e16.efg \
148176
src/pygambit/contrib/games/e17.efg \
149177
src/pygambit/contrib/games/e18.efg \
150178
src/pygambit/contrib/games/g1.efg \
179+
src/pygambit/contrib/games/g1.nfg \
151180
src/pygambit/contrib/games/g2.efg \
181+
src/pygambit/contrib/games/g2.nfg \
152182
src/pygambit/contrib/games/g3.efg \
153-
src/pygambit/contrib/games/holdout7.efg \
183+
src/pygambit/contrib/games/g3.nfg \
154184
src/pygambit/contrib/games/holdout.efg \
185+
src/pygambit/contrib/games/holdout7.efg \
155186
src/pygambit/contrib/games/hs1.efg \
156187
src/pygambit/contrib/games/jury_mr.efg \
157188
src/pygambit/contrib/games/jury_un.efg \
158189
src/pygambit/contrib/games/km1.efg \
159190
src/pygambit/contrib/games/km2.efg \
160191
src/pygambit/contrib/games/km3.efg \
161192
src/pygambit/contrib/games/km6.efg \
193+
src/pygambit/contrib/games/loopback.nfg \
194+
src/pygambit/contrib/games/mixdom.nfg \
195+
src/pygambit/contrib/games/mixdom2.nfg \
162196
src/pygambit/contrib/games/montyhal.efg \
163197
src/pygambit/contrib/games/my_2-1.efg \
164198
src/pygambit/contrib/games/my_2-4.efg \
@@ -170,111 +204,48 @@ EXTRA_DIST = \
170204
src/pygambit/contrib/games/my_3-3e.efg \
171205
src/pygambit/contrib/games/my_3-4.efg \
172206
src/pygambit/contrib/games/myerson.efg \
173-
src/pygambit/contrib/games/nim7.efg \
207+
src/pygambit/contrib/games/myerson_fig_4_2.efg \
174208
src/pygambit/contrib/games/nim.efg \
209+
src/pygambit/contrib/games/nim7.efg \
210+
src/pygambit/contrib/games/oneill.nfg \
211+
src/pygambit/contrib/games/palf.efg \
175212
src/pygambit/contrib/games/palf2.efg \
176213
src/pygambit/contrib/games/palf3.efg \
177-
src/pygambit/contrib/games/palf.efg \
178-
src/pygambit/contrib/games/poker2.efg \
214+
src/pygambit/contrib/games/pbride.efg \
215+
src/pygambit/contrib/games/pd.nfg \
216+
src/pygambit/contrib/games/perfect1.nfg \
217+
src/pygambit/contrib/games/perfect2.nfg \
218+
src/pygambit/contrib/games/perfect3.nfg \
179219
src/pygambit/contrib/games/poker.efg \
180-
src/pygambit/contrib/games/pvw2.efg \
220+
src/pygambit/contrib/games/poker.nfg \
221+
src/pygambit/contrib/games/poker2.efg \
181222
src/pygambit/contrib/games/pvw.efg \
223+
src/pygambit/contrib/games/pvw2.efg \
182224
src/pygambit/contrib/games/sh3.efg \
225+
src/pygambit/contrib/games/sh3.nfg \
226+
src/pygambit/contrib/games/spence.efg \
227+
src/pygambit/contrib/games/stengel.nfg \
183228
src/pygambit/contrib/games/sww1.efg \
229+
src/pygambit/contrib/games/sww1.nfg \
184230
src/pygambit/contrib/games/sww2.efg \
185231
src/pygambit/contrib/games/sww3.efg \
186232
src/pygambit/contrib/games/tim.efg \
233+
src/pygambit/contrib/games/todd1.nfg \
234+
src/pygambit/contrib/games/todd2.nfg \
235+
src/pygambit/contrib/games/todd3.nfg \
187236
src/pygambit/contrib/games/ttt.efg \
188237
src/pygambit/contrib/games/vd.efg \
238+
src/pygambit/contrib/games/vd.nfg \
189239
src/pygambit/contrib/games/w_ex1.efg \
190240
src/pygambit/contrib/games/w_ex2.efg \
191241
src/pygambit/contrib/games/wilson1.efg \
242+
src/pygambit/contrib/games/wink3.nfg \
243+
src/pygambit/contrib/games/winkels.nfg \
192244
src/pygambit/contrib/games/work1.efg \
193245
src/pygambit/contrib/games/work2.efg \
194246
src/pygambit/contrib/games/work3.efg \
195-
src/pygambit/contrib/games/2x2a.nfg \
196-
src/pygambit/contrib/games/2x2const.nfg \
197-
src/pygambit/contrib/games/2x2.nfg \
198-
src/pygambit/contrib/games/2x2x2.nfg \
199-
src/pygambit/contrib/games/2x2x2x2.nfg \
200-
src/pygambit/contrib/games/2x2x2x2x2.nfg \
201-
src/pygambit/contrib/games/3x3x3.nfg \
202-
src/pygambit/contrib/games/5x4x3.nfg \
203-
src/pygambit/contrib/games/8x2x2.nfg \
204-
src/pygambit/contrib/games/8x8.nfg \
205-
src/pygambit/contrib/games/cent2.nfg \
206-
src/pygambit/contrib/games/coord2.nfg \
207-
src/pygambit/contrib/games/coord333.nfg \
208-
src/pygambit/contrib/games/coord3.nfg \
209-
src/pygambit/contrib/games/coord4.nfg \
210-
src/pygambit/contrib/games/csg1.nfg \
211-
src/pygambit/contrib/games/csg2.nfg \
212-
src/pygambit/contrib/games/csg3.nfg \
213-
src/pygambit/contrib/games/csg4.nfg \
214-
src/pygambit/contrib/games/deg1.nfg \
215-
src/pygambit/contrib/games/deg2.nfg \
216-
src/pygambit/contrib/games/e01.nfg \
217-
src/pygambit/contrib/games/e02.nfg \
218-
src/pygambit/contrib/games/e04.nfg \
219-
src/pygambit/contrib/games/e07.nfg \
220-
src/pygambit/contrib/games/g1.nfg \
221-
src/pygambit/contrib/games/g2.nfg \
222-
src/pygambit/contrib/games/g3.nfg \
223-
src/pygambit/contrib/games/loopback.nfg \
224-
src/pygambit/contrib/games/mixdom2.nfg \
225-
src/pygambit/contrib/games/mixdom.nfg \
226-
src/pygambit/contrib/games/oneill.nfg \
227-
src/pygambit/contrib/games/pd.nfg \
228-
src/pygambit/contrib/games/perfect1.nfg \
229-
src/pygambit/contrib/games/perfect2.nfg \
230-
src/pygambit/contrib/games/perfect3.nfg \
231-
src/pygambit/contrib/games/poker.nfg \
232-
src/pygambit/contrib/games/sh3.nfg \
233-
src/pygambit/contrib/games/stengel.nfg \
234-
src/pygambit/contrib/games/sww1.nfg \
235-
src/pygambit/contrib/games/todd1.nfg \
236-
src/pygambit/contrib/games/todd2.nfg \
237-
src/pygambit/contrib/games/todd3.nfg \
238-
src/pygambit/contrib/games/vd.nfg \
239-
src/pygambit/contrib/games/wink3.nfg \
240-
src/pygambit/contrib/games/winkels.nfg \
241247
src/pygambit/contrib/games/yamamoto.nfg \
242-
src/pygambit/contrib/games/zero.nfg \
243-
src/README.rst
244-
245-
core_SOURCES = \
246-
src/core/core.h \
247-
src/core/util.h \
248-
src/core/array.h \
249-
src/core/vector.h \
250-
src/core/recarray.h \
251-
src/core/matrix.h \
252-
src/core/integer.cc \
253-
src/core/integer.h \
254-
src/core/rational.cc \
255-
src/core/rational.h \
256-
src/core/matrix.cc \
257-
src/core/function.cc \
258-
src/core/function.h \
259-
src/core/tinyxml.cc \
260-
src/core/tinyxmlerror.cc \
261-
src/core/tinyxmlparser.cc \
262-
src/core/tinyxml.h
263-
264-
agg_SOURCES = \
265-
src/games/gameagg.cc \
266-
src/games/gameagg.h \
267-
src/games/gamebagg.cc \
268-
src/games/gamebagg.h \
269-
src/games/agg/gray.h \
270-
src/games/agg/agg.cc \
271-
src/games/agg/agg.h \
272-
src/games/agg/bagg.cc \
273-
src/games/agg/bagg.h \
274-
src/games/agg/proj_func.h \
275-
src/games/agg/trie_map.h \
276-
src/games/agg/trie_map.imp \
277-
src/games/agg/trie_map.cc
248+
src/pygambit/contrib/games/zero.nfg
278249

279250
game_SOURCES = \
280251
src/gambit.h \

src/pygambit/catalog_update.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
_CATALOG_YAML = Path(__file__).parent / "catalog.yml"
1111
_GAMEFILES_DIR = Path(__file__).parent / "contrib/games"
1212
_API_RST = Path(__file__).parent.parent.parent / "doc/pygambit.api.rst"
13+
_MAKEFILE_AM = Path(__file__).parent.parent.parent / "Makefile.am"
1314

1415

1516
def make_class_name(filename: str) -> str:
@@ -78,6 +79,44 @@ def update_api_rst(new_classes: list) -> None:
7879
f.write(new_content)
7980

8081

82+
def update_makefile():
83+
"""Update the Makefile.am with all game files from the catalog."""
84+
with open(_CATALOG_YAML, encoding="utf-8") as f:
85+
yaml = YAML()
86+
catalog = yaml.load(f) or {}
87+
88+
game_files = []
89+
for entry in catalog.values():
90+
file_name = entry.get("file")
91+
if file_name:
92+
game_files.append(f"src/pygambit/contrib/games/{file_name}")
93+
94+
game_files.sort()
95+
96+
with open(_MAKEFILE_AM, encoding="utf-8") as f:
97+
content = f.readlines()
98+
99+
with open(_MAKEFILE_AM, "w", encoding="utf-8") as f:
100+
in_gamefiles_section = False
101+
for line in content:
102+
# Add to the EXTRA_DIST after the README.rst line
103+
if line.startswith(" src/README.rst \\"):
104+
in_gamefiles_section = True
105+
f.write(" src/README.rst \\\n")
106+
for gf in game_files:
107+
if gf == game_files[-1]:
108+
f.write(f"\t{gf}\n")
109+
else:
110+
f.write(f"\t{gf} \\\n")
111+
f.write("\n")
112+
elif in_gamefiles_section:
113+
if line.strip() == "":
114+
in_gamefiles_section = False
115+
continue # Skip old gamefiles lines
116+
else:
117+
f.write(line)
118+
119+
81120
if __name__ == "__main__":
82121
# Use ruamel.yaml to preserve comments
83122
yaml = YAML()
@@ -125,8 +164,12 @@ def update_api_rst(new_classes: list) -> None:
125164
# This includes games from coded_games.py as well as catalog.yml
126165
update_api_rst(new_classes=list(new_entries.keys()))
127166

167+
# Update the Makefile.am with all game files
168+
update_makefile()
169+
128170
print(f"Added {new_entries_counter} new entries to the catalog: ", list(new_entries.keys()))
129171
if new_entries_counter > 0:
130172
print(f"Updated: {_CATALOG_YAML}")
131173
print(f"Updated {_API_RST}")
174+
print(f"Updated {_MAKEFILE_AM}")
132175
print("Done.")

0 commit comments

Comments
 (0)