Compare commits

..

12 Commits

Author SHA1 Message Date
Torsten Dreyer
72aae21420 new version: 2018.3.0 2018-05-19 21:02:47 +02:00
Torsten Dreyer
b8f206f1d4 new version: 2018.2.1 2018-05-19 21:02:47 +02:00
Torsten Dreyer
69e2ca5ce6 Prepare 2018.2 release 2018-05-19 07:21:49 +02:00
Florent Rougon
1020303fec download_and_compile.sh: clarify what Qt build-dependencies are needed for
Since James' recent FG work, the Qt private headers are not needed
anymore for the Qt launcher; clarify this in the comments (they are
still needed for FGQCANVAS, but it is disabled by default).
2018-05-12 18:09:31 +02:00
James Turner
68dee3f3a4 Catalog support for multiple author tags
This will enable richer author meta-data in aircraft, and hence
nicer GUI presentation of author information. Client-side support
still to be added before this can be used
2018-04-25 21:07:57 +01:00
Florent Rougon
64f3f534a2 download_and_compile.sh: add optional dependency on qml-module-qtquick-dialogs
The qml-module-qtquick-dialogs package is needed for the built-in
launcher's Settings dialog since FlightGear commit
37dc418ce1978a55281cdedf6983e0e3ffea0108.
2018-03-17 15:16:53 +01:00
James Turner
4588c2f1e8 Switch to relative submodule URLs
This will enable the Git mirror on Jenkins to work (and also
resolve some issues with SSH vs Git vs HTTP protocols)
2018-03-16 10:29:57 +00:00
Florent Rougon
5eb7dd3ef7 download_and_compile.sh: prefer libcurl4-openssl-dev to libcurl4-gnutls-dev
Forum user daweed reported[1] a nasty error[2] when doing 'git clone' or
'git pull' for FGData with the HTTPS protocol. This error disappeared as
soon as he replaced libcurl4-gnutls-dev with libcurl4-openssl-dev on his
system.

-> favor installation of libcurl4-openssl-dev over libcurl4-gnutls-dev

[1] https://forum.flightgear.org/viewtopic.php?f=20&p=329326#p329324

[2] "RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection
    was non-properly terminated"
2018-03-13 22:23:04 +01:00
Curtis L. Olson
c548c55274 Add compatibility with 2018 releases. 2018-02-27 05:54:06 -06:00
Torsten Dreyer
fcc7af9991 try git:// protocol for submodules 2018-02-19 10:18:43 +01:00
Torsten Dreyer
e79bb4f8be track submodule changes for release 2018-02-18 21:23:13 +01:00
Torsten Dreyer
e8d25cd78f new version: 2018.2.0 2018-02-18 21:23:13 +01:00
14 changed files with 158 additions and 31 deletions

12
.gitmodules vendored
View File

@@ -1,24 +1,24 @@
[submodule "simgear"]
path = simgear
url = https://git.code.sf.net/p/flightgear/simgear
url = ../simgear
branch = next
[submodule "flightgear"]
path = flightgear
url = https://git.code.sf.net/p/flightgear/flightgear
url = ../flightgear
branch = next
[submodule "fgrun"]
path = fgrun
url = https://git.code.sf.net/p/flightgear/fgrun
url = ../fgrun
branch = next
[submodule "fgdata"]
path = fgdata
url = git://git.code.sf.net/p/flightgear/fgdata
url = ../fgdata
branch = next
[submodule "windows-3rd-party"]
path = windows-3rd-party
url = https://git.code.sf.net/p/flightgear/windows-3rd-party
url = ../windows-3rd-party
branch = master
[submodule "getstart"]
path = getstart
url = https://git.code.sf.net/p/flightgear/getstart
url = ../getstart
branch = next

View File

