Compare commits

..

16 Commits

Author SHA1 Message Date
Automatic Release Builder
3c8b783710 Changes to create a debug build 2020-05-25 09:35:19 +01:00
legoboyvdlp R
e34d02edbc Windows install: re-add js_demo.exe
The former is an advanced configuration tool for users' joysticks.
2020-05-25 09:26:12 +01:00
Florent Rougon
3810a31230 download_and_compile.sh: improve user-interaction
Since the prompt is repeated by _yes_no_quit_prompt() every time an
invalid answer is given, a short sentence is better than the empty
string.
2020-05-24 16:31:26 +02:00
Florent Rougon
00710497b0 download_and_compile.sh: add missing quoting
This is needed because $answer will be empty in case the default $2 is
empty and the user hits Enter at the prompt.
2020-05-24 11:39:27 +02:00
Florent Rougon
420034d5b5 download_and_compile.sh: make initial cloning of FGData easy and secure
Because cloning FGData from SourceForge using https does not work (this
has been the case for *years*) whereas normal updates of an existing
clone do work, and so does cloning the repository from its official
GitLab mirror using https, this commits implements a special case in
_gitDownload():

  If the assembled clone URL is
  <https://git.code.sf.net/p/flightgear/fgdata>, then ask the user if he
  agrees to automatically clone FGData from GitLab and arrange the
  repository setup to fetch subsequent updates from SourceForge. This
  should be fine because <https://gitlab.com/flightgear/fgdata> is an
  official mirror of FGData. The default answer is thus to do so. It is
  automatically chosen when download_and_compile.sh is called with
  --non-interactive (new option).

This implies that the initial use of download_and_compile.sh is again as
easy as subsequent ones.

This commits also adds the utility function _yes_no_quit_prompt() to
repeatedly ask a question ($1) until a valid answer has been provided.
The function automatically uses the default answer ($2) if
--non-interactive has been passed to download_and_compile.sh. See the
“discussion” at
<https://sourceforge.net/p/flightgear/mailman/message/37017469/>.
2020-05-24 11:14:36 +02:00
Florent Rougon
b3893f7bda i18n Python scripts: allow autodetection of translation files
- Add class method availableTranslations() to AbstractFormatHandler in
  i18n.py.

- Use it in fg-update-translation-files to allow autodetection of the
  available translations when no LANGUAGE_CODE is passed to
  fg-update-translation-files.

This should address James' wish at
<https://sourceforge.net/p/flightgear/mailman/message/37003967/>.
2020-05-08 10:33:35 +02:00
James Turner
4e28b88c22 Windows: fixes for compositor builds 2020-05-03 19:02:26 +01:00
Florent Rougon
fa0dcb5d4d download_and_compile.sh: add libssl-dev as mandatory dep for CMake
Unless SSL support is turned off, libssl-dev is needed to build CMake.
Thanks to Jeff Davis for the report.
2020-05-01 17:39:46 +02:00
James Turner
819074136a Re-enable ‘full-fat’ nightlies for macOS
May need to tweak the bundle IDs for notarization, let’s see.
2020-05-01 12:00:59 +01:00
James Turner
03ac46120c Windows: remove erroneous space breaking build
This was causing to pick the second prefix path as the source dir,
which doesn’t work so well.
2020-05-01 08:46:49 +01:00
James Turner
cc76052038 Trunk FGAddon hangar: support 2020.* versions 2020-04-29 14:58:14 +01:00
legoboyvdlp R
3f38a3cf18 Add support for compositor to windows builds 2020-04-29 08:37:50 +01:00
James Turner
1c7dcaf5d5 macOS: package libSentry 2020-04-29 08:32:15 +01:00
James Turner
dbdfc52a00 Adjust release script 2020-04-27 09:31:38 +01:00
James Turner
d4489091e2 track submodule changes for release 2020-04-27 09:30:09 +01:00
James Turner
6fa2edf9d5 new version: 2020.2.0 2020-04-27 09:30:08 +01:00
15 changed files with 216 additions and 40 deletions

8
.gitmodules vendored
View File

@@ -1,11 +1,11 @@
[submodule "simgear"]
path = simgear
url = ../simgear
branch = release/2020.1
branch = next
[submodule "flightgear"]
path = flightgear
url = ../flightgear
branch = release/2020.1
branch = next
[submodule "fgrun"]
path = fgrun
url = ../fgrun
@@ -13,7 +13,7 @@
[submodule "fgdata"]
path = fgdata
url = ../fgdata
branch = release/2020.1
branch = next
[submodule "windows-3rd-party"]
path = windows-3rd-party
url = ../windows-3rd-party
@@ -21,4 +21,4 @@
[submodule "getstart"]
path = getstart
url = ../getstart
branch = release/2020.1
branch = next

