From 15a8e983d1e4a9fed6201ec58dc7e73d689974fc Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Sat, 10 May 2025 03:05:48 +0300
Subject: [PATCH 47/47] Meson: Generate rulesets_not_broken.sh

See RM #1355

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 meson.build                     | 11 +++++--
 tests/Makefile.am               |  1 +
 tests/generate_rs_not_broken.sh | 51 +++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 2 deletions(-)
 create mode 100644 tests/generate_rs_not_broken.sh

diff --git a/meson.build b/meson.build
index 5d2bf3e46c..cb22dfda9c 100644
--- a/meson.build
+++ b/meson.build
@@ -1261,8 +1261,15 @@ gitrev = custom_target('gitrev', output: 'fc_gitrev_gen.h',
                        build_by_default: get_option('gitrev'))
 
 rsloads = custom_target('rsloads', output: 'ruleset_loads.sh',
-                        command: [sh_exe, files('tests/rs_test_res//generate_ruleset_loads.sh'),
-                        '@OUTPUT@'])
+                        command: [sh_exe,
+                                  files('tests/rs_test_res/generate_ruleset_loads.sh'),
+                                  '@OUTPUT@'])
+
+rs_not_broken = custom_target('rs_not_broken', output: 'rulesets_not_broken.sh',
+                              command: [sh_exe,
+                                        files('tests/generate_rs_not_broken.sh'),
+                                        '@OUTPUT@'],
+                              depends: rsloads)
 
 if host_system == 'windows'
   tinycthr_files = files('dependencies/tinycthread/fc_tinycthread.c')
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8c6f471744..58394ffdc5 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -11,6 +11,7 @@ CLEANFILES = check-output
 EXTRA_DIST =	check_macros.sh			\
 		copyright.sh			\
 		fcintl.sh			\
+		generate_rs_not_broken.sh	\
 		header_guard.sh			\
 		rulesets_not_broken.sh.in	\
 		rulesets_save.sh.in		\
diff --git a/tests/generate_rs_not_broken.sh b/tests/generate_rs_not_broken.sh
new file mode 100644
index 0000000000..da792e8bff
--- /dev/null
+++ b/tests/generate_rs_not_broken.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+#/***********************************************************************
+# Freeciv - Copyright (C) 2017-2025
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2, or (at your option)
+#   any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#***********************************************************************/
+
+SRCDIR="$(cd $(dirname $0) ; pwd)"
+
+(
+  echo "# Generated by generate_rs_not_broken.sh."
+  echo
+  echo "# rulesets_not_broken.sh [ruleset]..."
+  echo "# Exits with 0 when each specified ruleset or,"
+  echo "# if no rulesets are specified, each ruleset that "
+  echo "# is developed with Freeciv, are able to load."
+  echo "# Exits with 1 if any ruleset fails to load."
+  echo
+  echo "if test \"\$1\" = \"\" ; then"
+  echo "  # Try to load all rulesets that are developed with Freeciv"
+  echo "  rulesets=\"\$(cat ${SRCDIR}/rs_test_res/ruleset_list_dist.txt)\""
+  echo "  optional=\"\$(cat ${SRCDIR}/rs_test_res/ruleset_list_opt.txt)\""
+  echo "  for opt in \$optional ; do"
+  echo "    if test -d \"${SRCDIR}/../data/\$opt\" ; then"
+  echo "      rulesets=\"\$rulesets \$opt\""
+  echo "    fi"
+  echo "  done"
+  echo "else"
+  echo "  # Try to load the specified ruleset(s)"
+  echo "  rulesets=\$@"
+  echo "fi"
+  echo
+  echo "for ruleset in \$rulesets; do"
+  echo "  echo \"Loading \$ruleset\""
+  echo "  ./ruleset_loads.sh \$ruleset || exit 1"
+  echo "done"
+  echo
+  echo "echo \"No broken rulesets detected.\""
+  echo
+  echo "exit 0"
+) > $1
+
+chmod +x "$1"
-- 
2.47.2