@@ -10,6 +10,16 @@ import sys
import catalogTags
CATALOG_VERSION = 4
quiet = False
verbose = False
def warning(msg):
if not quiet:
print(msg)
def log(msg):
if verbose:
print(msg)
# xml node (robust) get text helper
def get_xml_text(e):
@@ -43,13 +53,17 @@ def scan_set_file(aircraft_dir, set_file, includes):
variant = {}
name = sim_node.getValue("description", None)
if (name == None or len(name) == 0):
print "Set file " + set_file + " is missing a <description>, skipping"
warning("Set file " + set_file + " is missing a <description>, skipping")
return None
variant['name'] = name
variant['status'] = sim_node.getValue("status", None)
if sim_node.hasChild('author'):
if sim_node.hasChild('authors'):
# aircraft has structured authors data, handle that
variant['authors'] = extract_authors(sim_node.getChild('authors'))
elif sim_node.hasChild('author'):
variant['author'] = sim_node.getValue("author", None)
if sim_node.hasChild('long-description'):
@@ -94,7 +108,7 @@ def extract_previews(previews_node, aircraft_dir):
# check path exists in base-name-dir
fullPath = os.path.join(aircraft_dir, previewPath)
if not os.path.isfile(fullPath):
print "Bad preview path, skipping:" + fullPath
warning("Bad preview path, skipping:" + fullPath)
continue
result.append({'type':previewType, 'path':previewPath})
@@ -106,11 +120,25 @@ def extract_tags(tags_node, set_path):
tag = node.value
# check tag is in the allowed list
if not catalogTags.isValidTag(tag):
print "Unknown tag value:", tag, " in ", set_path
warning("Unknown tag value:" + tag + " in " + set_path)
result.append(tag)
return result
def extract_authors(authors_node):
result = []
for author in authors_node.getChildren("author"):
authorName = author.getValue("name", None)
if (authorName == None):
continue
authorNick = author.getValue("nick", None)
authorEmail = author.getValue("email", None)
authorDesc = author.getValue("description", None)
result.append({'name':authorName, 'nick':authorNick, 'email':authorEmail, 'description':authorDesc})
return result
# scan all the -set.xml files in an aircraft directory. Returns a
# package dict and a list of variants.
def scan_aircraft_dir(aircraft_dir, includes):
@@ -187,6 +215,25 @@ def append_tag_nodes(node, variant):
for tag in variant['tags']:
node.append(make_xml_leaf('tag', tag))
def append_author_nodes(node, info):
if 'authors' in info:
authors_node = ET.Element('authors')
for a in info['authors']:
a_node = ET.Element('author')
a_node.append(make_xml_leaf('name', a['name']))
if (a['email'] != None):
a_node.append(make_xml_leaf('email', a['email']))
if (a['nick'] != None):
a_node.append(make_xml_leaf('nick', a['nick']))
if (a['description'] != None):
a_node.append(make_xml_leaf('description', a['description']))
authors_node.append(a_node)
node.append(authors_node)
elif 'author' in info:
# traditional single author string
node.append( make_xml_leaf('author', info['author']) )
def make_aircraft_node(aircraftDirName, package, variants, downloadBase):
#print "package:", package
#print "variants:", variants
@@ -194,8 +241,7 @@ def make_aircraft_node(aircraftDirName, package, variants, downloadBase):
package_node.append( make_xml_leaf('name', package['name']) )
package_node.append( make_xml_leaf('status', package['status']) )
if 'author' in package:
package_node.append( make_xml_leaf('author', package['author']) )
append_author_nodes(package_node, package)
if 'description' in package:
package_node.append( make_xml_leaf('description', package['description']) )
@@ -242,6 +288,7 @@ def make_aircraft_node(aircraftDirName, package, variants, downloadBase):
append_preview_nodes(variant_node, variant, downloadBase, aircraftDirName)
append_tag_nodes(variant_node, variant)
append_author_nodes(variant_node, variant)
package_node.append( make_xml_leaf('dir', aircraftDirName) )

View File

@@ -8,6 +8,7 @@
<version n="3">3.7.*</version>
<version n="5">2016.*.*</version>
<version n="6">2017.*.*</version>
<version n="7">2018.*.*</version>
<id>org.flightgear.fgaddon</id>
<license>GPL</license>
<url>http://mirrors.ibiblio.org/flightgear/ftp/Aircraft/catalog.xml</url>

View File

@@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<PropertyList>
<sim>
<name>c172</name>
<description>Cessna 172P</description>
<author>Wilbur Wright</author>
</sim>
</PropertyList>

View File

@@ -1,7 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<PropertyList>
<sim include="settings-common.xml">
<author>Wilbur Wright</author>
<authors>
<author n="0">
<name>Wilbur Wright</name>
<email>ww@wright.com</email>
<nick>wilburw</nick>
<description>Model, FDM and cockpit</description>
</author>
<author n="1">
<name>Orville Wright</name>
<description>Testing and systems</description>
</author>
</authors>
<tags>
<tag>fighter</tag>
<tag>1980s</tag>