View File

@@ -34,7 +34,7 @@
; we copy everything in install/<arch>/bin except these, which aren't
; useful to the end-user to ship
#define ExcludedBinaries "*smooth.exe,metar.exe,js_demo.exe"
#define ExcludedBinaries "*smooth.exe,metar.exe"
[Setup]
AppId=FlightGear

View File

@@ -3,6 +3,8 @@
<template>
<version n="0">2019.*</version>
<version n="1">2018.*</version>
<version n="2">2020.1.*</version>
<version n="3">2020.2.*</version>
<id>org.flightgear.fgaddon.trunk</id>
<license>GPL</license>

View File

@@ -88,6 +88,54 @@ function _logOutput(){
esac
}
function _yes_no_quit_prompt(){
local prompt="$1"
local default="$2"
local choices res answer
case "$default" in
[yY]) choices='Y/n/q' ;;
[nN]) choices='y/N/q' ;;
[qQ]) choices='y/n/Q' ;;
"")
if [[ "$INTERACTIVE_MODE" -eq 0 ]]; then
_printLog "Non-interactive mode requested, but found a question with" \
"no default answer;"
_printLog "this can't work, aborting."
exit 1
fi
choices='y/n/q'
;;
*)
_printLog \
"Invalid default choice for _yes_no_quit_prompt(): this is a bug in the"
"script, aborting."
exit 1
;;
esac
while true; do
if [[ "$INTERACTIVE_MODE" -eq 0 ]]; then
answer="$default"
else
read -r -p "$prompt [$choices] " answer
fi
if [[ -z "$answer" ]]; then
answer="$default"
fi
case "$answer" in
[yY]) res=0; break ;;
[nN]) res=1; break ;;
[qQ]) res=2; break ;;
*) ;;
esac
done
return $res
}
function _aptUpdate(){
local cmd=()
@@ -171,7 +219,6 @@ function _gitDownload(){
return
fi
if [ -f "README" -o -f "README.txt" -o -f "README.rst" ]; then
_printLog "$component: the repository already exists"
else
@@ -179,11 +226,73 @@ function _gitDownload(){
"${REPO_USERNAME[$component]}" \
"$component")
clone_arg="${proto_spec}${REPO_ADDRESS[$component]}"
_printLog "Fetching $component with 'git clone $clone_arg'"
git clone "$clone_arg" .
# Test whether $clone_arg is 'https://git.code.sf.net/p/flightgear/fgdata'
if _check_clone_url_and_maybe_ask "$clone_arg"; then
_clone_fgdata # Work around a problem at SourceForge
else
_printLog "Fetching $component with 'git clone $clone_arg'"
git clone "$clone_arg" .
fi
fi
}
# Return 0 if _clone_fgdata() should be used, otherwise 1.
function _check_clone_url_and_maybe_ask(){
local -i retcode=1
if [[ "$1" = "https://git.code.sf.net/p/flightgear/fgdata" ]]; then
local prompt_res=-1
set +e
if [[ "$INTERACTIVE_MODE" -eq 1 ]]; then
printf "From experience, cloning FGData from SourceForge using https does \
not work\n(probably a problem at SourceForge), but updates do work. Thus, we \
propose to\nclone FGData from GitLab and change the repository setup so that \
subsequent\nupdates are fetched from SourceForge. This should be quite safe, \
because\n<https://gitlab.com/flightgear/fgdata> is an official mirror of \
FGData (it is\nmaintained by FlightGear developers). Answer 'y' to proceed \
this way. If you\nanswer 'n', we'll *try* to clone FGData from SourceForge \
using https. Answer 'q'\nif you want to quit. "
fi
_yes_no_quit_prompt "What is your choice?" y; prompt_res=$?
set -e
case $prompt_res in
0) retcode=0 ;;
1) retcode=1 ;;
2) exit 0 ;;
*) _printLog "Unexpected return code from _yes_no_quit_prompt() in" \
"_check_clone_url_and_maybe_ask(); aborting."
exit 1 ;;
esac
if [[ $retcode -eq 1 ]]; then
_printLog "Okay, will try to clone FGData from SourceForge using" \
"https, but be aware that"
_printLog "this is likely to fail."
fi
fi
return $retcode
}
# Special function for cloning FGData with https. This is needed because there
# seems to be a problem at SourceForge that doesn't allow the clone operation
# to succeed for FGData using https---presumably because of its large size.
function _clone_fgdata(){
local url="https://${REPO_ADDRESS[DATA_ALT]}"
_printLog "Starting special initialization routine for the DATA component..."
_printLog "Fetching FGData with 'git clone $url'"
git clone "$url" .
_printLog "Creating the 'next' local branch"
git checkout -b next origin/next
url="https://${REPO_ADDRESS[DATA]}"
_printLog "Setting FGData's 'origin' remote to $url"
git remote set-url origin "$url"
_printLog "Updating FGData from $url"
git pull --ff-only
_printLog "Special initialization routine for the DATA component: done."
}
function _make(){
if [ "$COMPILE" = "y" ]; then
pkg="$1"
@@ -364,7 +473,17 @@ function _usage() {
echo " doing the same for SIMGEAR (e.g., if doing repeated TERRAGEAR"
echo " builds and you know your SIMGEAR is already fine and up-to-date)."
echo " -s compile only the last known stable versions"
echo " --compositor build FlightGear with compositor enabled."
echo " --compositor build FlightGear with compositor enabled"
echo " --non-interactive"
echo " don't ask any question; always assume the default answer in"
echo " situations where a question would normally be asked."
echo
echo "More detailed information can be found on the FlightGear wiki:"
echo ""
echo " http://wiki.flightgear.org/Scripted_Compilation_on_Linux_Debian/Ubuntu"
echo ""
echo "The wiki may sometimes be a bit outdated; if in doubt, consider this help text"
echo "as the reference."
}
#######################################################
@@ -373,6 +492,7 @@ set -e
CBD="$PWD"
LOGFILE="$CBD/compilation_log.txt"
INTERACTIVE_MODE=1
# Available values for WHATTOBUILD and WHATTOBUILDALL:
declare -a WHATTOBUILD_AVAIL=(
@@ -450,6 +570,9 @@ REPO_ADDRESS[SIMGEAR]="git.code.sf.net/p/flightgear/simgear"
REPO_SITE[SIMGEAR]="SourceForge"
REPO_ADDRESS[DATA]="git.code.sf.net/p/flightgear/fgdata"
REPO_SITE[DATA]="SourceForge"
# This is an official mirror of FGData
REPO_ADDRESS[DATA_ALT]="gitlab.com/flightgear/fgdata.git"
REPO_SITE[DATA_ALT]="GitLab"
REPO_ADDRESS[FGFS]="git.code.sf.net/p/flightgear/flightgear"
REPO_SITE[FGFS]="SourceForge"
REPO_ADDRESS[FGRUN]="git.code.sf.net/p/flightgear/fgrun"
@@ -471,7 +594,8 @@ if [[ `uname` == 'OpenBSD' ]]; then
fi
TEMP=$($getopt -o '+shc:p:a:d:r:j:O:ib:' \
--longoptions git-clone-default-proto:,git-clone-site-params:,help \
--longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor,version \
--longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor \
--longoptions non-interactive,version \
-n "$PROGNAME" -- "$@")
case $? in
@@ -549,6 +673,7 @@ while true; do
-i) OPENRTI="OPENRTI"; shift ;;
-b) BUILD_TYPE="$2"; shift 2 ;;
--compositor) COMPOSITOR="-DENABLE_COMPOSITOR=ON"; shift ;;
--non-interactive) INTERACTIVE_MODE=0; shift ;;
-h|--help) _usage; exit 0 ;;
--version) _printVersion; exit 0 ;;
--) shift; break ;;
@@ -691,7 +816,7 @@ if [[ "$DOWNLOAD_PACKAGES" = "y" ]]; then
# CMake
if _elementIn "CMAKE" "${WHATTOBUILD[@]}"; then
PKG+=(libarchive-dev libbz2-dev libexpat1-dev libjsoncpp-dev liblzma-dev
libncurses5-dev procps zlib1g-dev)
libncurses5-dev libssl-dev procps zlib1g-dev)
else
PKG+=(cmake)
fi
@@ -1071,11 +1196,11 @@ if _elementIn "FGFS" "${WHATTOBUILD[@]}" || \
fi
fi
cd "$CBD"
paths="../../$SIMGEAR_INSTALL_DIR/lib:../../$OSG_INSTALL_DIR/lib:../../$OPENRTI_INSTALL_DIR/lib:../../$PLIB_INSTALL_DIR/lib"
gdb="gdb"
set_ld_library_path="export LD_LIBRARY_PATH='$paths'\"\${LD_LIBRARY_PATH:+:}\${LD_LIBRARY_PATH}\""
common=""
common="${common}#!/bin/sh\n"
common="${common}cd \"\$(dirname \"\$0\")\"\n"

