Add: Makefile for building of bundles and uploading to bananas.
This commit is contained in:
63
Makefile
Normal file
63
Makefile
Normal file
@@ -0,0 +1,63 @@
|
||||
# Busy Bee Makefile
|
||||
#
|
||||
# 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 of the License, 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.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
PROJECT_NAME = BusyBee
|
||||
|
||||
SOURCES = *.nut
|
||||
VERSION_NUT = version.nut
|
||||
LANGFILES = lang/*.txt
|
||||
DOCS = license.txt readme.txt
|
||||
BANANAS_INI = bananas.ini
|
||||
|
||||
MUSA = musa.py
|
||||
|
||||
VERSION_INFO := "$(shell ./findversion.sh)"
|
||||
REPO_VERSION := $(shell echo ${VERSION_INFO} | cut -f2)
|
||||
REPO_DATE := $(shell echo ${VERSION_INFO} | cut -f7)
|
||||
|
||||
DISPLAY_NAME := $(PROJECT_NAME) $(shell echo ${VERSION_INFO} | cut -f5)
|
||||
BUNDLE_NAME := $(PROJECT_NAME)
|
||||
BUNDLE_FILENAME = $(shell echo "$(DISPLAY_NAME)" | sed 's/ /-/g')
|
||||
|
||||
BUNDLE_DIR = bundle
|
||||
|
||||
.PHONY: all bananas bundle clean
|
||||
|
||||
all: bundle
|
||||
|
||||
clean:
|
||||
echo "[CLEAN]"
|
||||
$(_V) rm -rf $(BUNDLE_DIR)
|
||||
|
||||
bundle: $(BUNDLE_DIR)/$(BUNDLE_FILENAME).tar
|
||||
|
||||
$(BUNDLE_DIR)/$(BUNDLE_FILENAME).tar: $(SOURCES) $(LANGFILES) $(DOCS)
|
||||
echo "[Bundle] $@"
|
||||
python3 check_lang_compatibility.py lang/english.txt info.nut
|
||||
rm -rf "$(BUNDLE_DIR)"
|
||||
mkdir -p "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)/lang"
|
||||
cp $(SOURCES) $(DOCS) "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)"
|
||||
cp $(LANGFILES) "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)/lang"
|
||||
sed -i 's/^PROGRAM_VERSION.*/PROGRAM_VERSION <- $(REPO_VERSION);/' "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)/info.nut"
|
||||
sed -i 's/^PROGRAM_DATE.*/PROGRAM_DATE <- "$(REPO_DATE)";/' "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)/info.nut"
|
||||
sed -i 's/^PROGRAM_NAME.*/PROGRAM_NAME <- "$(DISPLAY_NAME)";/' "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)/info.nut"
|
||||
cd $(BUNDLE_DIR); tar -cf "$(BUNDLE_FILENAME).tar" "$(BUNDLE_FILENAME)"
|
||||
|
||||
bananas: bundle
|
||||
echo "[BaNaNaS]"
|
||||
sed 's/^version *=.*/version = $(DISPLAY_VERSION)/' $(BANANAS_INI) > "$(BUNDLE_DIR)/$(BANANAS_INI)"
|
||||
$(MUSA) -r -x license.txt -c $(BUNDLE_DIR)/$(BANANAS_INI) "$(BUNDLE_DIR)/$(BUNDLE_FILENAME)"
|
||||
|
||||
19
bananas.ini
Normal file
19
bananas.ini
Normal file
@@ -0,0 +1,19 @@
|
||||
[musa]
|
||||
type = Game Script
|
||||
name = BusyBee
|
||||
|
||||
# The version is inserted by the Makefile
|
||||
version =
|
||||
|
||||
description_file = bananas_description.txt
|
||||
url = http://dev.openttdcoop.org/projects/busybee-gs
|
||||
license = GPL v2
|
||||
tags = cargo, challenge, goal, cooperative
|
||||
openttd_minimum_supported_version = 1.4.2
|
||||
openttd_maximum_supported_version =
|
||||
|
||||
# SuperLib_for_NoGo-36.tar
|
||||
dependencies =
|
||||
|
||||
authors = alberth, andythenorth
|
||||
|
||||
1
bananas_description.txt
Normal file
1
bananas_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
BusyBee continuously gives you new goals for transportation. It's meant for long-term fun; as such there is no ultimate goal to achieve.
|
||||
133
check_lang_compatibility.py
Executable file
133
check_lang_compatibility.py
Executable file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# This file is part of BusyBee, which is a GameScript for OpenTTD
|
||||
# Copyright (C) 2014-2015 alberth / andythenorth
|
||||
#
|
||||
# BusyBee 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; version 2 of the License
|
||||
#
|
||||
# BusyBee 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.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with BusyBee; If not, see <http://www.gnu.org/licenses/> or
|
||||
# write to the Free Software Foundation, Inc., 51 Franklin Street,
|
||||
# Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
"""
|
||||
Verify whether the current language file is compatible with a language file at
|
||||
a revision as given in a file, indicated by the prefix "// cset:".
|
||||
"""
|
||||
|
||||
import os, subprocess, re, sys
|
||||
|
||||
|
||||
def process_langline(line):
|
||||
"""
|
||||
Process a line in a language file.
|
||||
|
||||
@param line: Line in a language file.
|
||||
@type line: C{str}
|
||||
|
||||
@return: The name of the string if reading a string line, else C{None}
|
||||
@rtype: C{None} or C{str}
|
||||
"""
|
||||
line = line.rstrip()
|
||||
if len(line) == 0 or line[0] == '#':
|
||||
return None
|
||||
|
||||
i = line.find(':')
|
||||
if i < 0:
|
||||
return None
|
||||
|
||||
return line[:i].rstrip()
|
||||
|
||||
|
||||
def get_langfile_rev(name, rev):
|
||||
"""
|
||||
Get the string names of a language file.
|
||||
|
||||
@param name: Name of the language file.
|
||||
@type name: C{str}
|
||||
|
||||
@param rev: Revision to retrieve.
|
||||
@type rev: C{str}
|
||||
|
||||
@return: Lines wit string names.
|
||||
@rtype: C{list} of C{str}
|
||||
"""
|
||||
cmd = ['hg', 'cat', '-r', rev, name]
|
||||
txt = subprocess.check_output(cmd, universal_newlines=True, env={'HGPLAIN':''})
|
||||
|
||||
lines = []
|
||||
for line in txt.split('\n'):
|
||||
line = process_langline(line)
|
||||
if line is not None:
|
||||
lines.append(line)
|
||||
|
||||
return lines
|
||||
|
||||
def get_langfile(fname):
|
||||
"""
|
||||
Get strings from the given language file.
|
||||
|
||||
@param fname: Name of the file to open.
|
||||
@type fname: C{str}
|
||||
|
||||
@return: Lines wit string names.
|
||||
@rtype: C{list} of C{str}
|
||||
"""
|
||||
handle = open(fname, 'rt', encoding='utf-8')
|
||||
|
||||
lines = []
|
||||
for line in handle:
|
||||
line = process_langline(line)
|
||||
if line is not None:
|
||||
lines.append(line)
|
||||
|
||||
handle.close()
|
||||
return lines
|
||||
|
||||
cset_pattern = re.compile('//[ \\t]*cset:[ \\t]*([0-9A-F[a-f]*)')
|
||||
|
||||
def get_cset(fname):
|
||||
"""
|
||||
Get changeset revision from the given file.
|
||||
|
||||
@param fname: Name of the file to open.
|
||||
@type fname: C{str}
|
||||
|
||||
@return: Changeset number, if available (C{// *cset: *([0-9A-F[a-f]*)})
|
||||
@rtype: C{list} of C{str}
|
||||
"""
|
||||
handle = open(fname, 'rt', encoding='utf-8')
|
||||
for line in handle:
|
||||
m = cset_pattern.search(line)
|
||||
if m and len(m.group(1)) > 4:
|
||||
handle.close()
|
||||
return m.group(1)
|
||||
|
||||
handle.close()
|
||||
return None
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
print("Incorrect number of arguments: expected \"check_lang_compatibility.py <lang/basename.txt> <cset-src>\"")
|
||||
sys.exit(1)
|
||||
|
||||
language_name = sys.argv[1]
|
||||
cset_file = sys.argv[2]
|
||||
|
||||
cset = get_cset(cset_file)
|
||||
if cset is None:
|
||||
print("No change set number found.")
|
||||
sys.exit(1)
|
||||
|
||||
print("** Comparing file {}, current version and at revision {} **".format(language_name, cset))
|
||||
min_comp_strings = get_langfile_rev(language_name, cset)
|
||||
now_strings = get_langfile(language_name)
|
||||
result = min_comp_strings != now_strings #0 code is ok.
|
||||
if result:
|
||||
print("\nCompatibility of language files failed.\n")
|
||||
sys.exit(result)
|
||||
131
findversion.sh
Executable file
131
findversion.sh
Executable file
@@ -0,0 +1,131 @@
|
||||
# make-nml NewGRF build framework
|
||||
# (c) 2014 planetmaker and others
|
||||
# Contact: planetmaker@openttd.org
|
||||
#
|
||||
# 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 of the License, 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.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
# This file is derived from OpenTTD's version check
|
||||
|
||||
|
||||
# Arguments given? Show help text.
|
||||
if [ "$#" != "0" ]; then
|
||||
cat <<EOF
|
||||
Usage: ./findversion.sh
|
||||
Finds the current revision and if the code is modified.
|
||||
|
||||
Output: <HASH>\t<VERSION>\t<MODIFIED>\t<TAG>\t<DISPLAY_VERSION>\t<BRANCH>\t<DATE>
|
||||
HASH
|
||||
a string unique to the version of the code the current checkout is
|
||||
based on. The exact format of this string depends on the version
|
||||
control system in use, but it tries to identify the revision used as
|
||||
close as possible (using the svn revision number or hg/git hash).
|
||||
This also includes an indication of whether the checkout was
|
||||
modified and which branch was checked out. This value is not
|
||||
guaranteed to be sortable, but is mainly meant for identifying the
|
||||
revision and user display.
|
||||
|
||||
If no revision identifier could be found, this is left empty.
|
||||
VERSION
|
||||
the version number to be reported to OpenTTD (aka NewGRF version).
|
||||
This usually is the number of days passed since 1.1.2000 up to the
|
||||
date of the last commit in the repository.
|
||||
|
||||
This number should be sortable. Within a given branch or trunk, a
|
||||
higher number means a newer version. However, when using git or hg,
|
||||
this number will not increase on new commits.
|
||||
|
||||
If no revision number could be found, this is left empty.
|
||||
MODIFIED
|
||||
Whether (the src directory of) this checkout is modified or not. A
|
||||
value of 0 means not modified, a value of 2 means it was modified.
|
||||
Modification is determined in relation to the commit identified by
|
||||
REV, so not in relation to the svn revision identified by REV_NR.
|
||||
|
||||
A value of 1 means that the modified status is unknown, because this
|
||||
is not an svn/git/hg checkout for example.
|
||||
TAG
|
||||
the tag of the commit (if any) - used to indicate and name releases
|
||||
DISPLAY_VERSION
|
||||
The version string shown to the user of the NewGRF
|
||||
BRANCH
|
||||
The branch the version is based on
|
||||
DATE
|
||||
The date of the last commit in ISO format
|
||||
|
||||
|
||||
By setting the AWK environment variable, a caller can determine which
|
||||
version of "awk" is used. If nothing is set, this script defaults to
|
||||
"awk".
|
||||
EOF
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# Allow awk to be provided by the caller.
|
||||
if [ -z "$AWK" ]; then
|
||||
AWK=awk
|
||||
fi
|
||||
|
||||
# Find out some dirs
|
||||
cd `dirname "$0"`
|
||||
ROOT_DIR=`pwd`
|
||||
|
||||
# Determine if we are using a modified version
|
||||
# Assume the dir is not modified
|
||||
MODIFIED=""
|
||||
REPO_DATE="2000,1,1"
|
||||
if [ -d "$ROOT_DIR/.hg" ]; then
|
||||
# We are a hg checkout
|
||||
if [ -n "`HGPLAIN= hg status -S | grep -v '^?'`" ]; then
|
||||
MODIFIED="M"
|
||||
fi
|
||||
HASH=`LC_ALL=C HGPLAIN= hg id -i | cut -c1-12`
|
||||
REV="h`echo $HASH | cut -c1-8`"
|
||||
BRANCH="`hg branch | sed 's@^default$@@'`"
|
||||
TAG="`HGPLAIN= hg id -t | grep -v 'tip$'`"
|
||||
ISO_DATE="`HGPLAIN= hg log -r$HASH --template=\"{date|shortdate}\"`"
|
||||
REPO_DATE="`echo ${ISO_DATE} | sed s/-/,/g | sed s/,0/,/g`"
|
||||
VERSION=`python -c "from datetime import date; print (date($REPO_DATE)-date(2000,1,1)).days"`
|
||||
DISPLAY_VERSION="v${VERSION}"
|
||||
if [ -n "$TAG" ]; then
|
||||
BRANCH=""
|
||||
DISPLAY_VERSION="${TAG}"
|
||||
fi
|
||||
elif [ -f "$ROOT_DIR/.rev" ]; then
|
||||
# We are an exported source bundle
|
||||
cat $ROOT_DIR/.rev
|
||||
exit
|
||||
else
|
||||
# We don't know
|
||||
HASH=""
|
||||
VERSION="0"
|
||||
MODIFIED=""
|
||||
BRANCH=""
|
||||
TAG=""
|
||||
DISPLAY_VERSION="noRev"
|
||||
ISO_DATE=""
|
||||
fi
|
||||
|
||||
DISPLAY_VERSION="${DISPLAY_VERSION}${MODIFIED}"
|
||||
|
||||
if [ -n "$BRANCH" ]; then
|
||||
DISPLAY_VERSION="$BRANCH-${DISPLAY_VERSION}"
|
||||
fi
|
||||
|
||||
if [ -z "${TAG}" -a -n "${HASH}" ]; then
|
||||
DISPLAY_VERSION="${DISPLAY_VERSION}-h${HASH}"
|
||||
fi
|
||||
|
||||
echo "$HASH $VERSION $MODIFIED $TAG $DISPLAY_VERSION $BRANCH $ISO_DATE"
|
||||
19
info.nut
19
info.nut
@@ -17,17 +17,24 @@
|
||||
* Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
SAVEGAME_VERSION <- 1; // Set manually if/when save games break.
|
||||
MINCOMPATIBLE_SAVEGAME_VERSION <- 1; // cset: 06b75370997d
|
||||
|
||||
PROGRAM_VERSION <- Syntax error, set by 'make bundle'.
|
||||
PROGRAM_DATE <- Syntax error, set by 'make bundle'.
|
||||
PROGRAM_NAME <- Syntax error, set by 'make bundle'.
|
||||
|
||||
class BusyBeeInfo extends GSInfo {
|
||||
function GetAuthor() { return "alberth & andythenorth"; }
|
||||
function GetName() { return "BusyBee"; }
|
||||
function GetName() { return PROGRAM_NAME; }
|
||||
function GetDescription() { return "Make connection, transport cargo"; }
|
||||
function GetVersion() { return 1; }
|
||||
function GetDate() { return "2015-01-10"; }
|
||||
function GetVersion() { return PROGRAM_VERSION + SAVEGAME_VERSION * 100000; }
|
||||
function GetDate() { return PROGRAM_DATE; }
|
||||
function CreateInstance() { return "BusyBeeClass"; }
|
||||
function GetShortName() { return "BBEE"; }
|
||||
function GetAPIVersion() { return "1.5"; }
|
||||
function GetUrl() { return ""; }
|
||||
function MinVersionToLoad() { return 1; }
|
||||
function GetAPIVersion() { return "1.4.2"; }
|
||||
function GetUrl() { return "http://dev.openttdcoop.org/projects/busybee-gs"; }
|
||||
function MinVersionToLoad() { return MINCOMPATIBLE_SAVEGAME_VERSION; }
|
||||
function GetSettings();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user