View File

@@ -6,7 +6,14 @@
<long-description>The F16-B is an upgraded version of the F16A.</long-description>
<variant-of>f16a</variant-of>
<author>James T Kirk</author>
<authors n="0">
<author n="0">
<name>James T Kirk</name>
<email>shatner@enterprise.com</email>
<nick>starlover</nick>
<description>Everything</description>
</author>
</authors>
</sim>
</PropertyList>

View File

@@ -6,6 +6,8 @@ import os
import catalog
import lxml.etree as ET
catalog.quiet = True
class UpdateCatalogTests(unittest.TestCase):
def test_scan_set(self):
info = catalog.scan_set_file("testData/Aircraft/f16", "f16a-set.xml", ["testData/OtherDir"])
@@ -13,18 +15,30 @@ class UpdateCatalogTests(unittest.TestCase):
self.assertEqual(info['name'], 'F16-A')
self.assertEqual(info['primary-set'], True)
self.assertEqual(info['variant-of'], None)
self.assertEqual(info['author'], 'Wilbur Wright')
self.assertEqual(info['rating_FDM'], 3)
self.assertEqual(info['rating_model'], 5)
self.assertEqual(len(info['tags']), 3)
self.assertEqual(info['minimum-fg-version'], '2017.4')
authorsArray = info['authors']
self.assertNotIn('author', info)
self.assertEqual(len(authorsArray), 2)
author0 = authorsArray[0]
self.assertEqual(author0['name'], 'Wilbur Wright')
self.assertEqual(author0['nick'], 'wilburw')
self.assertEqual(author0['email'], 'ww@wright.com')
author1 = authorsArray[1]
self.assertEqual(author1['name'], 'Orville Wright')
# self.assertNotIn('nick', author1)
# self.assertNotIn('email', author1)
def test_scan_dir(self):
(pkg, variants) = catalog.scan_aircraft_dir("testData/Aircraft/f16", ["testData/OtherDir"])
self.assertEqual(pkg['id'], 'f16a')
f16trainer = next(v for v in variants if v['id'] == 'f16-trainer')
self.assertEqual(pkg['author'], 'Wilbur Wright')
self.assertEqual(len(variants), 3)
self.assertEqual(pkg['minimum-fg-version'], '2017.4')
@@ -38,14 +52,29 @@ class UpdateCatalogTests(unittest.TestCase):
f16b = next(v for v in variants if v['id'] == 'f16b')
self.assertEqual(f16b['variant-of'], 'f16a')
self.assertEqual(f16b['primary-set'], False)
self.assertEqual(f16b['author'], 'James T Kirk')
authorsArray = f16b['authors']
self.assertNotIn('author', f16b)
self.assertEqual(len(authorsArray), 2)
author0 = authorsArray[0]
self.assertEqual(author0['name'], 'James T Kirk')
self.assertEqual(author0['nick'], 'starlover')
f16c = next(v for v in variants if v['id'] == 'f16c')
self.assertEqual(f16c['variant-of'], 'f16a')
self.assertEqual(f16c['primary-set'], False)
self.assertEqual(f16c['author'], 'Wilbur Wright')
authorsArray = f16c['authors']
self.assertNotIn('author', f16c)
self.assertEqual(len(authorsArray), 2)
# test some older constructs for compat
def test_scan_dir_legacy(self):
(pkg, variants) = catalog.scan_aircraft_dir("testData/Aircraft/c172", [])
self.assertEqual(pkg['id'], 'c172')
self.assertEqual(pkg['author'], 'Wilbur Wright')
def test_extract_previews(self):
info = catalog.scan_set_file("testData/Aircraft/f16", "f16a-set.xml", ["testData/OtherDir"])
@@ -90,13 +119,25 @@ class UpdateCatalogTests(unittest.TestCase):
self.assertEqual(parsedPkgNode.getValue('name'), pkg['name']);
self.assertEqual(parsedPkgNode.getValue('description'), pkg['description']);
self.assertEqual(parsedPkgNode.getValue('author'), "Wilbur Wright");
self.assertEqual(parsedPkgNode.getValue('minimum-fg-version'), "2017.4");
parsedVariants = parsedPkgNode.getChildren("variant")
self.assertEqual(len(parsedVariants), 3)
# author data verification
self.assertFalse(parsedPkgNode.hasChild('author'));
parsedAuthors = parsedPkgNode.getChild("authors").getChildren('author')
self.assertEqual(len(parsedAuthors), 2)
author1 = parsedAuthors[0]
self.assertEqual(author1.getValue("name"), "Wilbur Wright")
self.assertEqual(author1.getValue("nick"), "wilburw")
self.assertEqual(author1.getValue("email"), "ww@wright.com")
author2 = parsedAuthors[1]
self.assertEqual(author2.getValue("name"), "Orville Wright")
f16ANode = parsedPkgNode
self.assertEqual(f16ANode.getValue('name'), 'F16-A');
@@ -107,11 +148,18 @@ class UpdateCatalogTests(unittest.TestCase):
if (var['id'] == 'f16-trainer'):
self.assertEqual(pv.getValue('variant-of'), '_primary_')
self.assertEqual(pv.getValue('author'), "Wilbur Wright");
# self.assertEqual(pv.getValue('author'), "Wilbur Wright");
elif (var['id'] == 'f16b'):
self.assertEqual(pv.getValue('variant-of'), 'f16a')
self.assertEqual(pv.getValue('description'), 'The F16-B is an upgraded version of the F16A.')
self.assertEqual(pv.getValue('author'), "James T Kirk");
# variant author verification
parsedAuthors = pv.getChild("authors").getChildren('author')
author1 = parsedAuthors[0]
self.assertEqual(author1.getValue("name"), "James T Kirk")
self.assertEqual(author1.getValue("nick"), "starlover")
self.assertEqual(author1.getValue("email"), "shatner@enterprise.com")
self.assertEqual(author1.getValue("description"), "Everything")
def test_minimalAircraft(self):
# test an aircraft with a deliberately spartan -set.xml file with