2
fgdata

Submodule fgdata updated: 7309ffef42...7d78937a4c

View File

@@ -22,7 +22,7 @@ echo "Build path is: $PATH"
# to be necessary all the same
#export PKG_CONFIG_PATH=$WORKSPACE/dist/lib/pkgconfig
cmakeCommonArgs="-G Ninja -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DCMAKE_BUILD_TYPE=RelWithDebInfo"
cmakeCommonArgs="-G Ninja -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DCMAKE_BUILD_TYPE=Debug"
###############################################################################
echo "Starting on SimGear"
@@ -30,7 +30,6 @@ pushd sgBuild
cmake ${cmakeCommonArgs} ../simgear
# compile
cmake --build . --target debug_symbols
cmake --build . --target install
if [ $? -ne '0' ]; then
@@ -52,7 +51,6 @@ fi
cmake -DFG_BUILD_TYPE=$FGBUILDTYPE -DENABLE_SWIFT:BOOL=ON ${cmakeCommonArgs} ../flightgear
cmake --build . --target debug_symbols
cmake --build . --target install
if [ $? -ne '0' ]; then
@@ -64,9 +62,6 @@ popd
chmod +x $WORKSPACE/dist/bin/osgversion
echo "Running symbol upload script"
./sentry-dSYM-upload-mac.sh
################################################################################
# run the unlock script now - we need to do this right before code-signing,

View File

@@ -167,8 +167,9 @@ if !$isRelease
--file #{dmgPath}`
else
puts "Creating full image with data"
end
puts "Creating full image with data"
`rsync -a fgdata/ #{resourcesDir}/data`
@@ -186,8 +187,6 @@ puts "Notarizing DMG #{dmgFullPath}"
--username "zakalawe@mac.com" \
--password "@keychain:FlightGearAppStoreConnectUserName" \
--file #{dmgFullPath}`
end
puts "Packaging complete"

View File

@@ -36,6 +36,10 @@ localization files in $FG_ROOT/Translations/<language_code>):
fg-update-translation-files --transl-dir="$FG_ROOT/Translations" \
merge-new-master $languages
Note: you may omit $languages in the fg-update-translation-files command if
you want to autodetect the FlightGear-nonQt.xlf files present in
$FG_ROOT/Translations.
Updating XLIFF files to reflect changes in the default translation
------------------------------------------------------------------
@@ -45,6 +49,9 @@ modified or removed, or categories added or removed[3]):
fg-update-translation-files --transl-dir="$FG_ROOT/Translations" \
merge-new-master $languages
Note: you may omit $languages in this command if you want to autodetect the
FlightGear-nonQt.xlf files present in $FG_ROOT/Translations.
Updating XLIFF files to mark or remove obsolete translated strings
------------------------------------------------------------------
@@ -53,9 +60,14 @@ To remove unused translated strings (not to be done too often in my opinion):
fg-update-translation-files --transl-dir="$FG_ROOT/Translations" \
remove-unused $languages
(you may replace 'remove-unused' with 'mark-unused' to just mark the strings
as not-to-be-translated, however 'merge-new-master' presented above already
does that)
Notes:
- You may omit $languages in this command if you want to autodetect the
FlightGear-nonQt.xlf files present in $FG_ROOT/Translations.
- It is possible to replace 'remove-unused' with 'mark-unused' to just mark
the strings as not-to-be-translated; however, 'merge-new-master' presented
above already does that.
Merging contents from an XLIFF file into another one
----------------------------------------------------

View File