View File

@@ -325,8 +325,9 @@ fi
# Minimum
PKG="build-essential cmake git"
_mandatory_pkg_alternative libcurl4-openssl-dev libcurl4-gnutls-dev
# cmake
PKG="$PKG libarchive-dev libbz2-dev libcurl4-gnutls-dev libexpat1-dev libjsoncpp-dev liblzma-dev libncurses5-dev procps zlib1g-dev"
PKG="$PKG libarchive-dev libbz2-dev libexpat1-dev libjsoncpp-dev liblzma-dev libncurses5-dev procps zlib1g-dev"
# TG
PKG="$PKG libcgal-dev libgdal-dev libtiff5-dev"
# TGGUI/OpenRTI
@@ -339,10 +340,13 @@ _mandatory_pkg_alternative libopenscenegraph-3.4-dev libopenscenegraph-dev \
PKG="$PKG libopenal-dev libudev-dev qt5-default qtdeclarative5-dev libdbus-1-dev libplib-dev"
_mandatory_pkg_alternative libpng-dev libpng12-dev libpng16-dev
# The following packages are needed for the built-in launcher
_optional_pkg_alternative qtbase5-private-dev
_optional_pkg_alternative qtdeclarative5-private-dev
_optional_pkg_alternative qml-module-qtquick2
_optional_pkg_alternative qml-module-qtquick-window2
_optional_pkg_alternative qml-module-qtquick-dialogs
# The following packages are only needed for the Qt-based remote Canvas
# (comment written at the time of FG 2018.2).
_optional_pkg_alternative qtbase5-private-dev
_optional_pkg_alternative qtdeclarative5-private-dev
# FGPanel
PKG="$PKG fluid libbz2-dev libfltk1.3-dev libxi-dev libxmu-dev"
# FGAdmin

2
fgdata

Submodule fgdata updated: b1f197434c...b6df0ded76

View File

@@ -1,7 +1,7 @@
#!/bin/bash
THIS_RELEASE="2018.1"
NEXT_RELEASE="2018.2"
THIS_RELEASE="2018.2"
NEXT_RELEASE="2018.3"
SUBMODULES="simgear flightgear fgdata getstart"
#:<< 'COMMENT_END'

Submodule simgear updated: 8e29cae309...489573329e

View File

@@ -1 +1 @@
2018.1.1
2018.3.0