@@ -27,6 +27,7 @@ import sys
import flightgear.meta.logging
import flightgear.meta.i18n as fg_i18n
from flightgear.meta.i18n import XliffFormatHandler
PROGNAME = os.path.basename(sys.argv[0])
@@ -45,7 +46,7 @@ def processCommandLine():
parser = argparse.ArgumentParser(
usage="""\
%(prog)s [OPTION ...] ACTION LANGUAGE_CODE...
%(prog)s [OPTION ...] ACTION [LANGUAGE_CODE]...
Update FlightGear XLIFF localization files.""",
description="""\
This program performs the following operations (actions) on FlightGear XLIFF
@@ -68,6 +69,13 @@ translation files (*.xlf):
In the XLIFF localization files corresponding to the specified
language(s), remove all translated strings that are marked as unused.
If no LANGUAGE_CODE is provided as an argument, then assuming $transl_dir
represents the value passed to --transl-dir, all directories $d such that a
file named FlightGear-nonQt.xlf is found in $transl_dir/$d will be acted on as
if they had been passed as LANGUAGE_CODE arguments (actually, the directory
$transl_dir/default is not considered as a candidate; it is simply skipped).
Typically, $transl_dir is /path/to/FGData/Translations.
A translated string that is marked as unused is still present in the XLIFF
localization file; it is just presented in a way that tells translators they
don't need to worry about it. On the other hand, when a translated string is
@@ -105,7 +113,7 @@ general on the short or mid-term: they only take some space.
remove those already marked as unused from the XLIFF
files corresponding to each given LANGUAGE_CODE (i.e.,
those that are not in the default translation)""")
parser.add_argument("lang_code", metavar="LANGUAGE_CODE", nargs="+",
parser.add_argument("lang_code", metavar="LANGUAGE_CODE", nargs="*",
help="""\
codes of languages to operate on (e.g., fr, en_GB, it,
es_ES...)""")
@@ -125,11 +133,19 @@ class MarkOrRemoveUnusedAction(enum.Enum):
mark, remove = range(2)
def langCodesToActOn():
"""Return an iterable of all language codes we were told to work on."""
if params.lang_code:
return params.lang_code
else:
return XliffFormatHandler.availableTranslations(params.transl_dir)
def markOrRemoveUnused(l10nResPoolMgr, action):
formatHandler = fg_i18n.XliffFormatHandler()
masterTransl = l10nResPoolMgr.readFgMasterTranslation().transl
for langCode in params.lang_code:
for langCode in langCodesToActOn():
xliffPath = formatHandler.defaultFilePath(params.transl_dir, langCode)
transl = formatHandler.readTranslation(xliffPath)
@@ -148,7 +164,7 @@ def mergeNewMaster(l10nResPoolMgr):
formatHandler = fg_i18n.XliffFormatHandler()
masterTransl = l10nResPoolMgr.readFgMasterTranslation().transl
for langCode in params.lang_code:
for langCode in langCodesToActOn():
xliffPath = formatHandler.defaultFilePath(params.transl_dir, langCode)
transl = formatHandler.readTranslation(xliffPath)
transl.mergeMasterTranslation(masterTransl, logger=logger)

View File

@@ -1001,6 +1001,33 @@ class AbstractFormatHandler(metaclass=abc.ABCMeta):
baseName = cls.defaultFileBaseName(targetLanguage)
return os.path.join(translationsDir, targetLanguage, baseName)
@classmethod
def availableTranslations(cls, translationsDir):
"""Return a list of all available translations in translationsDir.
This method expects a particular layout for translation files:
the one used in $FG_ROOT/Translations. More precisely, it looks
for all files named LANG_CODE/NAME in translationsDir, where
NAME is cls.defaultFileBaseName(LANG_CODE). The special
directory translationsDir/DEFAULT_LANG_DIR is not explored;
thus, the result cannot contain DEFAULT_LANG_DIR.
Return a list of language codes, sorted with list.sort().
"""
res = []
with os.scandir(translationsDir) as it:
for entry in it:
if (entry.name != DEFAULT_LANG_DIR and entry.is_dir() and
os.path.isfile(
os.path.join(
translationsDir, entry.name,
cls.defaultFileBaseName(entry.name)))):
res.append(entry.name)
res.sort()
return res
@abc.abstractmethod
def writeTranslation(self, transl, filePath):
"""Write a Translation instance to a file."""

View File

@@ -1,7 +1,7 @@
#!/bin/bash
THIS_RELEASE="2019.1"
NEXT_RELEASE="2019.2"
THIS_RELEASE="2020.1"
NEXT_RELEASE="2020.2"
SUBMODULES="simgear flightgear fgdata getstart"
#:<< 'COMMENT_END'
@@ -39,6 +39,6 @@ done
# IdentitiesOnly yes
# User user_sf_username
svn copy svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/trunk \
svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/branches/release-${THIS_RELEASE} \
-m "branching for release ${THIS_RELEASE}"
#svn copy svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/trunk \
# svn+ssh://svn.code.sf.net/p/flightgear/fgaddon/branches/release-${THIS_RELEASE} \
# -m "branching for release ${THIS_RELEASE}"

Submodule simgear updated: af8b27032f...bd93fb279b

View File

@@ -1 +1 @@
2020.1.2
2020.2.0