Compare commits

..

210 Commits

Author SHA1 Message Date
Automatic Release Builder
f050c7e47b FGData fixes from Erik 2022-01-31 13:37:29 +00:00
Automatic Release Builder
96aeb14ac5 Update GetStart submodule 2022-01-31 11:21:42 +00:00
Automatic Release Builder
ae773c9263 Update submodules 2022-01-31 11:21:00 +00:00
Automatic Release Builder
07fe43d2db Update submodules 2022-01-11 08:57:35 +00:00
Slawek Mikula
6909e7ed07 - Windows Installer - added Russian translations from (https://forum.flightgear.org/viewtopic.php?f=6&t=38536#p396531) 2022-01-04 11:22:28 +00:00
Automatic Release Builder
77b6f646a0 Many FGData picks 2021-12-25 17:04:46 +00:00
Automatic Release Builder
d045c87699 Bump FG submodule 2021-12-21 15:29:25 +00:00
Automatic Release Builder
0dc0df2607 Set submodules for 2020.3.12 2021-12-21 14:28:56 +00:00
Automatic Release Builder
553b737336 new version: 2020.3.12 2021-12-20 16:19:49 +00:00
Automatic Release Builder
bf1a0e0d19 Fix Simgear 2021-07-29 10:22:50 +01:00
Automatic Release Builder
9dd3dd4192 Set submodules for 2020.3.11 release 2021-07-29 09:11:09 +01:00
Automatic Release Builder
a961e76fda new version: 2020.3.11 2021-07-29 09:10:46 +01:00
James Turner
3613d23c5a Update submodules 2021-07-29 09:08:10 +01:00
James Turner
46aba9ad50 Update submodule for 2020.3.10 2021-07-23 12:30:04 +01:00
James Turner
941cb0c896 Update submoudles for 2020.3.10 2021-07-22 10:17:09 +01:00
James Turner
daf5e2699b Set submodule versions 2021-07-06 11:00:49 +01:00
Automatic Release Builder
75690e0138 new version: 2020.3.10 2021-07-06 10:56:42 +01:00
Automatic Release Builder
544de1b442 Update FG submodule 2021-06-11 13:42:43 +01:00
Slawek Mikula
8b4ead455e - FlightGear.iss - forcing ShouldSkipPage in custom defined code for downloading data 2021-06-11 12:44:17 +01:00
Automatic Release Builder
c2972bc0d1 Windows installer: Explicitly set IncludeWeb to FALSE
FIxes non-web build of the installer
2021-06-10 22:36:22 +01:00
Automatic Release Builder
43d8a32599 AppImage: use qmldir option 2021-06-10 14:46:14 +01:00
Automatic Release Builder
b66567cbb2 Update Getsart 2021-06-10 11:45:09 +01:00
Automatic Release Builder
14dd2d5900 Update FGData for 2020.3.9 2021-06-10 11:44:38 +01:00
Automatic Release Builder
a83dd79e81 Fix base package creation script
Ensure the scenery pack is extracted correctly
2021-06-09 14:04:07 +01:00
Automatic Release Builder
ed863a14fb Update submodules for 2020.3.9 2021-06-08 21:42:59 +01:00
Automatic Release Builder
1cb8a7baf1 Fix Ubuntu 16 / Mint 18 support: copy HarfBuzz
Need to include HarfBuzz in the image, which comes from /lib64 on our
build machine

Thanks to Brendan Black for tracking this down

Ticket-Id: https://sourceforge.net/p/flightgear/codetickets/2590/
2021-06-04 10:08:20 +01:00
Automatic Release Builder
02211856b7 Update FG submodule 2021-06-01 12:25:46 +01:00
Automatic Release Builder
7a3e72c281 new version: 2020.3.9 2021-05-27 11:16:52 +01:00
James Turner
987ac1e181 Update submodules 2021-05-27 11:09:06 +01:00
James Turner
c357ea1108 Release branch: turn off compositor builds 2021-05-27 10:12:20 +01:00
James Turner
6cd260adf9 AppImage: use stable 7 version of LinuxDeployQt 2021-05-24 14:18:20 +01:00
Automatic Release Builder
40b36861b9 Update Win3rd party for installer changes 2021-04-15 12:22:23 +01:00
Slawek Mikula
1ba1e7f43c - Windows Installer - i18n - dutch translations 2021-04-15 12:16:40 +01:00
Slawek Mikula
6d8cf06398 - Windows Installer - changed download location to SF 2021-04-15 12:16:24 +01:00
Slawek Mikula
4f9d7fe373 - Windows Installer - i18n for PL 2021-04-15 12:16:13 +01:00
Slawek Mikula
e1e1108bd2 - Windows Installer - disabling direxist warning when the same major version is installed earlier 2021-04-15 12:16:03 +01:00
Slawek Mikula
7439f0c79f - Windows Installer - changing web version to xz compression 2021-04-15 12:15:51 +01:00
Slawek Mikula
30718abd99 - windows installer - check for free disk space, better downloading error dialog, build_release_windows.bat - add -web flavour 2021-04-15 12:15:32 +01:00
Slawek Mikula
f05a164538 - preliminary support for downloading fgdata via web (sourceforge) 2021-04-15 12:15:13 +01:00
Automatic Release Builder
d0b4aefb88 Exclude more files from FGData
Should reduce file sizes a little.
2021-04-01 16:23:26 +01:00
Automatic Release Builder
213cd4de04 new version: 2020.3.8 2021-03-24 11:13:45 +00:00
Automatic Release Builder
967240b783 Update submodules for 2020.3.8 2021-03-24 11:13:38 +00:00
Automatic Release Builder
7a5908f9c0 FGData WS3 removal 2021-03-21 13:23:39 +00:00
Automatic Release Builder
9b60b88301 Update submodules 2021-03-19 16:49:06 +00:00
Automatic Release Builder
c4270430e2 Fix libLZMA path 2021-03-18 15:47:47 +00:00
Automatic Release Builder
61200bea82 Update FG submodule 2021-03-17 15:36:33 +00:00
Automatic Release Builder
f72adf4947 Update manual link to the web. 2021-03-17 15:36:18 +00:00
Automatic Release Builder
28ba97a4cd Update submodules 2021-03-16 20:37:51 +00:00
Automatic Release Builder
48989e1a2a Update submodules 2021-03-11 20:43:21 +00:00
Automatic Release Builder
d7ff5a99b4 Simplify Windows installer excludes list 2021-03-11 20:42:56 +00:00
Automatic Release Builder
423775a188 Update submodules for 2020.3.7 2021-03-08 12:39:36 +00:00
Automatic Release Builder
8584c60916 Update submodules 2021-03-05 12:28:52 +00:00
Automatic Release Builder
4661294303 Another installer excludes experiment 2021-03-05 12:27:30 +00:00
Automatic Release Builder
dff6cf5ee0 Windows installer: add more excludes
Hacking to try and squeeze under the 2GB limit.
2021-03-04 19:53:39 +00:00
Automatic Release Builder
28b00e7423 Windows installer: exclude XCF files 2021-03-02 17:04:03 +00:00
Automatic Release Builder
9e7771baea Update FG submodule 2021-03-01 17:31:59 +00:00
Automatic Release Builder
680030305b Update submodules for 2020.3.7 2021-03-01 12:14:18 +00:00
Automatic Release Builder
1d86c07ef1 new version: 2020.3.7 2021-03-01 12:13:45 +00:00
James Turner
a3186790bb Add LibLZMA to installers
- AppImage .so copy list
- manual copy on macOS DMG building
2021-03-01 12:08:04 +00:00
Automatic Release Builder
f2d0c2466a Don't wipe all of output/, only data TXZs
Otherwise we wipe source tarballs created by the build script.
2021-02-17 11:05:45 +00:00
Automatic Release Builder
b0dab4c22c Alternate syntax for older Git on Jenkins 2021-02-17 10:37:33 +00:00
Slawek Mikula
fcf0bdc73e - FlightGear-files.iss - port liblzma.dll to include x32/x64 versions 2021-02-13 19:05:50 +00:00
Slawek Mikula
3984fa0e38 - build_release_windows.bat - fix for creating InstallConfig.iss file (release branch) 2021-02-13 19:05:50 +00:00
Slawek Mikula
f86142c671 - FlightGear-i18n, FlightGear - added French (FR) language + small fix with sections 2021-02-13 19:05:50 +00:00
Slawek Mikula
156bebea53 - info-before-en.txt, info-before-pl.txt - EN/PL information before installation - unstable
- FlightGear-files.iss - removed commented-out files
- FlightGear.iss - add InfoBeforeFile for EN/PL languages
- setupimg.bmp - new last page screen
2021-02-13 19:05:50 +00:00
Slawek Mikula
150f699870 - #2524 - removed unused script (don't know where it comes from :)) 2021-02-13 19:05:50 +00:00
Slawek Mikula
e38f416e45 - #2524 - additional translatable string 2021-02-13 19:05:50 +00:00
Slawek Mikula
31bda0bdc7 - #2524 - added version generation (FGVersionGroup) and harness root path (FGHarnessPath) to build_release_windows.bat 2021-02-13 19:05:50 +00:00
Slawek Mikula
8260fdeb6f - #2524 - moved files from flightgear src to /windows folder, split *.iss file to subitems (files, i18n) 2021-02-13 19:05:50 +00:00
Slawek Mikula
2d5f22dcc1 - #2524 - windows installer with i18n and various tweaks (ported from version on next branch) 2021-02-13 19:03:32 +00:00
Automatic Release Builder
3ab7c65e7a Add script to create base package and update TXZ 2021-02-13 19:00:21 +00:00
Automatic Release Builder
b04ee7d5a3 Build fix for FG 2021-01-23 14:57:19 +00:00
Automatic Release Builder
631b408ae0 Update FG for 2020.3.6 2021-01-23 14:46:58 +00:00
Automatic Release Builder
598e95efba Update submodules for 2020.3.6 2021-01-21 14:55:38 +00:00
Automatic Release Builder
305e5ce889 new version: 2020.3.6 2021-01-20 13:03:22 +00:00
James Turner
9ef14b590d Update submodules for 2020.3.6 2021-01-20 13:03:16 +00:00
James Turner
025f335be1 Fixes to the scenery-pack creator 2021-01-20 13:00:10 +00:00
James Turner
195e84cfd5 Update submodules 2021-01-20 12:59:51 +00:00
Automatic Release Builder
eb4efb28ce Update FlightGear submodule 2020-12-17 21:25:31 +00:00
Automatic Release Builder
4f9dd89fca Add further commits for 2020.3.5 2020-12-17 14:07:38 +00:00
Automatic Release Builder
a7e2623c8d new version: 2020.3.5 2020-12-17 13:50:06 +00:00
James Turner
c442fefb93 Update submodules for 2020.3.5 2020-12-17 13:49:57 +00:00
James Turner
34ff55ad37 Update submodules 2020-12-17 13:46:56 +00:00
Automatic Release Builder
8b266f75da new version: 2020.3.4 2020-11-30 11:19:55 +00:00
Automatic Release Builder
aeaebbbb10 Update submodules for 2020.3.4 2020-11-30 10:17:21 +00:00
Automatic Release Builder
33cbcf51f7 Update flightgear 2020-11-21 16:00:17 +00:00
Automatic Release Builder
caeaa32ba8 Update FGData 2020-11-19 22:02:11 +00:00
Automatic Release Builder
ea7524899e AppImage: default to launch, fix osgDB plugin loading
When no arguments are pased to the AppImage, start with
the launcher for a pleasant experience.

Adjust the RPath on our copied osgDB plugins, so that dependencies
are found at the bundled lib dir.
2020-11-19 21:22:45 +00:00
Automatic Release Builder
29edfba044 AppImage: fix library paths
Fix spelling of the plugin path, and remove setting LD_LIBRARY_PATH
at all, to avoid breaking other apps we launch (eg browser).
2020-11-17 13:47:50 +00:00
Automatic Release Builder
1beae6304b Update FlightGear 2020-11-16 18:44:29 +00:00
Automatic Release Builder
73248547f9 new version: 2020.3.3 2020-11-12 11:16:11 +00:00
Automatic Release Builder
49b584ffe7 Update submoduel versions 2020-11-12 11:16:01 +00:00
Automatic Release Builder
06c7bbf557 Update submodules 2020-11-12 10:31:24 +00:00
Automatic Release Builder
399a3075c9 new version: 2020.3.2 2020-11-04 22:10:33 +00:00
James Turner
c24c41a998 Update submodules for 2020.3.2 2020-11-04 22:10:25 +00:00
James Turner
94c09416d5 Submodule updates 2020-11-04 11:55:46 +00:00
James Turner
be5880ee19 Save the modfiied create-scenery-pack script 2020-11-03 19:57:58 +00:00
James Turner
500cf2e82c Update submodules 2020-11-03 18:00:53 +00:00
James Turner
92c46f14c7 Update submodules 2020-11-01 11:08:47 +00:00
James Turner
62ca4bb577 Helper script to reset author 2020-10-30 12:00:38 +00:00
Automatic Release Builder
d7873fe00c Update submodules 2020-10-29 21:27:28 +00:00
Automatic Release Builder
9fcb01f81e Update flightgear submodule 2020-10-29 16:34:33 +00:00
Automatic Release Builder
04a518c23e Update submodules 2020-10-29 11:56:49 +00:00
Brendan Black
598c65d3e9 cp libfreebl* crypto libs so ubuntu 20.10 works 2020-10-28 18:06:35 +00:00
Automatic Release Builder
cfb0f907e4 Update Flightgear submodule 2020-10-27 20:09:49 +00:00
Automatic Release Builder
328fcda3f2 Update submodules for 2020.3.1 2020-10-26 09:30:48 +00:00
Automatic Release Builder
0fa6277203 Make set-version.sh handle new naming
Now we renamed simgear-version and flightgear-version, this
script needed to get smarter.
2020-10-26 09:29:23 +00:00
Automatic Release Builder
06be626360 new version: 2020.3.1 2020-10-26 09:10:09 +00:00
Automatic Release Builder
18cc06fa95 Update submodules spec 2020-10-14 11:31:11 +01:00
Automatic Release Builder
31c79982bf Set submodule versions 2020-10-13 22:44:53 +01:00
Automatic Release Builder
333dbb4aef Update version information 2020-10-13 22:43:35 +01:00
Automatic Release Builder
71f48ae217 Update FG submodule 2020-10-13 22:25:06 +01:00
Automatic Release Builder
60eb8c32b6 Update submodules again 2020-10-13 12:41:53 +01:00
Automatic Release Builder
cd500b70af Update submodules 2020-10-08 16:44:02 +01:00
Automatic Release Builder
aee62fc9e7 update submodules 2020-10-07 17:23:08 +01:00
Automatic Release Builder
f88c149a3d Update submodules 2020-10-05 14:29:28 +01:00
Automatic Release Builder
5977af70aa Update FlightGear 2020-10-03 15:36:35 +01:00
Automatic Release Builder
9a6c1ee6e5 Update submodules 2020-10-01 10:45:04 +01:00
Automatic Release Builder
f416a7bcf7 Update submodules 2020-09-30 17:25:44 +01:00
Automatic Release Builder
fd4c8d8ffc AppImage fixes: reduce the size, fix Osg-Plugin search
Set OSG_LIBRARY_PATH so our bundled OSG plugins are used by
default.

Reduce which QtQuick plugins we bundle, and ensure we copy libraries
using archive mode to preserve symlinks. Also remove static libs. All of the
above should drastically reduce the image size.
2020-09-28 16:29:32 +01:00
Automatic Release Builder
714c4ac51c Update FlightGear 2020-09-28 10:25:44 +01:00
Automatic Release Builder
f17ed95af1 Update submodules 2020-09-27 11:16:43 +01:00
Automatic Release Builder
58608042ab Submodule update 2020-09-25 13:55:58 +01:00
Automatic Release Builder
87ebbd0d0e Update submodules 2020-09-24 22:08:20 +01:00
Automatic Release Builder
c5710b9877 Update submodules 2020-09-23 22:12:59 +01:00
Automatic Release Builder
a8cb045967 macOS: mark crashpad handler as executable
Without this, Sentry fails to initialise
2020-09-23 18:06:52 +01:00
Automatic Release Builder
72916771df Update Windows-3rdparty for OpenAL-soft 2020-09-23 11:44:01 +01:00
Automatic Release Builder
6501bf7731 Update FLightGear submodule 2020-09-23 09:56:53 +01:00
Automatic Release Builder
c6d0ad04e6 Update windows submodule 2020-09-22 23:55:11 +01:00
Automatic Release Builder
0ceeec3cbf Add updated SimGear 2020-09-22 18:25:21 +01:00
Automatic Release Builder
5ab8f3f350 Upload symbols for Linux builds 2020-09-22 18:24:15 +01:00
Automatic Release Builder
ee9004d072 Submodule update 2020-09-20 19:27:43 +01:00
Automatic Release Builder
90360ebfd9 Update FlightGear submodule 2020-09-19 21:32:59 +01:00
Automatic Release Builder
c43b8e0c07 Update submodules 2020-09-19 13:20:34 +01:00
Automatic Release Builder
05a3445a7f Build_appImage tweaks 2020-09-18 10:46:44 +01:00
Automatic Release Builder
7d8d08097c Linux builder: use Ninja 2020-09-16 17:21:46 +01:00
Automatic Release Builder
d3828f3d68 Fix build_appimage permissions 2020-09-16 17:16:51 +01:00
Automatic Release Builder
ae84a587c6 Update submodules 2020-09-07 09:55:58 +01:00
Automatic Release Builder
f76fa38fed Update submodules 2020-08-26 16:42:09 +01:00
Automatic Release Builder
ef30051973 Update submodules for 2020.2 2020-08-26 10:50:47 +01:00
Automatic Release Builder
95e607c190 Update submodule commits 2020-08-24 10:39:00 +01:00
Automatic Release Builder
6db76c656c Update submodule 2020-08-18 16:49:04 +01:00
Automatic Release Builder
73b45b17a9 Update submodules 2020-08-17 13:14:13 +01:00
Automatic Release Builder
e61f4cbf9f Revert "Remove FGRun from 2020.2 branch"
Seems this doesn't work the way I thought it did :) To avoid complicating
things for 2018.3, let's wait until 2020.2 is released, to remove it
completely.

This reverts commit 80ed4b5ab4.
2020-07-15 09:36:24 +01:00
Automatic Release Builder
cca622a860 Submodule updates 2020-07-14 15:35:26 +01:00
Julian Smith
aec7fcf83a Cope with renamed version => flightgear-version file. 2020-07-14 14:09:18 +01:00
Automatic Release Builder
72edacaaad Add AppImage creation script by Brendan Black
Not fully tested yet but want to get this on Jenkins to see how it
goes.
2020-07-14 14:09:06 +01:00
Automatic Release Builder
80ed4b5ab4 Remove FGRun from 2020.2 branch 2020-06-26 10:27:49 +01:00
Automatic Release Builder
35657c786f Use branch for Windows 3rdparty 2020-06-15 12:41:37 +01:00
Automatic Release Builder
d90c55c215 set correct release-branch for submodules 2020-06-15 12:33:58 +01:00
Automatic Release Builder
40b6272570 new version: 2020.2.1 2020-06-15 12:33:58 +01:00
Automatic Release Builder
a82e6f7f6b Adjust for new LTS release 2020-06-15 12:33:20 +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
James Turner
6e608907b4 new version: 2020.1.1 2020-04-27 09:30:08 +01:00
Florent Rougon
ac504c70a2 download_and_compile.sh: fix typo in help text 2020-04-25 11:17:56 +02:00
Florent Rougon
2bb86ee6ea download_and_compile.sh: update address and branch for CMake
- The old URL for CMake's Git repository doesn't support https anymore;
  update it to match the one given at <https://cmake.org/>.

- Build the 'release' branch rather than 'master':
  download_and_compile.sh is not meant for CMake hackers!
2020-04-25 11:17:56 +02:00
James Turner
a02dc9aad6 Window: update installer script for Sentry
Replace CrashRpt DLL and uploader with the corresponding ones for the
Sentry-native API.
2020-04-18 19:54:00 +01:00
Florent Rougon
69033f37f8 i18n Python scripts: declare plural forms for Catalan and Slovak
Regarding Slovak language, there was enough info in
<https://code.qt.io/cgit/qt/qttools.git/tree/src/linguist/shared/numerus.cpp>.
As for Catalan, I don't see anything there, so I put
"ca": ["singular", "plural"] based on the fact that [1] says:

  "Catalan has an inflectional grammar. Nouns have two genders
   (masculine, feminine), and two numbers (singular, plural)."

I suspect we'll be ahead of Qt Linguist for Catalan.

[1] https://en.wikipedia.org/wiki/Catalan_language
2020-04-15 11:40:26 +02:00
James Turner
aa7770911b Revert "macOS: remove use of Ninja for now"
This reverts commit b954ad8cd7.
2020-04-11 16:38:43 +01:00
James Turner
b954ad8cd7 macOS: remove use of Ninja for now
For some reason the slave doesn’t like Ninja, let’s disable it until
I figure out why.
2020-04-10 12:07:04 +01:00
James Turner
9158b1688e Update macoS/Win build scripts for symbol uploading 2020-04-08 16:14:38 +01:00
James Turner
9effd91f62 macOS: Use different bundle identifiers for nightly builds
Also switch so nightly builds are always ‘lite’ (not full) to save
bandwidth / computational load on Jenkins
2020-04-02 22:21:20 +01:00
James Turner
0ddf75b382 Copy Swift libraries on macOS 2020-03-30 13:32:57 +01:00
Julian Smith
a2eb0d7b4c download_and_compile.sh: added --compositor option. 2020-03-24 22:21:01 +00:00
James Turner
14ee759409 Fix Python3 compatability 2020-03-24 14:27:27 +00:00
James Turner
aff1ac0f69 Add more catalog tags based on what’s used 2020-03-24 14:24:29 +00:00
James Turner
9453e085b3 Add Mespieler aircraft mirror 2020-03-21 18:41:45 +00:00
James Turner
da4cf552cb Bugfix, missed $ on global variable 2020-03-18 12:41:42 +00:00
James Turner
91e0f86a0b macOS: code-signing changes 2020-03-17 16:33:27 +00:00
James Turner
aae488794e Notarization support in macOS packaging scripts 2020-03-13 16:59:14 +00:00
Edward d'Auvergne
4dffeeb56e Catalogs: Addition of an initial README.md file. 2019-11-18 11:23:27 +01:00
Edward d'Auvergne
ed7075f4ba Catalogs: Python 3 compatibility for reading binary data.
IO data needs to be decoded, and the binary zip file needs to be opened in 'rb'
binary mode.
2019-11-18 10:26:40 +01:00
Edward d'Auvergne
185a10f7c5 Catalogs: Python3 does not have a 'long' integer type. 2019-11-18 10:10:22 +01:00
Edward d'Auvergne
5d3fcd3ba0 Catalogs: Converted all print statements into Python 3 compatible functions. 2019-11-18 10:06:24 +01:00
Edward d'Auvergne
3b1a3c51b1 Catalogs: Default to Python 3. 2019-11-18 09:58:58 +01:00
Edward d'Auvergne
ea18939738 Catalogs: Addition of example configuration files for testing a single craft.
This is useful for aircraft authors to see what will be packed into the zip
archive.
2019-11-14 12:00:02 +01:00
Edward d'Auvergne
d22ff42e42 Catalogs: The scm <update> XML tag is now used.
The tag can be overridden on the command line with the --update and --no-update options.
2019-11-14 11:59:56 +01:00
Edward d'Auvergne
190d789a54 Catalogs: Support for <include> tags to allow a subset of craft to be cataloged. 2019-11-13 22:26:11 +01:00
Edward d'Auvergne
8534a8aba4 Catalogs: Modification of the template file parsing.
The code is now a function in the 'catalog' module and checks for the existence
of the file are now performed.
2019-11-13 22:26:11 +01:00
Edward d'Auvergne
9ec3e015b2 Catalogs: Modification of the configuration file parsing.
The code is now a function in the 'catalog' module and checks for the existence
of the file are now performed.
2019-11-13 22:26:10 +01:00
Edward d'Auvergne
b8c05410e3 Catalogs: Rewrite of the craft zip creation using the Python zipfile module.
If a 'zip-excludes.lst' file is found in the craft's base directory, that will
overwrite the global catalog exclusion list.

Three new unit tests have been created to test the functionality.
2019-11-13 22:25:49 +01:00
Edward d'Auvergne
fd6fae3858 Catalogs: Expansion of the zip archive exclusion file.
This includes addition of the craft development directories 'dev', 'Dev',
'development', 'src', and 'Resources' and handling the common compressed gimp
file *.xcf.gz, a capitalised gimp file, and Blender *.blend[1-9] files.
2019-11-13 22:18:43 +01:00
Edward d'Auvergne
ca4a2ca813 Catalogs: Bug fixes allowing the unit tests to pass again.
3 of the tests have been broken since 70dfd6b8d4,
the change to LXML.
2019-11-12 14:26:24 +01:00
Torsten Dreyer
da0d245685 Script to create the scenery pack 2019-11-06 13:51:41 +01:00
Scott Giese
e0568f4f63 Final 'white text' version 2019-09-29 22:41:01 -05:00
Scott Giese
f61d0d35bd Add option for white text fix. 2019-09-29 17:50:58 -05:00
Scott Giese
61fbe94ee2 [fg-from-scratch] curl_debug library 2019-09-21 11:55:29 -05:00
Scott Giese
523fe108be [fg-from-scratch] PLIB and debug modules 2019-09-21 11:12:11 -05:00
Scott Giese
23e6b50aa9 [fg-from-scratch] improved SimGear options 2019-09-21 10:21:14 -05:00
Scott Giese
22337b2bdb [fg-from-scratch] improve FG and TG options 2019-09-19 19:58:26 -05:00
Scott Giese
b38a53490c [fg-from-scratch] improve SimGear options 2019-09-18 23:13:53 -05:00
Scott Giese
326dd6e11d [fg-from-scratch] improve OSG build options 2019-09-18 22:33:33 -05:00
Scott Giese
40e5af8d57 VS2019 defaults to x64 2019-09-17 20:37:46 -05:00
Scott Giese
eea7bac1e8 [fg-from-scratch]
Auto detect Qt5 install path
Auto detect latest VS version
Upgrade to OSG 3.6
Organize folder structure
2019-09-16 23:50:35 -05:00
Julian Smith
a5e4c47f1d download_and_compile.sh: improved generation of run_fgfs*.sh scripts.
Use common code for run_fgfs.sh and run_fgfs_debug.sh. If OpenBSD, also add a
ulimit -d command to increase data segment size.
2019-09-04 13:35:30 +01:00
Julian Smith
9804df24a1 download_and_compile.sh: Added support for building fgfs on OpenBSD.
Added support for building zlib, because current openbsd-6.5's zlib is too old.

If OpenBSD:
    Default to not attempting to update or download packages - for now packages
    have to be installed manually with pkg_add.

    Use gnugetopt.

    Use ZLIB build for simgear and fgfs.

    For fgfs, use -DENABLE_QT=OFF -DENABLE_FGCOM=OFF.

    For run_fgfs_debug.sh, use egdb because default gdb is too old.
2019-09-04 13:34:27 +01:00
60 changed files with 1985 additions and 467 deletions

3
.gitignore vendored
View File

@@ -22,3 +22,6 @@ CMakeCache.txt
*.pyc
build-*
testOutput*
md5sum.xml
staging

10
.gitmodules vendored
View File

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

96
FlightGear-files.iss Normal file
View File

@@ -0,0 +1,96 @@
[Files]
; 32 bits install
Source: "{#InstallDir32}\bin\*.*"; DestDir: "{app}\bin"; Excludes: "{#ExcludedBinaries}"; Flags: ignoreversion recursesubdirs; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\zlib.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\libpng.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\libcurl.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\libintl-8.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\sentry.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\crashpad_handler.exe"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\dbus-1-3.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\event_core.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\liblzma.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
; 64 bits install
Source: "{#InstallDir64}\bin\*.*"; DestDir: "{app}\bin"; Excludes: "{#ExcludedBinaries}"; Flags: ignoreversion recursesubdirs; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\zlib.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\libpng.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\libcurl.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\libintl-8.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\sentry.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\crashpad_handler.exe"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\dbus-1-3.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\event_core.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\liblzma.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
; Include the base package
#if IncludeData == "TRUE"
Source: "{#FgHarnessPath}\fgdata\*.*"; DestDir: "{app}\data"; Excludes: "{#FGDataExcludes}"; Flags: ignoreversion recursesubdirs skipifsourcedoesntexist
#endif
; Web installer for the base package
#if IncludeWeb == "TRUE"
; txz
Source: "{#DecompressDir}\\xz.exe"; Flags: dontcopy
Source: "{#DecompressDir}\\liblzma.dll"; Flags: dontcopy
; tar
Source: "{#DecompressDir}\\tar.exe"; Flags: dontcopy
Source: "{#DecompressDir}\\libiconv-2.dll"; Flags: dontcopy
Source: "{#DecompressDir}\\libintl-2.dll"; Flags: dontcopy
; full code
Source: "{tmp}\\fgdata-extracted\\fgdata\\*.*"; DestDir: "{app}\data"; Flags: external recursesubdirs
#endif
; 32 bits install
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\ot{#OTSoNumber}-OpenThreads.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_ac.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_osga.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_3ds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_mdl.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_jpeg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_rgb.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_png.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_dds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_txf.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_tiff.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_freetype.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
; 64 bits install
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\ot{#OTSoNumber}-OpenThreads.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_ac.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_osga.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_3ds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_mdl.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_jpeg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_rgb.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_png.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_dds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_txf.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_tiff.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_freetype.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode

83
FlightGear-i18n.iss Normal file
View File

@@ -0,0 +1,83 @@
[Messages]
ConfirmUninstall=Are you sure you want to completely remove %1 {#FGVersion} and all of its components?
pl.ConfirmUninstall=Czy na pewno chcesz całkowicie usunąć %1 {#FGVersion} i wszystkie jego komponenty?
es.ConfirmUninstall=¿ Estás seguro de que quieres borrar completamente %1 {#FGVersion} y todos sus componentes ?
nl.ConfirmUninstall=Weet u zeker dat u %1 {#FGVersion} en alle bijbehorende onderdelen wilt verwijderen?
de.ConfirmUninstall=Bist Du sicher, dass Du %1 {#FGVersion} und alle Komponenten entfernen willst?
fr.ConfirmUninstall=Etes-vous certain de vouloir totalement désinstaller %1 {#FGVersion} et tous ses composants ?
ru.ConfirmUninstall=Вы уверены, что хотите полностьюу удалить %1 {#FGVersion} и все его компоненты?
[CustomMessages]
CreateDesktopIcon=Create a &desktop icon
CreateDesktopIconGroup=Additional icons:
RemoveAllSettings=Remove all settings, downloaded scenery and aircraft
RemoveAllSettingsDescription=FlightGear stores some settings in your user folder. In addition, scenery or aircraft data may have been downloaded to the download directory. To completely remove all these files, select this option.
FirewallFgException=Allows FlightGear to send and receive data over the multiplayer network and to get METARs.
FirewallFgcomException=Allows FGCom to establish a connection to FlightGear and the VoIP server for voice ATC communication.
ExtractingDownloadContentTitle=Extracting downloaded content
ExtractingDownloadContentMessage=This step will perform extraction of the downloaded content
ExtractingDownloadedFile=Extracting file
UntarringDownloadedFile=Untarring file
ErrorDownloadingFile=Error downloading file from the web repository. Error details: %s
NotEnoughSpaceOnInstallationDisk=Not enough space on the destination disk. At least 6GB is needed.
NotEnoughSpaceOnTemporaryDisk=Not enough space on the temporary folder disk. At least 6GB is needed.
pl.CreateDesktopIcon=Utwórz ikony na pulpicie
pl.CreateDesktopIconGroup=Dodatkowe ikony:
pl.RemoveAllSettings=Usuń wszystkie ustawienia, pobraną scenerię i samoloty
pl.RemoveAllSettingsDescription=FlightGear zapisuje niektóre ustawienia w katalogach użytkownika. Dodatkowo, sceneria lub dane statków powietrznych mogą być pobierane do katalogu pobrań. Aby całkowicie usunąć te ustawienia, wybierz tą opcję.
pl.FirewallFgException=Pozwala aplikacji FlightGear na wysyłanie i pobieranie danych przez sieć multiplayer oraz aby pobrać dane pogodowe METAR.
pl.FirewallFgcomException=Pozwala aplikacji FGCom na ustanowienie połączenia do aplikacji FlightGear i do serwerów VoIP dla komunikacji głosowej z ATC (kontrolerem lotów).
pl.ExtractingDownloadContentTitle=Rozpakowywanie pobranej dodatkowej treści
pl.ExtractingDownloadContentMessage=Ten krok rozpakuje pobraną dodatkową treść
pl.ExtractingDownloadedFile=Rozpakowywanie pliku
pl.UntarringDownloadedFile=Roztarowanie pliku
pl.ErrorDownloadingFile=Błąd pobierania pliku z repozytorium web. Szczegóły błędu: %s
pl.NotEnoughSpaceOnInstallationDisk=Brak miejsca na dysku docelowym. Przynajmniej 6GB jest wymagane.
pl.NotEnoughSpaceOnTemporaryDisk=Brak miejsca na dysku z folderem tymczasowym. Przynajmniej 6GB jest wymagane.
es.CreateDesktopIcon=Crear icono en el escritorio
es.RemoveAllSettings=Borrar todos los ajustes, escenarios y aviones descargados
es.RemoveAllSettingsDescription=FlightGear almacena algunos ajustes en tu carpeta de usuario. Adicionalmente, los datos de escenarios y aviones pueden haber sido descargados en el directorio de descargas. Para borrar completamente todos esos archivos, selecciona esta opción.
es.FirewallFgException=Permite a FlightGear mandar y recibir datos a la red multijugador y obtener METAR.
es.FirewallFgcomException=Permite a FGCom establecer una conexión con FlightGear y el servidor VoIP para comunicaciones de voz con el ATC.
nl.CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad
nl.CreateDesktopIconGroup=Overige snelkoppelingen:
nl.RemoveAllSettings=Verwijder alle instellingen en gedownloade data
nl.RemoveAllSettingsDescription=FlightGear bewaart een aantal instellingen in de gebruikersmap. Mogelijk is er ook data in de downloadmap opgeslagen. Selecteer deze optie om die bestanden definitief te verwijderen.
nl.FirewallFgException=Sta FlightGear toe om data te verzenden en ontvangen via het multiplayernetwerk en om live weergegevens te downloaden.
nl.FirewallFgcomException=Sta FGCom toe om verbinding met FlightGear en de VoIP server te maken voor op stem gebaseerde ATC-communicatie.
nl.ExtractingDownloadContentTitle=Gedownloade bestanden uitpakken
nl.ExtractingDownloadContentMessage=In deze stap worden de gedownloade bestanden uitgepakt
nl.ExtractingDownloadedFile=Bestand uitpakken
nl.UntarringDownloadedFile=Bestand uitpakken
nl.ErrorDownloadingFile=Fout bij het downloaden van een bestand. Foutinformatie: %s
nl.NotEnoughSpaceOnInstallationDisk=Onvoldoende vrije ruimte op de gekozen schijf. FlightGear vereist tenminste 6GB.
nl.NotEnoughSpaceOnTemporaryDisk=Onvoldoende vrije ruimte op de tijdelijke schijf. FlightGear vereist tenminste 6GB.
de.CreateDesktopIcon=Ein Desktop-Icon anlegen
de.RemoveAllSettings=Alle Einstellungen und heruntergeladene Daten löschen
de.RemoveAllSettingsDescription=FlightGear speichert seine Einstellungen in deinem User-Verzeichnis. Zusätzlich heruntergeladene Flugzeuge und Szenerie-Daten können sich im Download-Verzeichnis befinden. Wähle diese Option, um alle Daten zu löschen.
de.FirewallFgException=Erlaubt FlightGear die Verbindung zum Multiplayer-Netzwerk und den Download von METAR-Daten.
de.FirewallFgcomException=Erlaubt FGCom die Verbindung zu FlightGear- und VoIP-Servern für den ATC-Sprechfunk.
fr.CreateDesktopIcon=Créer une icône sur le bureau
fr.RemoveAllSettings=Supprimer tous les paramètres, scènes et aéronefs téléchargés
fr.RemoveAllSettingsDescription=FlightGear enregistre certains paramètres dans votre répertoire utilisateur. En complément, les scènes et les aéronefs peuvent avoir été installés dans le dossier Téléchargements. Pour supprimer totalement ces fichiers, choisissez cette option.
fr.FirewallFgException=Autorise FlightGear à émettre et recevoir des données multijoueurs sur le réseau et à recevoir les METARs.
fr.FirewallFgcomException=Autorise FGCom à établir une connexion vers FlightGear et le serveur VoIP pour les communications de contrôle aérien.
ru.CreateDesktopIcon=Создать икноку на &рабочий стол
ru.CreateDesktopIconGroup=Дополнительные иконки:
ru.RemoveAllSettings=Удалить все установки, загруженные сценарии и летательный аппарат
ru.RemoveAllSettingsDescription=FlightGear сохраняет некоторые настройки в вашей пользовательской папке. Кроме того, в каталог загрузки могли быть загружены данные о сценарии или летательном аппарате. Чтобы полностью удалить все эти файлы, выберите эту опцию.
ru.FirewallFgException=Разрешить FlightGear посылать и принимать данные через многопользовательское соединение и получать данные METAR.
ru.FirewallFgcomException=Разрешить FGCom устанавливать соединение с FlightGear и сервером VoIP для голосовой коммуникации с УВД.
ru.ExtractingDownloadContentTitle=Извлечение загруженного контента
ru.ExtractingDownloadContentMessage=На этом шаге будет выполнено извлечение загруженного контента.
ru.ExtractingDownloadedFile=Извлечение файла
ru.UntarringDownloadedFile=Несвязанный файл
ru.ErrorDownloadingFile=Ошибка загрузки файла из репозитория. Детальный отчёт: %s
ru.NotEnoughSpaceOnInstallationDisk=Недостаточно дискового пространства в выбранном диске. Требуется, как минимум 6GB свободного пространства.
ru.NotEnoughSpaceOnTemporaryDisk=Не хватает дискового пространства во временной папке. Требуется, как минимум 6GB свободного пространства.

387
FlightGear.iss Executable file → Normal file
View File

@@ -1,4 +1,4 @@
; Script generated by the Inno Setup Script Wizard.
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
;
; This script creates an installable FlightGear package for Win32 using the
@@ -7,7 +7,9 @@
;
; http://www.jrsoftware.org/isinfo.php
;
; Note: the files must appear in the X: drive.
; Note: Files root path is defined in the FgHarnessPath (in InstallConfig.iss)
;
; For example if You want to use X: drive as a root path
; You can do this with the command below:
;
; subst X: path_to_files
@@ -17,44 +19,75 @@
; C:\> subst X: F:\Path\to\FlightGear\root
; C:\> subst X: F:\
;
; TRANSLATION NOTE:
; - external i18n files HAVE to be UTF-8 with BOM encoded. Otherwise the installer can
; not detect correct file encoding
;
; InstallConfig.iss example content:
;
; #define FGHarnessPath "x:"
; #define FGVersion "2020.4.1"
; #define FGVersionGroup "2020.4"
; #define OSGVersion "3.0.0"
; #define OSGSoNumber "2"
; #define OTSoNumber "3"
; #define FGDetails "-nightly"
; #define IncludeData "FALSE"
; #define IncludeWeb "FALSE"
;
; Uninstall procedure with --uninstall flag:
; executed by fgfs.exe (fg_init.cxx):
; - removes all under the FG_HOME directory
; - removes all from Download dir/Terrasync
; - removes all from Download dir/Aircraft
#include "InstallConfig.iss"
#include "FlightGear-i18n.iss"
#define FGSourcePath FgHarnessPath + "\flightgear"
#define InstallDir32 "X:\install\msvc140"
#define InstallDir32 FgHarnessPath + "\install\msvc140"
#define OSGInstallDir InstallDir32 + "\OpenSceneGraph"
#define OSGPluginsDir OSGInstallDir + "\bin\osgPlugins-" + OSGVersion
#define InstallDir64 "X:\install\msvc140-64"
#define InstallDir64 FgHarnessPath + "\install\msvc140-64"
#define OSG64InstallDir InstallDir64 + "\OpenSceneGraph"
#define OSG64PluginsDir OSG64InstallDir + "\bin\osgPlugins-" + OSGVersion
#define ThirdPartyDir "X:\windows-3rd-party\msvc140"
#define ThirdPartyDir FgHarnessPath + "\windows-3rd-party\msvc140"
#define DecompressDir FgHarnessPath + "\windows-3rd-party\decompress"
; 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"
; Exclude XCF files from FGData to keep the size down
#define FGDataExcludes "*.xcf,*.xcf.gz"
#include "FlightGear-files.iss"
[Setup]
AppId=FlightGear
AppId=FlightGear_{#FGVersionGroup}
AppName=FlightGear
AppPublisher=The FlightGear Team
OutputBaseFilename=FlightGear-{#FGVersion}{#FGDetails}
AppVerName=FlightGear v{#FGVersion}
AppVersion={#FGVersion}
AppPublisherURL=http://www.flightgear.org
AppSupportURL=http://www.flightgear.org
AppUpdatesURL=http://www.flightgear.org
DefaultDirName={pf}\FlightGear {#FGVersion}
UsePreviousAppDir=no
DefaultGroupName=FlightGear {#FGVersion}
DefaultDirName={pf}\FlightGear {#FGVersionGroup}
DirExistsWarning=auto
UsePreviousAppDir=yes
DefaultGroupName=FlightGear {#FGVersionGroup}
UsePreviousGroup=no
LicenseFile=X:\flightgear\COPYING
LicenseFile={#FGSourcePath}\COPYING
Uninstallable=yes
SetupIconFile=X:\flightgear\package\flightgear.ico
SetupIconFile={#FgHarnessPath}\windows\flightgear.ico
VersionInfoVersion={#FGVersion}.0
InfoBeforeFile=X:\flightgear\package\windows\infobefore.txt
WizardImageFile=X:\flightgear\package\windows\setupimg.bmp
WizardImageFile={#FgHarnessPath}\windows\setupimg.bmp
WizardImageStretch=No
WizardSmallImageFile=X:\flightgear\package\windows\setupsmall.bmp
WizardSmallImageFile={#FgHarnessPath}\windows\setupsmall.bmp
VersionInfoCompany=The FlightGear Team
UninstallDisplayIcon={app}\bin\fgfs.exe
ArchitecturesInstallIn64BitMode=x64
@@ -65,137 +98,27 @@ ArchitecturesAllowed=x86 x64
; SignTool=fg_code_sign1
[Tasks]
; NOTE: The following entry contains English phrases ("Create a desktop icon" and "Additional icons"). You are free to translate them into another language if required.
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:CreateDesktopIconGroup}"
[Files]
; NOTE: run subst X: F:\ (or whatever path the expanded tree resides at)
;Source: "X:\*.txt"; DestDir: "{app}"; Flags: ignoreversion
; 32 bits install
Source: "{#InstallDir32}\bin\*.*"; DestDir: "{app}\bin"; Excludes: "{#ExcludedBinaries}"; Flags: ignoreversion recursesubdirs; Check: not Is64BitInstallMode
;locale only exists for fgrun - which has been disabled
;Source: "{#InstallDir32}\share\locale\*"; DestDir: "{app}\bin\locale"; Flags: ignoreversion recursesubdirs; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\zlib.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\libpng.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\libcurl.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\libintl-8.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\CrashRpt1403.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\crashrpt_lang.ini"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\CrashSender1403.exe"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\dbus-1-3.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty\bin\event_core.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
; 64 bits install
Source: "{#InstallDir64}\bin\*.*"; DestDir: "{app}\bin"; Excludes: "{#ExcludedBinaries}"; Flags: ignoreversion recursesubdirs; Check: Is64BitInstallMode
;locale only exists for fgrun - which has been disabled
;Source: "{#InstallDir64}\share\locale\*"; DestDir: "{app}\bin\locale"; Flags: ignoreversion recursesubdirs; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\zlib.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\libpng.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\libcurl.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\libintl-8.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\CrashRpt1403.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\crashrpt_lang.ini"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\CrashSender1403.exe"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\dbus-1-3.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#ThirdPartyDir}\3rdParty.x64\bin\event_core.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
; Include the base package
#if IncludeData == "TRUE"
Source: "X:\fgdata\*.*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs skipifsourcedoesntexist
#endif
; 32 bits install
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGInstallDir}\bin\ot{#OTSoNumber}-OpenThreads.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_ac.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_osga.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_3ds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_mdl.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_jpeg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_rgb.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_png.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_dds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_txf.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_tiff.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
Source: "{#OSGPluginsDir}\osgdb_freetype.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osganimation.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgfx.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgmanipulator.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgparticle.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgshadow.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgsim.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgterrain.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgtext.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_serializers_osgvolume.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_deprecated_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
;Source: "{#OSGPluginsDir}\osgdb_deprecated_osgparticle.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
; 64 bits install
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64InstallDir}\bin\ot{#OTSoNumber}-OpenThreads.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_ac.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_osga.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_3ds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_mdl.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_jpeg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_rgb.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_png.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_dds.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_txf.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_tiff.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
Source: "{#OSG64PluginsDir}\osgdb_freetype.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osganimation.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgfx.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgmanipulator.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgparticle.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgshadow.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgsim.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgterrain.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgtext.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_serializers_osgvolume.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_deprecated_osg.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
;Source: "{#OSG64PluginsDir}\osgdb_deprecated_osgparticle.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "{#FgHarnessPath}\windows\info-before-en.txt"
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"; InfoBeforeFile: "{#FgHarnessPath}\windows\info-before-pl.txt"
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl";
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"; InfoBeforeFile: "{#FgHarnessPath}\windows\info-before-nl.txt"
Name: "de"; MessagesFile: "compiler:Languages\German.isl";
Name: "fr"; MessagesFile: "compiler:Languages\French.isl";
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"; InfoBeforeFile: "{#FgHarnessPath}\windows\info-before-ru.txt"
[Dirs]
; Make the user installable scenery directory
Name: "{userdocs}\FlightGear\Aircraft"; Permissions: everyone-modify; Check: not DirExists(ExpandConstant('{userdocs}\FlightGear\Aircraft'))
Name: "{userdocs}\FlightGear\TerraSync"; Permissions: everyone-modify; Check: not DirExists(ExpandConstant('{userdocs}\FlightGear\TerraSync'))
Name: "{userdocs}\FlightGear\Custom Scenery"; Permissions: everyone-modify; Check: not DirExists(ExpandConstant('{userdocs}\FlightGear\Custom Scenery'))
Name: "{%USERPROFILE}\FlightGear\Downloads"; Permissions: creatorowner-modify; Check: not DirExists(ExpandConstant('{%USERPROFILE}\FlightGear\Downloads'))
Name: "{%USERPROFILE}\FlightGear\Custom Aircraft"; Permissions: creatorowner-modify; Check: not DirExists(ExpandConstant('{%USERPROFILE}\FlightGear\Custom Aircraft'))
Name: "{%USERPROFILE}\FlightGear\Custom Scenery"; Permissions: creatorowner-modify; Check: not DirExists(ExpandConstant('{%USERPROFILE}\FlightGear\Custom Scenery'))
[Icons]
Name: "{userdesktop}\FlightGear {#FGVersion}"; Filename: "{app}\bin\fgfs.exe"; Parameters: "--launcher"; WorkingDir: "{app}\bin"; Tasks: desktopicon;
Name: "{group}\FlightGear"; Filename: "{app}\bin\fgfs.exe"; Parameters: "--launcher"; WorkingDir: "{app}\bin";
Name: "{group}\FlightGear Manual"; Filename: "{app}\data\Docs\getstart.pdf"
Name: "{group}\FlightGear Documentation"; Filename: "{app}\data\Docs\index.html"
Name: "{userdesktop}\FlightGear {#FGVersionGroup}"; Filename: "{app}\bin\fgfs.exe"; Parameters: "--launcher"; WorkingDir: "{app}\bin"; Tasks: desktopicon;
Name: "{group}\FlightGear {#FGVersionGroup}"; Filename: "{app}\bin\fgfs.exe"; Parameters: "--launcher"; WorkingDir: "{app}\bin";
Name: "{group}\FlightGear Manual"; Filename: "http://flightgear.sourceforge.net/manual/{#FGVersionGroup}/"
Name: "{group}\Flightgear Wiki"; Filename: "http://wiki.flightgear.org"
Name: "{group}\Tools\Uninstall FlightGear"; Filename: "{uninstallexe}"
Name: "{group}\Tools\fgjs"; Filename: "cmd"; Parameters: "/k fgjs.exe ""--fg-root={app}\data"""; WorkingDir: "{app}\bin"
@@ -220,6 +143,32 @@ const
NET_FW_PROFILE2_PRIVATE = 2;
NET_FW_PROFILE2_PUBLIC = 4;
var
UninstallCheckCleanPage: TNewNotebookPage;
UninstallBackButton: TNewButton;
UninstallNextButton: TNewButton;
DoCleanCheckbox : TNewCheckBox;
CleanHelp : TNewStaticText;
DownloadPage: TDownloadWizardPage;
DownloadPageId: Integer;
ExtractDownload: TOutputProgressWizardPage;
ResultCode: Integer;
function OnDownloadProgress(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean;
begin
if Progress = ProgressMax then
Log(Format('Successfully downloaded file to {tmp}: %s', [FileName]));
Result := True;
end;
procedure InitializeWizard;
begin
DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), @OnDownloadProgress);
DownloadPageId := DownloadPage.ID;
ExtractDownload := CreateOutputProgressPage(ExpandConstant('{cm:ExtractingDownloadContentTitle}'), ExpandConstant('{cm:ExtractingDownloadContentMessage}'));
end;
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
@@ -323,17 +272,140 @@ begin
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin;
if (PageID = DownloadPageId) then
begin
if (ExpandConstant('{#IncludeWeb}') = 'FALSE') then begin
Result := True;
end else begin
Result := False;
end
end
else
begin
Result := False;
end;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
UninstallCheckCleanPage: TNewNotebookPage;
UninstallBackButton: TNewButton;
UninstallNextButton: TNewButton;
DoCleanCheckbox : TNewCheckBox;
CleanHelp : TNewStaticText;
fgDataInstalled: Cardinal;
diskFreeMB, diskTotalMB: Cardinal;
begin
if CurPageID = wpSelectDir then begin
// check disk free space - installationFolder
if GetSpaceOnDisk(ExpandConstant('{app}'), True, diskFreeMB, diskTotalMB) then
begin
if diskFreeMB < 6000 then begin
MsgBox(ExpandConstant('{cm:NotEnoughSpaceOnInstallationDisk}'), mbError, MB_OK);
Result := False;
end
else begin
Result := True;
end;
end;
// check disk free space - tempFolder
if GetSpaceOnDisk(ExpandConstant('{tmp}'), True, diskFreeMB, diskTotalMB) then
begin
if diskFreeMB < 6000 then begin
MsgBox(ExpandConstant('{cm:NotEnoughSpaceOnTemporaryDisk}'), mbError, MB_OK);
Result := False;
end
else begin
Result := True;
end;
end;
// if cannot determine disk size, defaults to move on
if diskFreeMB = 0 then begin
Result := True;
end;
end
else if CurPageID = wpReady then begin
if ShouldSkipPage(DownloadPageId) = false then begin
DownloadPage.Clear;
fgDataInstalled := 0;
// checking registry entry, if fgdata was installed
if RegKeyExists(HKEY_LOCAL_MACHINE, ExpandConstant('Software\FlightGear\{#FGVersionGroup}')) then
begin
if RegQueryDWordValue(HKEY_LOCAL_MACHINE, ExpandConstant('Software\FlightGear\{#FGVersionGroup}'), 'fgdata-installed', fgDataInstalled) then
begin
Log('Previous fgdata installed. Downloading delta package');
end;
end;
// selecting fgdata installation packages
if (fgDataInstalled = 1) then
begin
DownloadPage.Add('https://sourceforge.net/projects/flightgear/files/release-{#FGVersionGroup}/FlightGear-{#FGVersion}-update-data.txz/download', 'fgdata-downloaded.txz', '');
end
else
begin
DownloadPage.Add('https://sourceforge.net/projects/flightgear/files/release-{#FGVersionGroup}/FlightGear-{#FGVersion}-data.txz/download', 'fgdata-downloaded.txz', '');
end;
DownloadPage.Show;
try
try
DownloadPage.Download;
// show extract progress page
try
ExtractDownload.Show;
ExtractDownload.SetText(ExpandConstant('{cm:ExtractingDownloadedFile}'), 'fgdata-downloaded.txz');
ExtractTemporaryFile('xz.exe');
ExtractTemporaryFile('liblzma.dll');
if Exec(ExpandConstant('{tmp}\xz.exe'), ExpandConstant('-d "{tmp}\fgdata-downloaded.txz"'), ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
Log(Format('Successfully expanded file: %s', [ExpandConstant('{tmp}\fgdata-downloaded.txz')]));
ExtractDownload.SetText(ExpandConstant('{cm:UntarringDownloadedFile}'), ExpandConstant('fgdata-downloaded.tar'));
ExtractTemporaryFile('tar.exe');
ExtractTemporaryFile('libiconv-2.dll');
ExtractTemporaryFile('libintl-2.dll');
CreateDir(ExpandConstant('{tmp}\fgdata-extracted'));
if Exec(ExpandConstant('{tmp}\tar.exe'), ExpandConstant('-xf fgdata-downloaded.tar -C fgdata-extracted'), ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
Log(Format('Successfully untarred file: %s', [ExpandConstant('{tmp}\fgdata-downloaded.tar')]));
end
else begin
Log(Format('ERROR untarring file: %s', [ExpandConstant('{tmp}\fgdata-downloaded.tar')]));
end;
end
else begin
Log(Format('ERROR expanding file: %s', [ExpandConstant('{tmp}\fgdata-downloaded.txz')]));
end;
finally
ExtractDownload.Hide;
end;
Result := True;
except
// FIXME - available in IS 6.1.3-dev
//if DownloadPage.AbortedByUser then
// Log('Aborted by user.')
//else
SuppressibleMsgBox(Format(ExpandConstant('{cm:ErrorDownloadingFile}'), [AddPeriod(GetExceptionMessage)]), mbCriticalError, MB_OK, IDOK);
Result := False;
end;
finally
DownloadPage.Hide;
end;
end
else
begin
// skipping downloading
Result := True;
end;
end
else
Result := True;
end;
procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm
UninstallCheckCleanPage := TNewNotebookPage.Create(UninstallProgressForm);
UninstallCheckCleanPage.Notebook := UninstallProgressForm.InnerNotebook;
UninstallCheckCleanPage.Parent := UninstallProgressForm.InnerNotebook;
@@ -341,7 +413,7 @@ begin
DoCleanCheckbox := TNewCheckBox.Create(UninstallProgressForm);
DoCleanCheckbox.Parent := UninstallCheckCleanPage;
DoCleanCheckbox.Caption := 'Remove all settings, downloaded scenery and aircraft';
DoCleanCheckbox.Caption := ExpandConstant('{cm:RemoveAllSettings}');
DoCleanCheckbox.Left := ScaleX(10);
DoCleanCheckbox.Top := ScaleY(10);
@@ -356,9 +428,7 @@ begin
CleanHelp.Height := CleanHelp.AdjustHeight();
CleanHelp.WordWrap := True;
CleanHelp.Caption := 'FlightGear stores some settings in your user folder. In addition, ' +
'scenery or aircraft data may have been downloaded to the download directory. ' +
'To completely remove all these files, select this option.';
CleanHelp.Caption := ExpandConstant('{cm:RemoveAllSettingsDescription}');
UninstallProgressForm.InnerNotebook.ActivePage := UninstallCheckCleanPage;
@@ -389,14 +459,15 @@ var
begin
if CurStep = ssPostInstall then
begin
// firewall rules
GetWindowsVersionEx(Version);
if (Version.Major >= 6) then
begin
{ IN and OUT rules must be specified separately, otherwise the firewall will create only the IN rule }
AddAdvancedFirewallException('FlightGear', 'Allows FlightGear to send and receive data over the multiplayer network and to get METARs.', ExpandConstant('{app}') + '\bin\fgfs.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_IN);
AddAdvancedFirewallException('FlightGear', 'Allows FlightGear to send and receive data over the multiplayer network and to get METARs.', ExpandConstant('{app}') + '\bin\fgfs.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_OUT);
AddAdvancedFirewallException('FlightGear FGCom', 'Allows FGCom to establish a connection to FlightGear and the VoIP server for voice ATC communication.', ExpandConstant('{app}') + '\bin\fgcom.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_IN);
AddAdvancedFirewallException('FlightGear FGCom', 'Allows FGCom to establish a connection to FlightGear and the VoIP server for voice ATC communication.', ExpandConstant('{app}') + '\bin\fgcom.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_OUT);
AddAdvancedFirewallException('FlightGear', ExpandConstant('{cm:FirewallFgException}'), ExpandConstant('{app}') + '\bin\fgfs.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_IN);
AddAdvancedFirewallException('FlightGear', ExpandConstant('{cm:FirewallFgException}'), ExpandConstant('{app}') + '\bin\fgfs.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_OUT);
AddAdvancedFirewallException('FlightGear FGCom', ExpandConstant('{cm:FirewallFgcomException}'), ExpandConstant('{app}') + '\bin\fgcom.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_IN);
AddAdvancedFirewallException('FlightGear FGCom', ExpandConstant('{cm:FirewallFgcomException}'), ExpandConstant('{app}') + '\bin\fgcom.exe', NET_FW_IP_PROTOCOL_ALL, '', '', NET_FW_RULE_DIR_OUT);
end
else if (Version.Major = 5) and (((Version.Minor = 1) and (Version.ServicePackMajor >= 2)) or ((Version.Minor = 2) and (Version.ServicePackMajor >= 1))) then
begin
@@ -404,6 +475,9 @@ begin
AddBasicFirewallException('FlightGear', ExpandConstant('{app}') + '\bin\fgfs.exe');
AddBasicFirewallException('FlightGear FGCom', ExpandConstant('{app}') + '\bin\fgcom.exe');
end;
// registry entries
RegWriteDWordValue(HKEY_LOCAL_MACHINE, ExpandConstant('Software\FlightGear\{#FGVersionGroup}'), 'fgdata-installed', 1);
end;
end;
@@ -424,5 +498,8 @@ begin
begin
RemoveFirewallException('FlightGear', ExpandConstant('{app}') + '\bin\fgfs.exe');
RemoveFirewallException('FlightGear FGCom', ExpandConstant('{app}') + '\bin\fgcom.exe');
// registry entries
RegDeleteValue(HKEY_LOCAL_MACHINE, ExpandConstant('Software\FlightGear\{#FGVersionGroup}'), 'fgdata-installed');
end;
end;

View File

@@ -15,7 +15,7 @@
<key>CFBundleExecutable</key>
<string>fgfs</string>
<key>CFBundleIdentifier</key>
<string>org.flightgear.FlightGear</string>
<string><%= fgBundleIdentifier %></string>
<key>CFBundleVersion</key>
<string><%= fgVersion %></string>
<key>CFBundleShortVersionString</key>

103
build_appimage.sh Executable file
View File

@@ -0,0 +1,103 @@
#!/bin/bash
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
#
# builds Appimage on Centos 7 using linuxdeployqt from continuous build
# expects to work in $WORKSPACE, uses the contents of dist/{bin,share,lib64} copied into an appdir
# missing qt plugins are copied in manually, as are osgPlugins
# libcurl in SIMGEAR needs a setting to find the tls certificate, and OSG needs LD_LIBRARY_PATH so it can find osgPlugins
# currently not including FGDATA, but this could be done easily once FG is updated to change Nav database checks from path to some kind of checksum
#
# issues/errors:
# can't find qt translations - missing something in my build?
#
# errors/comments to enrogue@gmail.com
#clean up any previous build
rm -rf appdir
#create basic structure
mkdir -p appdir/usr/bin
mkdir -p appdir/usr/lib
mkdir -p appdir/usr/share
mkdir -p appdir/usr/qml
mkdir -p appdir/usr/ssl
#copy everything we need in
cp dist/bin/* appdir/usr/bin
cp -a dist/lib64/* appdir/usr/lib
# remove SimGearCore,Scene and any other static libs which leaked
rm appdir/usr/lib/lib*.a
cp -a dist/lib64/osgPlugins-3.4.2 appdir/usr/lib
# adjust the rpath on the copied plugins, so they don't
# require LD_LIBRARY_PATH to be set to load their dependencies
# correctly
patchelf --set-rpath \$ORIGIN/../ appdir/usr/lib/osgPlugins-3.4.2/*.so
cp -r dist/share appdir/usr
cp /usr/lib64/libsoftokn3.* appdir/usr/lib
cp /usr/lib64/libnsspem.so appdir/usr/lib
cp /usr/lib64/libfreebl* appdir/usr/lib
cp -a /usr/lib64/liblzma* appdir/usr/lib
cp /etc/pki/tls/certs/ca-bundle.crt appdir/usr/ssl/cacert.pem
# HarfBuzz is in /lib64 on CentOS, but still copy it: see
# https://sourceforge.net/p/flightgear/codetickets/2590/
cp -a /lib64/libharfbuzz.so* appdir/usr/lib
#modify the desktop file so that linuxdeployqt doesn't barf (version to 1.0, add semicolon to end of certain line types)
sed -i 's/^Categor.*/&;/ ; s/^Keyword.*/&;/ ; s/1\.1/1\.0/' appdir/usr/share/applications/org.flightgear.FlightGear.desktop
#generate AppRun script
# Note: don't set LD_LIBRARY_PATH here.
# if you do, you need to add code to unset it *sinde* FlightGear (eg, bootstrap.cxx),
# so that fork-ed processes don't inherit the value. For an example see:
# https://github.com/KDAB/hotspot/blob/master/src/main.cpp#L87
cat << 'EOF' > appdir/AppRun
#!/bin/bash
HERE="$(dirname "$(readlink -f "${0}")")"
export SIMGEAR_TLS_CERT_PATH=$HERE/usr/ssl/cacert.pem
export OSG_LIBRARY_PATH=${HERE}/usr/lib
if [[ $# -eq 0 ]]; then
echo "Started with no arguments; assuming --launcher"
exec "${HERE}/usr/bin/fgfs" --launcher
else
exec "${HERE}/usr/bin/fgfs" "$@"
fi
EOF
chmod +x appdir/AppRun
#grab continuous linuxdeployqt
wget -c https://github.com/probonopd/linuxdeployqt/releases/download/7/linuxdeployqt-7-x86_64.AppImage
#wget -c https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
chmod +x linuxdeployqt-7-x86_64.AppImage
#set VERSION for AppImage creation
export VERSION=`cat flightgear/flightgear-version`
./linuxdeployqt-7-x86_64.AppImage appdir/usr/share/applications/org.flightgear.FlightGear.desktop -appimage -qmldir=flightgear/src/GUI/qml/

View File

@@ -5,7 +5,9 @@ if [ "$WORKSPACE" == "" ]; then
exit 1
fi
VERSION=`cat flightgear/version`
cmakeGenerator=Ninja
cmakeCommonArgs="-DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DCMAKE_BUILD_TYPE=RelWithDebInfo"
VERSION=`cat flightgear/flightgear-version`
#####################################################################################
# ensure fgrcc can run when linked against libSimGearCore, for example
@@ -22,44 +24,63 @@ rm -rf output/*
#####################################################################################
echo "Starting on SimGear"
cd sgBuild
cmake -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DENABLE_DNS:BOOL="ON" -DSIMGEAR_SHARED:BOOL="ON" ../simgear
cmake -G $cmakeGenerator $cmakeCommonArgs ../simgear
# compile
make
ninja
if [ $? -ne '0' ]; then
echo "make simgear failed"
exit 1
fi
make install
ninja install
# build source package and copy to output
make package_source
ninja package_source
cp simgear-*.tar.bz2 ../output/.
#####################################################################################
echo "Starting on FlightGear"
cd ../fgBuild
cmake -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DSIMGEAR_SHARED:BOOL="ON" -DENABLE_SWIFT:BOOL=ON -DFG_BUILD_TYPE=Release ../flightgear
cmake -G $cmakeGenerator $cmakeCommonArgs -DENABLE_SWIFT:BOOL=ON -DFG_BUILD_TYPE=Release ../flightgear
# compile
make
ninja
if [ $? -ne '0' ]; then
echo "make flightgear failed"
exit 1
fi
make install
ninja install
# build source package and copy to output
make package_source
ninja package_source
cp flightgear-*.tar.bz2 ../output/.
#####################################################################################
echo "Assembling base package"
cd $WORKSPACE
if which sentry-cli >/dev/null; then
echo "Uploading symbols"
export SENTRY_ORG=flightgear
export SENTRY_PROJECT=flightgear
# set in the Jenkins environment for the builder
# export SENTRY_AUTH_TOKEN=YOUR_AUTH_TOKEN
ERROR=$(sentry-cli upload-dif --include-sources "$WORKSPACE/dist/bin/fgfs" 2>&1 >/dev/null)
if [ ! $? -eq 0 ]; then
echo "warning: sentry-cli - $ERROR"
fi
else
echo "warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases"
fi
# now we uploaded symnbols, strip the binaries
strip --strip-debug $WORKSPACE/dist/bin/fgfs
strip --strip-debug $WORKSPACE/dist/bin/fgviewer
strip --strip-debug $WORKSPACE/dist/bin/fgjs
tar cjf output/FlightGear-$VERSION-data.tar.bz2 fgdata/

View File

@@ -20,6 +20,7 @@ SET OSG64=%WORKSPACE%\install\msvc140-64\OpenSceneGraph
REM 32bits
md build-sg32
md build-fg32
cd build-sg32
cmake ..\simgear -G "Visual Studio 14" ^
-DMSVC_3RDPARTY_ROOT=%WORKSPACE%/windows-3rd-party/msvc140 ^
@@ -33,14 +34,13 @@ cd ..\build-fg32
cmake ..\flightgear -G "Visual Studio 14" ^
-DMSVC_3RDPARTY_ROOT=%WORKSPACE%/windows-3rd-party/msvc140 ^
-DCMAKE_INSTALL_PREFIX:PATH=%WORKSPACE%/install/msvc140 ^
-DCMAKE_PREFIX_PATH:PATH=%WORKSPACE%/install/msvc140/OpenSceneGraph ^
-DBOOST_ROOT=%WORKSPACE%/windows-3rd-party ^
-DOSG_FSTREAM_EXPORT_FIXED=1 ^
-DCMAKE_PREFIX_PATH=%QT5SDK32%;%OSG32% ^
-DFG_BUILD_TYPE=%FGBUILDTYPE% ^
-DENABLE_SWIFT:BOOL=ON
-DENABLE_SWIFT:BOOL=ON ^
-DENABLE_COMPOSITOR:BOOL=OFF
cmake --build . --config RelWithDebInfo --target INSTALL
cd ..
REM 64 bits
@@ -64,9 +64,9 @@ cmake ..\flightgear -G "Visual Studio 14 Win64" ^
-DCMAKE_PREFIX_PATH=%QT5SDK64%;%OSG64% ^
-DOSG_FSTREAM_EXPORT_FIXED=1 ^
-DFG_BUILD_TYPE=%FGBUILDTYPE% ^
-DENABLE_SWIFT:BOOL=ON
-DENABLE_SWIFT:BOOL=ON ^
-DENABLE_COMPOSITOR:BOOL=OFF
cmake --build . --config RelWithDebInfo --target INSTALL
cd ..
REM Qt5 deployment
@@ -83,14 +83,14 @@ subst X: %WORKSPACE%.
REM ensure output dir is clean since we upload the entirety of it
rmdir /S /Q output
SET CRASHFIX_UPLOAD_URL=http://crashes.flightgear.org/index.php/debugInfo/uploadExternal
SET FGFS_PDB=src\Main\RelWithDebInfo\fgfs.pdb
ECHO Uploading PDB files to %CRASHFIX_UPLOAD_URL%
upload -v -u %CRASHFIX_UPLOAD_URL% FlightGear %WORKSPACE%\build-fg32\%FGFS_PDB% %WORKSPACE%\build-fg64\%FGFS_PDB%
REM also save the PDB to Output\ so they get uploaded
copy %WORKSPACE%\build-fg64\%FGFS_PDB% %WORKSPACE%\Output\fgfs_64.pdb
copy %WORKSPACE%\build-fg32\%FGFS_PDB% %WORKSPACE%\Output\fgfs_32.pdb
SET SENTRY_ORG=flightgear
SET SENTRY_PROJECT=flightgear
REM ensure SENTRY_AUTH_TOKEN is set in the environment
sentry-cli upload-dif --include-sources %WORKSPACE%\build-fg32\%FGFS_PDB%
sentry-cli upload-dif --include-sources %WORKSPACE%\build-fg64\%FGFS_PDB%
REM indirect way to get command output into an environment variable
set PATH=%OSG32%\bin;%PATH%
@@ -98,11 +98,17 @@ osgversion --so-number > %TEMP%\osg-so-number.txt
osgversion --version-number > %TEMP%\osg-version.txt
osgversion --openthreads-soversion-number > %TEMP%\openthreads-so-number.txt
SET /P FLIGHTGEAR_VERSION=<flightgear\version
SET /P FLIGHTGEAR_VERSION=<flightgear\flightgear-version
SET /P OSG_VERSION=<%TEMP%\osg-version.txt
SET /P OSG_SO_NUMBER=<%TEMP%\osg-so-number.txt
SET /P OT_SO_NUMBER=<%TEMP%\openthreads-so-number.txt
for /F "tokens=1,2,3 delims=." %%a in ("%FLIGHTGEAR_VERSION%") do (
set FLIGHTGEAR_VERSION_MAJOR=%%a
set FLIGHTGEAR_VERSION_MINOR=%%b
set FLIGHTGEAR_VERSION_PATCH=%%c
)
IF %IS_NIGHTLY_BUILD% EQU 1 (
REM FlightGear nightly: with fgdata, output filename would be "FlightGear-x.x.x-nightly-full.exe"
CALL :writeBaseConfig
@@ -118,11 +124,18 @@ IF %IS_NIGHTLY_BUILD% EQU 1 (
CALL :writeBaseConfig
CALL :writeReleaseConfig
iscc /Q FlightGear.iss
REM FlightGear release: with fgdata web installer, output filename would be "FlightGear-x.x.x-web.exe"
CALL :writeBaseConfig
CALL :writeReleaseWebConfig
iscc /Q FlightGear.iss
)
GOTO End
:writeBaseConfig
ECHO #define FGVersion "%FLIGHTGEAR_VERSION%" > InstallConfig.iss
ECHO #define FGHarnessPath "x:" > InstallConfig.iss
ECHO #define FGVersion "%FLIGHTGEAR_VERSION%" >> InstallConfig.iss
ECHO #define FGVersionGroup "%FLIGHTGEAR_VERSION_MAJOR%.%FLIGHTGEAR_VERSION_MINOR%" >> InstallConfig.iss
ECHO #define OSGVersion "%OSG_VERSION%" >> InstallConfig.iss
ECHO #define OSGSoNumber "%OSG_SO_NUMBER%" >> InstallConfig.iss
ECHO #define OTSoNumber "%OT_SO_NUMBER%" >> InstallConfig.iss
@@ -132,6 +145,14 @@ GOTO End
CALL :writeBaseConfig
ECHO #define FGDetails "" >> InstallConfig.iss
ECHO #define IncludeData "TRUE" >> InstallConfig.iss
ECHO #define IncludeWeb "FALSE" >> InstallConfig.iss
GOTO End
:writeReleaseWebConfig
CALL :writeBaseConfig
ECHO #define FGDetails "-web" >> InstallConfig.iss
ECHO #define IncludeData "FALSE" >> InstallConfig.iss
ECHO #define IncludeWeb "TRUE" >> InstallConfig.iss
GOTO End
:writeNightlyFullConfig

63
catalog/README.md Normal file
View File

@@ -0,0 +1,63 @@
Introduction
============
This is the directory containing the script for updating aircraft, or other
craft, catalogs. It will create the `catalog.xml` file used to add a hangar to
FlightGear, as well as the zip archives of each craft in the hangar and the
md5sums, thumbnails, and previews of these. It consists of the script:
* update-catalog.py
And its Python modules:
* catalog.py
* catalogTags.py
* sgprogs.py
Usage
=====
The script can be run directly from this directory, or the script and its
modules can be copied together and run from any location. The steps to use
these are:
* Create an output directory where the catalog and zip files will be located.
* Copy the configuration files `catalog.config.xml`, `template.xml`, and
`zip-excludes.lst` from one of the `*catalog*` example directories into the
output directory.
* Modify these files as required.
Then run the script with:
`$ $FGMETA/catalog/update-catalog.py dir`
where `dir` is the output directory. The script will create the following
files:
* `md5sum.xml`: A file containing checksums of all craft zip archives in the
base output directory.
* `ftp/catalog.xml`: The XML catalog to upload to a server and advertise to
FlightGear users.
* `ftp/*.zip`: The zip archives of each craft in the hangar.
* `ftp/previews/*_Splashs/`: A directory per craft containing the splash screen
graphics.
* `ftp/thumbnails/`: The collection of thumbnail graphics for the hangar.
The `ftp` directory is to be uploaded to a server which can be configured via
the `catalog.config.xml` file.
Examples
========
A number of example configuration files are located in this directory. These
include:
* `fgaddon-catalog/`: The configuration files used for the [official FGAddon
hangar](http://wiki.flightgear.org/FGAddon).
* `stable-2018-catalog/': The configuration files used for the 2018 long term
stability release.
* `single-craft-catalog-test/`: Configuration files used for testing the
catalog and zip archive creation for a single craft. These are for content
developers to test their craft.

View File

@@ -2,18 +2,29 @@
import argparse
import datetime
#import xml.etree.cElementTree as ET
from fnmatch import fnmatch, translate
import lxml.etree as ET
import os
from os.path import exists, join, relpath
from os import F_OK, access, walk
import re
import sgprops
import sys
import catalogTags
import zipfile
CATALOG_VERSION = 4
quiet = False
verbose = False
# The Python version.
PY_VERSION = sys.version_info[0]
# Python 2 and 3 compatibility.
if PY_VERSION == 3:
long = int
def warning(msg):
if not quiet:
print(msg)
@@ -101,7 +112,7 @@ def scan_set_file(aircraft_dir, set_file, includes):
if sim_node.hasChild('minimum-fg-version'):
variant['minimum-fg-version'] = sim_node.getValue('minimum-fg-version', None)
#print ' ', variant
#print(" %s" % variant)
return variant
def extract_previews(previews_node, aircraft_dir):
@@ -140,13 +151,13 @@ def scan_aircraft_dir(aircraft_dir, includes):
files = os.listdir(aircraft_dir)
for file in sorted(files, key=lambda s: s.lower()):
if file.endswith('-set.xml'):
# print 'trying:', file
# print('trying: %s' % file)
try:
d = scan_set_file(aircraft_dir, file, includes)
if d == None:
continue
except:
print "Skipping set file since couldn't be parsed:", os.path.join(aircraft_dir, file), sys.exc_info()[0]
print("Skipping set file since couldn't be parsed: %s %s" % os.path.join(aircraft_dir, file), sys.exc_info()[0])
continue
setDicts.append(d)
@@ -156,13 +167,13 @@ def scan_aircraft_dir(aircraft_dir, includes):
elif d['variant-of'] == None:
primaryAircraft.append(d)
# print setDicts
# print(setDicts)
if len(setDicts) == 0:
return None, None
# use the first one
if len(primaryAircraft) == 0:
print "Aircraft has no primary aircraft at all:", aircraft_dir
print("Aircraft has no primary aircraft at all: %s" % aircraft_dir)
primaryAircraft = [setDicts[0]]
package = primaryAircraft[0]
@@ -214,8 +225,8 @@ def append_author_nodes(node, info):
node.append( make_xml_leaf('author', info['author']) )
def make_aircraft_node(aircraftDirName, package, variants, downloadBase, mirrors):
#print "package:", package
#print "variants:", variants
#print("package: %s" % package)
#print("variants: %s" % variants)
package_node = ET.Element('package')
package_node.append( make_xml_leaf('name', package['name']) )
package_node.append( make_xml_leaf('status', package['status']) )
@@ -286,3 +297,134 @@ def make_aircraft_node(aircraftDirName, package, variants, downloadBase, mirrors
package_node.append(package['urls']._createXMLElement())
return package_node
def make_aircraft_zip(repo_path, craft_name, zip_file, global_zip_excludes, verbose=True):
"""Create a zip archive of the given aircraft."""
# Printout.
if verbose:
print("Zip file creation: %s.zip" % craft_name)
# Go to the directory of crafts to catalog.
savedir = os.getcwd()
os.chdir(repo_path)
# Clear out the old file.
if exists(zip_file):
os.remove(zip_file)
# Use the Python zipfile module to create the zip file.
zip_handle = zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED)
# Find a per-craft exclude list.
craft_path = join(repo_path, craft_name)
exclude_file = join(craft_path, 'zip-excludes.lst')
if exists(exclude_file):
if verbose:
print("Found the craft specific exclusion list '%s'" % exclude_file)
# Otherwise use the catalog default exclusion list.
else:
exclude_file = global_zip_excludes
# Process the exclusion list and find all matching file names.
blacklist = fetch_zip_exclude_list(craft_name, craft_path, exclude_file)
# Walk over all craft files.
print_format = " %-30s '%s'"
for root, dirs, files in walk(craft_path):
# Loop over the files.
for file in files:
# The directory and relative and absolute paths.
dir = relpath(root, start=repo_path)
full_path = join(root, file)
rel_path = relpath(full_path, start=repo_path)
# Skip blacklist files or directories.
skip = False
if file == 'zip-excludes.lst':
if verbose:
print(print_format % ("Skipping the file:", join(dir, 'zip-excludes.lst')))
skip = True
if dir in blacklist:
if verbose:
print(print_format % ("Skipping the file:", join(dir, file)))
skip = True
for name in blacklist:
if fnmatch(rel_path, name):
if verbose:
print(print_format % ("Skipping the file:", rel_path))
skip = True
break
if skip:
continue
# Otherwise add the file.
zip_handle.write(rel_path)
# Clean up.
os.chdir(savedir)
zip_handle.close()
def fetch_zip_exclude_list(name, path, exclude_path):
"""Use Unix style path regular expression to find all files to exclude."""
# Init.
blacklist = []
file = open(exclude_path)
exclude_list = file.readlines()
file.close()
old_path = os.getcwd()
os.chdir(path)
# Process each exclusion path or regular expression, converting to Python RE objects.
reobj_list = []
for i in range(len(exclude_list)):
reobj_list.append(re.compile(translate(exclude_list[i].strip())))
# Recursively loop over all files, finding the ones to exclude.
for root, dirs, files in walk(path):
for file in files:
full_path = join(root, file)
rel_path = join(name, relpath(full_path, start=path))
# Skip Unix shell-style wildcard matches
for i in range(len(reobj_list)):
if reobj_list[i].match(rel_path):
blacklist.append(rel_path)
break
# Return to the original path.
os.chdir(old_path)
# Return the list.
return blacklist
def parse_config_file(parser=None, file_name=None):
"""Test and parse the catalog configuration file."""
# Check for the file.
if not access(file_name, F_OK):
print("CatalogError: The catalog configuration file '%s' cannot be found." % file_name)
sys.exit(1)
# Parse the XML and return the root node.
config = ET.parse(file_name, parser)
return config.getroot()
def parse_template_file(parser=None, file_name=None):
"""Test and parse the catalog configuration file."""
# Check for the file.
if not access(file_name, F_OK):
print("CatalogError: The catalog template file '%s' cannot be found." % file_name)
sys.exit(1)
# Parse the XML and return the template node.
template = ET.parse(file_name, parser)
template_root = template.getroot()
return template_root.find('template')

View File

@@ -11,12 +11,16 @@ aircraftTypeTags = [
"glider",
"groundvehicle",
"helicopter",
"interceptor",
"passenger",
"racer",
"spaceship",
"tanker",
"trainer",
"transport",
"ultralight",
"unpowered",
"uav",
"reconnaissance",
"seacraft",
"crop-duster",
@@ -26,8 +30,10 @@ aircraftTypeTags = [
manufacturerTags = [
"airbus",
"antonov",
"arado",
"atr",
"avro",
"bae",
"bell",
"bleriot",
"boeing",
@@ -53,6 +59,7 @@ manufacturerTags = [
"heinkel",
"ilyushin",
"junkers",
"kawasaki",
"lockheed",
"mc-donnell-douglas",
"messerschmitt",
@@ -64,6 +71,7 @@ manufacturerTags = [
"piper",
"republic",
"robin",
"rockwell",
"saab",
"short",
"sopwith",
@@ -73,6 +81,7 @@ manufacturerTags = [
"tupolev",
"vickers",
"vought",
"wright",
"yakovlev"
]
@@ -105,6 +114,7 @@ featureTags = [
"biplane",
"canard",
"castering-wheel",
"combat",
"delta",
"etops",
"experimental",
@@ -112,10 +122,14 @@ featureTags = [
"fixed-gear",
"floats",
"glass-cockpit",
"low-wing",
"mid-wing",
"high-wing",
"h-tail",
"hud",
"ifr",
"lifting-body",
"pressurised",
"prototype",
"refuel",
"retractable-gear",
@@ -123,15 +137,18 @@ featureTags = [
"skis",
"stol",
"supersonic",
"supercharger",
"t-tail",
"tail-dragger",
"tricycle",
"tail-hook",
"triplane",
"twin-boom",
"v-tail",
"variable-geometry",
"vtol",
"wing-fold"
"water-drop"
]
propulsionTags = [
@@ -147,6 +164,7 @@ propulsionTags = [
"supercharged",
"turboprop",
"twin-engine",
"four-engine",
"variable-pitch",
"fixed-pitch"
]

View File

@@ -3,9 +3,11 @@
<local-output>/home/fgaddon/output/Aircraft-trunk</local-output>
<download-url n="0">http://mirrors.ibiblio.org/flightgear/ftp/Aircraft-trunk/</download-url>
<download-url n="1">http://ukmirror.flightgear.org/fgaddon/Aircraft-trunk/</download-url>
<download-url n="2">https://cdn.merspieler.tk/fgaddon/Aircraft-trunk/</download-url>
<thumbnail-url n="0">http://mirrors.ibiblio.org/flightgear/ftp/Aircraft-trunk/thumbnails</thumbnail-url>
<thumbnail-url n="1">http://ukmirror.flightgear.org/fgaddon/Aircraft-trunk/thumbnails</thumbnail-url>
<thumbnail-url n="2">https://cdn.merspieler.tk/fgaddon/Aircraft-trunk/thumbnails</thumbnail-url>
<scm>
<type>svn</type>

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

@@ -1,5 +1,11 @@
*/.svn/*
*.xcf
*.blend
*.xcf*
*.XCF*
*.blend*
*.psd
*~
*/dev/*
*/Dev/*
*/development/*
*/src/*
*/Resources/*

View File

@@ -1,5 +1,11 @@
*/.svn/*
*.xcf
*.blend
*.xcf*
*.XCF*
*.blend*
*.psd
*~
*/dev/*
*/Dev/*
*/development/*
*/src/*
*/Resources/*

View File

@@ -119,7 +119,7 @@ class Node(object):
# value and type specification
try:
if self._value is not None:
if isinstance(self._value, basestring):
if isinstance(self._value, str):
# don't call str() on strings, breaks the
# encoding
n.text = self._value
@@ -133,9 +133,9 @@ class Node(object):
elif isinstance(self._value, bool):
n.set('type', "bool")
except UnicodeEncodeError:
print "Encoding error with", self._value, type(self._value)
print("Encoding error with %s %s" % (self._value, type(self._value)))
except:
print "Some other exceptiong in sgprops._createXMLElement()"
print("Unexpected exception in sgprops._createXMLElement():", sys.exc_info()[0])
# index in parent
if (self.index != 0):
@@ -194,7 +194,7 @@ class PropsHandler(handler.ContentHandler):
try:
index = int(attrs['n'])
except:
print "Invalid index at line:", self._locator.getLineNumber(), "of", self._path
print("Invalid index at line: %s of %s" % (self._locator.getLineNumber(), self._path))
raise IndexError("Invalid index at line:", self._locator.getLineNumber(), "of", self._path)
currentState.recordExplicitIndex(name, index)
@@ -251,7 +251,7 @@ class PropsHandler(handler.ContentHandler):
self._content = self._content[:-1]
self._current.value = float(self._content)
except:
print "Parse error for value:", self._content, "at line:", self._locator.getLineNumber(), "of:", self._path
print("Parse error for value: %s at line: %s of: %s" % (self._content, self._locator.getLineNumber(), self._path))
self._current = self._current.parent
self._content = None

View File

@@ -0,0 +1,6 @@
Configuration files for testing the catalog updating script on a single aircraft. This is useful for seeing what will be packed into the zip archive. To use these:
* Copy all *.xml and *.lst files into a local testing directory X.
* Modify the *.xml files:
* Replace all instances of '/data/fgaddon_catalog_p51d/' with the directory X.
* Update any other tags as necessary.

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Template catalog - copy and modify for your site as required-->
<PropertyList>
<local-output>/data/fgaddon-catalog_p51d/ftp</local-output>
<download-url n="0">/data/fgaddon-catalog_p51d/ftp/Aircraft/</download-url>
<scm>
<type>svn</type>
<update type="bool">false</update>
<path>/flightgear/flightgear-fgaddon/Aircraft</path>
<include>p51d</include>
</scm>
</PropertyList>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Template catalog - copy and modify for your site as required-->
<PropertyList>
<template>
<version n="0">HEAD</version>
<id>localhost</id>
<license>GPL</license>
<url>/data/fgaddon-catalog_p51d/ftp/Aircraft/catalog.xml</url>
<name>p51d FGAddon aircraft test</name>
<description>This is a test of the catalog updating script to allow aircraft authors to see what will be present in the zip archive of their aircraft.</description>
</template>
</PropertyList>

View File

@@ -0,0 +1,11 @@
*/.svn/*
*.xcf*
*.XCF*
*.blend*
*.psd
*~
*/dev/*
*/Dev/*
*/development/*
*/src/*
*/Resources/*

View File

@@ -4,9 +4,11 @@
<local-output>/home/fgaddon/output/Aircraft-2018</local-output>
<download-url n="0">http://mirrors.ibiblio.org/flightgear/ftp/Aircraft-2018/</download-url>
<download-url n="1">http://ukmirror.flightgear.org/fgaddon/Aircraft-2018/</download-url>
<download-url n="2">https://cdn.merspieler.tk/fgaddon/Aircraft-2018/</download-url>
<thumbnail-url n="0">http://mirrors.ibiblio.org/flightgear/ftp/Aircraft-2018/thumbnails</thumbnail-url>
<thumbnail-url n="1">http://ukmirror.flightgear.org/official/Aircraft-2018/thumbnails</thumbnail-url>
<thumbnail-url n="2">https://cdn.merspieler.tk/fgaddon/Aircraft-2018/thumbnails</thumbnail-url>
<!-- share zips with the trunk catalog where possible -->

View File

@@ -0,0 +1 @@
*.xcf*

View File

@@ -0,0 +1 @@
12

View File

View File

@@ -3,8 +3,13 @@
import unittest
import sgprops
import os
from os.path import join
import catalog
import xml.etree.cElementTree as ET
import lxml.etree as ET
from shutil import rmtree
from tempfile import mkdtemp
import zipfile
catalog.quiet = True
@@ -93,7 +98,7 @@ class UpdateCatalogTests(unittest.TestCase):
catalog_node = ET.Element('PropertyList')
catalog_root = ET.ElementTree(catalog_node)
pkgNode = catalog.make_aircraft_node('f16', pkg, variants, "http://foo.com/testOutput/")
pkgNode = catalog.make_aircraft_node('f16', pkg, variants, "http://foo.com/testOutput/", [])
catalog_node.append(pkgNode)
# write out so we can parse using sgprops
@@ -172,7 +177,7 @@ class UpdateCatalogTests(unittest.TestCase):
catalog_node = ET.Element('PropertyList')
catalog_root = ET.ElementTree(catalog_node)
pkgNode = catalog.make_aircraft_node('dc3', pkg, variants, "http://foo.com/testOutput/")
pkgNode = catalog.make_aircraft_node('dc3', pkg, variants, "http://foo.com/testOutput/", [])
catalog_node.append(pkgNode)
if not os.path.isdir("testOutput"):
@@ -210,7 +215,7 @@ class UpdateCatalogTests(unittest.TestCase):
catalog_node = ET.Element('PropertyList')
catalog_root = ET.ElementTree(catalog_node)
pkgNode = catalog.make_aircraft_node('c150', pkg, variants, "http://foo.com/testOutput/")
pkgNode = catalog.make_aircraft_node('c150', pkg, variants, "http://foo.com/testOutput/", [])
catalog_node.append(pkgNode)
if not os.path.isdir("testOutput2"):
@@ -234,5 +239,85 @@ class UpdateCatalogTests(unittest.TestCase):
self.assertFalse(parsedPkgNode.hasChild('minimum-fg-version'));
self.assertFalse(parsedPkgNode.hasChild('variant'));
class ZipTests(unittest.TestCase):
"""Specific craft zip file creation tests."""
def check_zip(self, file_name, expected_content=None):
"""General checks for the zip file."""
# Check for file existence.
self.assert_(os.access(file_name, os.F_OK))
# Check the contents.
file = zipfile.ZipFile(file_name)
zip_contents = file.namelist()
if len(zip_contents) != len(expected_content):
print("Zip contents:\n %s" % zip_contents)
print("Expected contents:\n %s" % expected_content)
self.assertEqual(len(zip_contents), len(expected_content))
for i in range(len(zip_contents)):
self.assertEqual(zip_contents[i], expected_content[i])
def setUp(self):
"""Common set up for these system tests."""
# Store the current directory.
self._cwd = os.getcwd()
# Create a temporary directory for dumping files.
self.tmpdir = mkdtemp()
def tearDown(self):
"""Delete temp files."""
# Force return to the correct directory.
os.chdir(self._cwd)
# Remove temporary file (if there is a deletion failure, continue to allow the test suite to survive).
try:
rmtree(self.tmpdir)
except:
pass
# Remove the variable.
del self.tmpdir
def test_zip_creation(self):
"""Test the creation of a basic craft zip archive."""
# Create a basic zip file.
name = "c172"
catalog.make_aircraft_zip(join(os.getcwd(), "testData/Aircraft"), name, join(self.tmpdir, name+'.zip'), join(os.getcwd(), 'fgaddon-catalog/zip-excludes.lst'), verbose=False)
# Checks.
self.check_zip(join(self.tmpdir, name+'.zip'), expected_content=['c172/c172-set.xml'])
def test_zip_exclusion_global(self):
"""Test file exclusion in a craft zip archive using the global catalog exclusion list."""
# Create a basic zip file.
name = "dc3"
catalog.make_aircraft_zip(join(os.getcwd(), "testData/Aircraft"), name, join(self.tmpdir, name+'.zip'), join(os.getcwd(), 'fgaddon-catalog/zip-excludes.lst'), verbose=False)
# Checks.
self.check_zip(join(self.tmpdir, name+'.zip'), expected_content=['dc3/dc3-set.xml'])
def test_zip_exclusion_local(self):
"""Test file exclusion in a craft zip archive using a local catalog exclusion list."""
# Create a basic zip file.
name = "c150"
catalog.make_aircraft_zip(join(os.getcwd(), "testData/Aircraft"), name, join(self.tmpdir, name+'.zip'), join(os.getcwd(), 'testData/Aircraft/c150/zip-excludes.lst'), verbose=False)
# Checks.
self.check_zip(join(self.tmpdir, name+'.zip'), expected_content=['c150/c150-set.xml', 'c150/Resources/crazy_20Gb_file'])
if __name__ == '__main__':
unittest.main()

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python
#! /usr/bin/env python3
import argparse
import datetime
@@ -13,9 +13,14 @@ import sgprops
import sys
import catalogTags
import catalog
from catalog import make_aircraft_node, make_aircraft_zip, parse_config_file, parse_template_file
CATALOG_VERSION = 4
# The Python version.
PY_VERSION = sys.version_info[0]
parser = argparse.ArgumentParser()
parser.add_argument("--update", help="Update/pull SCM source",
action="store_true")
@@ -43,6 +48,11 @@ def get_xml_text(e):
def last_change_date_svn(dir):
command = [ 'svn', 'info', dir ]
result = subprocess.check_output( command )
# Python 3 compatibility.
if PY_VERSION == 3:
result = result.decode('utf8')
match = re.search('Last Changed Date: (\d+)\-(\d+)\-(\d+)', result)
if match:
rev_str = match.group(1) + match.group(2) + match.group(3)
@@ -66,24 +76,9 @@ def scan_dir_for_change_date_mtime(path):
maxsec = mtime
return maxsec
def make_aircraft_zip(repo_path, name, zip_file):
if (not args.quiet):
print "Updating:", name + '.zip'
savedir = os.getcwd()
os.chdir(repo_path)
if os.path.exists(zip_file):
os.remove(zip_file)
command = ['zip', '-rq', '-9']
if os.path.exists(zip_excludes):
command += ['-x@' + zip_excludes]
else:
print "warning: no zip-excludes.lst file provided", zip_excludes
command += [zip_file, name]
subprocess.call(command)
os.chdir(savedir)
def get_md5sum(file):
f = open(file, 'r')
f = open(file, 'rb')
md5sum = hashlib.md5(f.read()).hexdigest()
f.close()
return md5sum
@@ -95,7 +90,7 @@ def copy_previews_for_variant(variant, package_name, package_dir, previews_dir):
for preview in variant['previews']:
preview_src = os.path.join(package_dir, preview['path'])
preview_dst = os.path.join(previews_dir, package_name + '_' + preview['path'])
#print preview_src, preview_dst, preview['path']
#print(preview_src, preview_dst, preview['path'])
dir = os.path.dirname(preview_dst)
if not os.path.isdir(dir):
os.makedirs(dir)
@@ -142,13 +137,13 @@ def process_aircraft_dir(name, repo_path):
(package, variants) = catalog.scan_aircraft_dir(aircraft_dir, includes)
if package == None:
if not args.quiet:
print "skipping:", name, "(no -set.xml files)"
print("skipping: %s (no -set.xml files)" % name)
return
if not args.quiet:
print "%s:" % name,
print("%s:" % name)
package_node = catalog.make_aircraft_node(name, package, variants, download_base, mirrors)
package_node = make_aircraft_node(name, package, variants, download_base, mirrors)
download_url = download_base + name + '.zip'
if 'thumbnail' in package:
@@ -167,8 +162,8 @@ def process_aircraft_dir(name, repo_path):
d = datetime.datetime.utcfromtimestamp(dir_mtime)
rev = d.strftime("%Y%m%d")
package_node.append( catalog.make_xml_leaf('revision', rev) )
#print "rev:", rev
#print "dir mtime:", dir_mtime
#print("rev: %s" % rev)
#print("dir mtime: %s" % dir_mtime)
zipfile = os.path.join( output_dir, name + '.zip' )
valid_zips.append(name + '.zip')
if not os.path.exists(zipfile) \
@@ -176,12 +171,12 @@ def process_aircraft_dir(name, repo_path):
or args.clean:
# rebuild zip file
if not args.quiet:
print "updating:", zipfile
make_aircraft_zip(repo_path, name, zipfile)
print("updating: %s" % zipfile)
make_aircraft_zip(repo_path, name, zipfile, zip_excludes, verbose=not args.quiet)
md5sum = get_md5sum(zipfile)
else:
if not args.quiet:
print "(no change)"
print("(no change)")
if md5sum == "":
md5sum = get_md5sum(zipfile)
filesize = os.path.getsize(zipfile)
@@ -202,7 +197,7 @@ def process_aircraft_dir(name, repo_path):
shared_md5 = get_xml_text(sharedNode)
if shared_md5 == md5sum:
if not args.quiet:
print "Sharing zip with share catalog for:",name
print("Sharing zip with share catalog for: %s" % name)
os.remove(zipfile)
os.symlink(os.path.join( share_output_dir, name + '.zip' ), zipfile)
@@ -223,19 +218,12 @@ def process_aircraft_dir(name, repo_path):
# return (md5, file_size)
if not os.path.isdir(args.dir):
print "A valid catalog directory must be provided"
print("A valid catalog directory must be provided")
exit(0)
parser = ET.XMLParser(remove_blank_text=True)
config_file = os.path.join(args.dir, 'catalog.config.xml')
config = ET.parse(config_file, parser)
config_node = config.getroot()
template_file = os.path.join(args.dir, 'template.xml')
template = ET.parse(template_file, parser)
template_root = template.getroot()
template_node = template_root.find('template')
config_node = parse_config_file(parser=parser, file_name=os.path.join(args.dir, 'catalog.config.xml'))
template_node = parse_template_file(parser=parser, file_name=os.path.join(args.dir, 'template.xml'))
md5sum_file = os.path.join(args.dir, 'md5sum.xml')
if os.path.exists(md5sum_file):
@@ -249,7 +237,7 @@ else:
share_output_dir = get_xml_text(config_node.find('share-output'))
share_md5_file = get_xml_text(config_node.find('share-md5-sums'))
if share_output_dir != '' and share_md5_file != '':
print 'Output shared with:', share_output_dir
print("Output shared with: %s" % share_output_dir)
share_md5sum_tree = ET.parse(share_md5_file, parser)
share_md5sum_root = share_md5sum_tree.getroot()
else:
@@ -291,31 +279,37 @@ zip_excludes = os.path.realpath(tmp)
for i in config_node.findall("include-dir"):
path = get_xml_text(i)
if not os.path.exists(path):
print "Skipping missing include path:", path
print("Skipping missing include path: %s" % path)
continue
includes.append(path)
# freshen repositories
if args.no_update:
print 'Skipping repository updates.'
print('Skipping repository updates.')
else:
cwd = os.getcwd()
for scm in scm_list:
# XML mandated skip, with command line override.
if not args.update:
skip = get_xml_text(scm.find('update'))
if skip == 'false':
continue
repo_type = get_xml_text(scm.find('type'))
repo_path = get_xml_text(scm.find('path'))
includes.append(repo_path)
if repo_type == 'svn':
print 'SVN update:', repo_path
print("SVN update: %s" % repo_path)
subprocess.call(['svn', 'update', repo_path])
elif repo_type == 'git':
print 'GIT pull:', repo_path
print("GIT pull: %s" % repo_path)
os.chdir(repo_path)
subprocess.call(['git','pull'])
elif repo_type == 'no-scm':
print "No update of unmannaged files:", repo_path
print("No update of unmannaged files: %s" % repo_path)
else:
print "Unknown scm type:", scm, repo_path
print("Unknown scm type: %s %s" % (scm, repo_path))
os.chdir(cwd)
# names of zip files we want (so we can identify/remove orphans)
@@ -337,16 +331,27 @@ for scm in scm_list:
skip_list = []
for s in skip_nodes:
skip_list.append(get_xml_text(s))
print 'skip list:', skip_list
# Selective list of craft to include, overriding the skip list.
include_nodes = scm.findall('include')
include_list = []
for node in include_nodes:
include_list.append(get_xml_text(node))
if len(include_list):
skip_list = []
print("Skip list: %s" % skip_list)
print("Include list: %s" % include_list)
names = os.listdir(repo_path)
for name in sorted(names, key=lambda s: s.lower()):
if name in skip_list:
if name in skip_list or (len(include_list) and name not in include_list):
if not args.quiet:
print "skipping:", name
print("Skipping: %s" % name)
continue
# process each aircraft in turn
# print name, repo_path
# print("%s %s" % (name, repo_path))
process_aircraft_dir(name, repo_path)
# write out the master catalog file
@@ -354,11 +359,11 @@ cat_file = os.path.join(output_dir, 'catalog.xml')
catalog_root.write(cat_file, encoding='utf-8', xml_declaration=True, pretty_print=True)
# write out the md5sum cache file
print md5sum_file
print(md5sum_file)
md5sum_tree.write(md5sum_file, encoding='utf-8', xml_declaration=True, pretty_print=True)
# look for orphaned zip files
files = os.listdir(output_dir)
for file in files:
if file.endswith('.zip')and not file in valid_zips:
print "orphaned zip:", file
print("orphaned zip: %s" % file)

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,6 +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 " --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."
}
#######################################################
@@ -372,11 +492,12 @@ set -e
CBD="$PWD"
LOGFILE="$CBD/compilation_log.txt"
INTERACTIVE_MODE=1
# Available values for WHATTOBUILD and WHATTOBUILDALL:
declare -a WHATTOBUILD_AVAIL=(
'CMAKE' 'PLIB' 'OPENRTI' 'OSG' 'SIMGEAR' 'FGFS' 'DATA' 'FGRUN' 'FGO' 'FGX'
'OPENRADAR' 'ATCPIE' 'TERRAGEAR' 'TERRAGEARGUI'
'OPENRADAR' 'ATCPIE' 'TERRAGEAR' 'TERRAGEARGUI' 'ZLIB'
)
WHATTOBUILDALL=(SIMGEAR FGFS DATA)
@@ -391,6 +512,11 @@ IGNORE_INTERCOMPONENT_DEPS="n"
SUDO="sudo"
PKG_MGR="apt-get"
if [[ `uname` == 'OpenBSD' ]]; then
APT_GET_UPDATE="n"
DOWNLOAD_PACKAGES="n"
fi
# How to download Git repositories:
#
# - 'https' used to be fine, but is currently unreliable at SourceForge (esp.
@@ -430,8 +556,10 @@ declare -A USERNAME_AT_SITE
declare -A REPO_ADDRESS
declare -A REPO_SITE
REPO_ADDRESS[CMAKE]="cmake.org/cmake.git"
REPO_SITE[CMAKE]="cmake.org"
REPO_ADDRESS[CMAKE]="gitlab.kitware.com/cmake/cmake.git"
REPO_SITE[CMAKE]="gitlab.kitware.com"
REPO_ADDRESS[ZLIB]="github.com/madler/zlib.git"
REPO_SITE[ZLIB]="GitHub"
REPO_ADDRESS[PLIB]="git.code.sf.net/p/libplib/code"
REPO_SITE[PLIB]="SourceForge"
REPO_ADDRESS[OPENRTI]="git.code.sf.net/p/openrti/OpenRTI"
@@ -442,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"
@@ -457,9 +588,14 @@ REPO_SITE[TERRAGEARGUI]="SourceForge"
# getopt is from the util-linux package (in Debian). Contrary to bash's getopts
# built-in function, it allows one to define long options.
TEMP=$(getopt -o '+shc:p:a:d:r:j:O:ib:' \
getopt=getopt
if [[ `uname` == 'OpenBSD' ]]; then
getopt=gnugetopt
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,version \
--longoptions package-manager:,sudo:,ignore-intercomponent-deps,compositor \
--longoptions non-interactive,version \
-n "$PROGNAME" -- "$@")
case $? in
@@ -536,6 +672,8 @@ while true; do
-O) OOPTION=" -O$2"; shift 2 ;;
-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 ;;
@@ -615,6 +753,7 @@ _log "OOPTION=$OOPTION"
_log "BUILD_TYPE=$BUILD_TYPE"
_log "SG_CMAKEARGS=$SG_CMAKEARGS"
_log "FG_CMAKEARGS=$FG_CMAKEARGS"
_log "COMPOSITOR=$COMPOSITOR"
_log "DIRECTORY=$CBD"
if [ "$STABLE" = "STABLE" ]; then
@@ -677,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
@@ -801,7 +940,7 @@ if _elementIn "CMAKE" "${WHATTOBUILD[@]}"; then
mkdir -p "cmake"
cd "$CBD"/cmake
_gitDownload CMAKE
_gitUpdate master
_gitUpdate release
if [ "$RECONFIGURE" = "y" ]; then
cd "$CBD"
@@ -822,6 +961,35 @@ else
fi
fi
#######################################################
# ZLIB
#######################################################
ZLIB_INSTALL_DIR=zlib
INSTALL_DIR_ZLIB="$INSTALL_DIR/$ZLIB_INSTALL_DIR"
cd "$CBD"
if _elementIn "ZLIB" "${WHATTOBUILD[@]}"; then
_printLog "****************************************"
_printLog "**************** ZLIB ******************"
_printLog "****************************************"
mkdir -p "zlib"
cd "$CBD"/zlib
_gitDownload ZLIB
_gitUpdate master
if [ "$RECONFIGURE" = "y" ]; then
cd "$CBD"
mkdir -p build/zlib
_log "CONFIGURING zlib"
cd "$CBD"/build/zlib
"$CMAKE" -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_DIR_ZLIB" \
../../zlib 2>&1 | _logOutput
fi
_make zlib
fi
#######################################################
# PLIB
#######################################################
@@ -948,9 +1116,14 @@ if _elementIn "SIMGEAR" "${WHATTOBUILD[@]}"; then
mkdir -p build/simgear
cd "$CBD"/build/simgear
rm -f CMakeCache.txt
extra=''
if [[ `uname` == 'OpenBSD' ]]; then
extra=-DZLIB_ROOT=$INSTALL_DIR_ZLIB
fi
"$CMAKE" -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_DIR_SIMGEAR" \
-DCMAKE_PREFIX_PATH="$INSTALL_DIR_OSG;$INSTALL_DIR_OPENRTI" \
$extra \
$SG_CMAKEARGS \
../../simgear 2>&1 | _logOutput
fi
@@ -994,36 +1167,63 @@ if _elementIn "FGFS" "${WHATTOBUILD[@]}" || \
mkdir -p build/flightgear
cd "$CBD"/build/flightgear
rm -f CMakeCache.txt
extra=
if [[ `uname` == 'OpenBSD' ]]; then
extra="-DZLIB_ROOT=$INSTALL_DIR_ZLIB \
-DENABLE_QT=OFF \
-DENABLE_FGCOM=OFF \
-DVERBOSE=1"
fi
"$CMAKE" -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
$COMPOSITOR \
-DENABLE_FLITE=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_DIR_FGFS" \
-DCMAKE_PREFIX_PATH="$INSTALL_DIR_SIMGEAR;$INSTALL_DIR_OSG;$INSTALL_DIR_OPENRTI;$INSTALL_DIR_PLIB" \
-DFG_DATA_DIR:PATH="$INSTALL_DIR_FGFS/fgdata" \
-DTRANSLATIONS_SRC_DIR:PATH="$INSTALL_DIR_FGFS/fgdata/Translations" \
$extra \
$FG_CMAKEARGS \
../../flightgear 2>&1 | _logOutput
fi
_make flightgear
if [[ `uname` == 'OpenBSD' ]]; then
# _make will end up running fgrcc, which was built with our zlib, so we
# need to set LD_LIBRARY_PATH, otherwise things will fail because the
# system zlib is too old.
LD_LIBRARY_PATH=$INSTALL_DIR_ZLIB/lib _make flightgear
else
_make flightgear
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"
common="${common}cd '$SUB_INSTALL_DIR/$FGFS_INSTALL_DIR/bin'\n"
if [[ `uname` == 'OpenBSD' ]]; then
# Force use of our zlib.
paths="$paths:../../$ZLIB_INSTALL_DIR/lib"
# OpenBSD's base gdb is too old; `pkg_add egdb` gives one that we can use.
gdb="egdb"
common="${common}ulimit -d 4194304\n"
fi
common="${common}export LD_LIBRARY_PATH='$paths'\"\${LD_LIBRARY_PATH:+:}\${LD_LIBRARY_PATH}\"\n"
SCRIPT=run_fgfs.sh
echo "#!/bin/sh" > $SCRIPT
echo "cd \"\$(dirname \"\$0\")\"" >> $SCRIPT
echo "cd '$SUB_INSTALL_DIR/$FGFS_INSTALL_DIR/bin'" >> $SCRIPT
echo "export LD_LIBRARY_PATH='../../$SIMGEAR_INSTALL_DIR/lib:../../$OSG_INSTALL_DIR/lib:../../$OPENRTI_INSTALL_DIR/lib:../../$PLIB_INSTALL_DIR/lib'\"\${LD_LIBRARY_PATH:+:}\${LD_LIBRARY_PATH}\"" \
>> $SCRIPT
echo -en "$common" > $SCRIPT
echo "./fgfs --fg-root=\"\$PWD/../fgdata\" \"\$@\"" >> $SCRIPT
chmod 755 $SCRIPT
SCRIPT=run_fgfs_debug.sh
echo "#!/bin/sh" > $SCRIPT
echo "cd \"\$(dirname \"\$0\")\"" >> $SCRIPT
echo "cd '$SUB_INSTALL_DIR/$FGFS_INSTALL_DIR/bin'" >> $SCRIPT
echo "export LD_LIBRARY_PATH='../../$SIMGEAR_INSTALL_DIR/lib:../../$OSG_INSTALL_DIR/lib:../../$OPENRTI_INSTALL_DIR/lib:../../$PLIB_INSTALL_DIR/lib'\"\${LD_LIBRARY_PATH:+:}\${LD_LIBRARY_PATH}\"" \
>> $SCRIPT
echo "gdb --directory='$CBD/flightgear/src' --args ./fgfs --fg-root=\"\$PWD/../fgdata\" \"\$@\"" >> $SCRIPT
echo -en "$common" > $SCRIPT
echo "$gdb --directory='$CBD/flightgear/src' --args ./fgfs --fg-root=\"\$PWD/../fgdata\" \"\$@\"" >> $SCRIPT
chmod 755 $SCRIPT
# Useful for debugging library problems.

View File

@@ -1,41 +1,40 @@
## fg-from-scratch
Windows utility to download, compile, and stage TerraGear and its dependencies
Copyright (C) 2018 Scott Giese (xDraconian) scttgs0@gmail.com
Copyright (C) 2018-2019 Scott Giese (xDraconian) scttgs0@gmail.com
### Purpose:
Simplify the process of producing a working version of the TerraGear tools for Windows users.
Simplify the process of producing a working version of the OSG, SimGear, FlightGear, and TerraGear for Windows users.
If you find this script useful, or not useful, please share your experience with me via a brief email.
### Approach:
Rather than leveraging the popular Win.3rdParty download, this script compiles all dependencies
on your hardware. This eliminates many of the problems associated with mixed compilation in which
your compiled binary become in conflict with 3rd-party binaries.
your compiled binary comes into conflict with 3rd-party binaries.
vcpkg is leveraged to download and compile all the dependencies required by TerraGear.
This script could be expanded to include compiling FlightGear and/or any of the other FlightGear
submodules (FGCom, Atlas, OpenRadar, etc.)
vcpkg is leveraged to download and compile all the dependencies required.
### Supported Platform:
Windows 10
### Prerequisites:
Visual Studio Community 2017
Visual Studio Community 2017 +
https://www.visualstudio.com/downloads/
Include the C++ package which includes the MSVC 19.14 compiler
CMake 3.11.3
CMake 3.11.3 +
https://cmake.org/download/
The script assumes the installation folder is c:\Program Files\.
Qt 5.10.1
Qt 5.10.1 +
https://www.qt.io/download/
The script assumes the installation folder is C:\Qt\.
Git 2.17.1
Git 2.17.1 +
https://git-scm.com/download/win/
The script assumes the installation folder is reflected on your PATH.
Author's configuration: Visual Studio Community 2019, CMake 3.15.3, Qt 5.13.1, Git 2.18.0
### Recommended:
Before running the script for the first time, set this environment variable:
@@ -47,23 +46,29 @@ You can execute the above command via a Command Terminal or via Powershell Admin
### Usage:
The script is intended to be run multiple times. During the first execution, all the packages are downloaded and compiled. Any time the script is executed afterward, the packages will update themselves.
<i>Note: Because failures can sometimes occur, the script will download packages after the first execution. Once you confirm that all packages have successfully been downloaded, you can optimize the script by adding <b>REM</b> at the beginning of the line. Refer to the comments within the script.</i>
<i>Note: Because failures can occur, the script will continue to download packages even after the first execution.</i>
Run the command script interactively. No log is produced.
fg-from-scratch.cmd
Runs the command script and routes STDOUT and STDERR to a log file. **The prompts have been removed, so it is no longer necessary to monitor the log while it is running.**
Run the command script and routes STDOUT and STDERR to a log file.
fg-from-scratch.cmd > scratch.log 2>&1
**Fix for the "White Text" issue** - pass either -wt or - -whitetext as an argument:
fg-from-scratch.cmd -wt > scratch.log 2>&1
The above command will force the usage of James' customized OSG source repo to leverage his workaround.
Options for monitoring the log file while the script is running:
Start the script and then
- Load the log file into Notepad++ (https://notepad-plus-plus.org/).
- Turn on feature "Monitor" via Notepad++
- **[Preferred]** Load the log file into WinTail (http://www.baremetalsoft.com/wintail/)
### Example Project
### TerraGear Example Project
Refer to CustomSceneryProjects/Test folder for an example of scenery generation.
generate.cmd > generate.log 2>&1

View File

@@ -1,4 +1,4 @@
@ECHO OFF
@echo OFF
REM fg-from-scratch - Windows utility to download, compile, and stage TerraGear and its dependencies
REM Copyright (C) 2018 Scott Giese (xDraconian) scttgs0@gmail.com
@@ -17,201 +17,382 @@ REM You should have received a copy of the GNU General Public License
REM along with this program; if not, write to the Free Software
REM Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
SET ROOT_DIR=%CD%
SET PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/bin;%PATH%
SET CMAKE_TOOLCHAIN="Visual Studio 15 2017 Win64"
SET QT5x64=C:/Qt/5.10.1/msvc2017_64
REM Defaults
set ROOT_DIR=%CD%
set WHITE_TEXT_FIX=0
set OSG_SOURCE_PATH=scratch-source/openscenegraph-3.6-git
set OSG_BUILD_PATH=scratch-build/openscenegraph-3.6
set WT_GDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include
set WT_GDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib
set WT_GDAL_LIBRARY_DEBUG=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/gdald.lib
IF NOT EXIST vcpkg-git/NUL (
REM Process arguments
:parse
if "%~1"=="" goto endparse
if "%~1"=="-wt" (
set WHITE_TEXT_FIX=1
set OSG_SOURCE_PATH=scratch-source/openscenegraph-fix-git
set OSG_BUILD_PATH=scratch-build/openscenegraph-fix
set WT_GDAL_INCLUDE_DIR=
set WT_GDAL_LIBRARY=
set WT_GDAL_LIBRARY_DEBUG=
)
if "%~1"=="--whitetext" (
set WHITE_TEXT_FIX=1
set OSG_SOURCE_PATH=scratch-source/openscenegraph-fix-git
set OSG_BUILD_PATH=scratch-build/openscenegraph-fix
set WT_GDAL_INCLUDE_DIR=
set WT_GDAL_LIBRARY=
set WT_GDAL_LIBRARY_DEBUG=
)
SHIFT
goto parse
:endparse
echo White Text Fix: %WHITE_TEXT_FIX%
echo %OSG_SOURCE_PATH%
echo %OSG_BUILD_PATH%
set PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/bin;%ROOT_DIR%/vcpkg-git/installed/x64-windows/include;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%PATH%
REM Determine location of Qt5
set QT_SELECT=qt5
for /f %%i in ('"qtpaths.exe --install-prefix"') do set QT5x64=%%i
set QT5x64_LIB=%QT5x64%/lib
set QT5x64_CMAKE=%QT5x64_LIB%/cmake
echo QT Folder: %QT5x64%
REM Determine CMake toolchain
set CMAKE_TOOLCHAIN=Visual Studio 14 2015 Win64
for /f %%v in ('"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere" -latest -property catalog_productlineversion') do set VSx64=%%v
if %VSx64%==2019 (set CMAKE_TOOLCHAIN="Visual Studio 16 2019")
if %VSx64%==2017 (set CMAKE_TOOLCHAIN="Visual Studio 15 2017 Win64")
if %VSx64%==2015 (set CMAKE_TOOLCHAIN="Visual Studio 14 2015 Win64")
echo CMake Toolchain: %CMAKE_TOOLCHAIN%
if not exist vcpkg-git/NUL (
echo Preparing to install external libraries via vcpkg . . .
git clone https://github.com/Microsoft/vcpkg.git vcpkg-git
echo Compiling vcpkg
cd vcpkg-git
call ./bootstrap-vcpkg
call .\bootstrap-vcpkg
echo Compiling external libraries . . .
vcpkg install --triplet x64-windows boost cgal curl freeglut freetype gdal glew jasper libxml2 openal-soft openjpeg openssl plib sdl2 tiff zlib
) ELSE (
vcpkg install --triplet x64-windows boost cgal curl freeglut freetype gdal glew jasper libpng libxml2 mpfr openal-soft openjpeg openssl plib sdl2 tiff zlib
) else (
echo Updating vcpkg . . .
cd vcpkg-git
git pull
REM for /f "delims=" %%G in ('"git pull"') do if not %%G == "Already up to date." (
echo Compiling vcpkg
call .\bootstrap-vcpkg
REM break
REM )
echo Updating external libraries . . .
vcpkg update
vcpkg upgrade --triplet x64-windows --no-dry-run
REM Okay to comment out this line once all the packages have been confirmed to have been installed
vcpkg install --triplet x64-windows boost cgal curl freeglut freetype gdal glew jasper libxml2 openal-soft openjpeg openssl plib sdl2 tiff zlib
echo Compiling external libraries . . .
vcpkg install --triplet x64-windows boost cgal curl freeglut freetype gdal glew jasper libxml2 libpng mpfr openal-soft openjpeg openssl plib sdl2 tiff zlib
)
cd %ROOT_DIR%
IF NOT EXIST openscenegraph-3.4-build/NUL (
mkdir openscenegraph-3.4-build
if not exist scratch-source/NUL (
mkdir scratch-source
)
IF NOT EXIST openscenegraph-3.4-git/NUL (
echo Downloading OpenSceneGraph . . .
git clone -b OpenSceneGraph-3.4 https://github.com/openscenegraph/OpenSceneGraph.git openscenegraph-3.4-git
) ELSE (
echo Updating OpenSceneGraph . . .
cd openscenegraph-3.4-git
git pull
if not exist scratch-build/NUL (
mkdir scratch-build
)
if not exist scratch-install/NUL (
mkdir scratch-install
)
if %WHITE_TEXT_FIX%==1 (
if not exist scratch-build/openscenegraph-fix/NUL (
mkdir scratch-build\openscenegraph-fix
)
if not exist scratch-source/openscenegraph-fix-git/NUL (
echo Downloading OpenSceneGraph . . .
git clone -b fgfs-342-1 https://github.com/zakalawe/osg.git scratch-source/openscenegraph-fix-git
) else (
echo Updating OpenSceneGraph . . .
cd scratch-source/openscenegraph-fix-git
git pull
)
) else (
if not exist scratch-build/openscenegraph-3.6/NUL (
mkdir scratch-build\openscenegraph-3.6
)
if not exist scratch-source/openscenegraph-3.6-git/NUL (
echo Downloading OpenSceneGraph . . .
git clone -b OpenSceneGraph-3.6 https://github.com/openscenegraph/OpenSceneGraph.git scratch-source/openscenegraph-3.6-git
) else (
echo Updating OpenSceneGraph . . .
cd scratch-source/openscenegraph-3.6-git
git pull
)
)
cd %ROOT_DIR%
IF NOT EXIST simgear-build/NUL (
mkdir simgear-build
if not exist scratch-build/simgear/NUL (
mkdir scratch-build\simgear
)
IF NOT EXIST simgear-git/NUL (
if not exist scratch-source/simgear-git/NUL (
echo Downloading SimGear . . .
git clone -b next https://git.code.sf.net/p/flightgear/simgear simgear-git
) ELSE (
git clone -b next https://git.code.sf.net/p/flightgear/simgear scratch-source/simgear-git
) else (
echo Updating SimGear . . .
cd simgear-git
cd scratch-source/simgear-git
git pull
)
cd %ROOT_DIR%
IF NOT EXIST flightgear-build/NUL (
mkdir flightgear-build
if not exist scratch-build/flightgear/NUL (
mkdir scratch-build\flightgear
)
IF NOT EXIST flightgear-git/NUL (
if not exist scratch-source/flightgear-git/NUL (
echo Downloading FlightGear . . .
git clone -b next https://git.code.sf.net/p/flightgear/flightgear flightgear-git
) ELSE (
git clone -b next https://git.code.sf.net/p/flightgear/flightgear scratch-source/flightgear-git
) else (
echo Updating FlightGear . . .
cd flightgear-git
cd scratch-source/flightgear-git
git pull
)
cd %ROOT_DIR%
IF NOT EXIST terragear-build/NUL (
mkdir terragear-build
if not exist scratch-build/terragear/NUL (
mkdir scratch-build\terragear
)
IF NOT EXIST terragear-git/NUL (
if not exist scratch-source/terragear-git/NUL (
echo Downloading TerraGear . . .
git clone -b next https://git.code.sf.net/p/flightgear/terragear terragear-git
) ELSE (
git clone -b next https://git.code.sf.net/p/flightgear/terragear scratch-source/terragear-git
) else (
echo Updating TerraGear . . .
cd terragear-git
cd scratch-source/terragear-git
git pull
)
cd %ROOT_DIR%
ECHO Compiling OpenSceneGraph . . .
cd openscenegraph-3.4-build
cmake ..\openscenegraph-3.4-git -G %CMAKE_TOOLCHAIN% ^
REM -DQt5Core_DIR=%QT5x64_CMAKE%/Qt5Core ^
REM -DQt5Gui_DIR=%QT5x64_CMAKE%/Qt5Gui ^
REM -DQt5OpenGL_DIR=%QT5x64_CMAKE%/Qt5OpenGL ^
REM -DQt5Widgets_DIR=%QT5x64_CMAKE%/Qt5Widgets ^
echo Compiling OpenSceneGraph . . .
cd %OSG_BUILD_PATH%
cmake ..\..\%OSG_SOURCE_PATH% -G %CMAKE_TOOLCHAIN% ^
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug;Release ^
-DCMAKE_BUILD_TYPE:STRING=Release ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/scratch-install ^
-DCMAKE_PREFIX_PATH:STRING=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib ^
-DACTUAL_3RDPARTY_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
-DOSG_USE_UTF8_FILENAME:BOOL=1 ^
-DWIN32_USE_MP:BOOL=1 ^
-DCURL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCURL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libcurl.lib ^
-DFREETYPE_INCLUDE_DIR_ft2build=%ROOT_DIR%/vcpkg-git/packages/freetype_x64-windows/include ^
-DFREETYPE_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DFREETPE_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freetype.lib ^
-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DGLUT_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGLUT_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freeglut.lib ^
-DJPEG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DJPEG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/jpeg.lib ^
-DLIBXML2_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DLIBXML2_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libxml2.lib ^
-DPNG_PNG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DPNG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libpng16.lib ^
-DSDL2_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DSDL2_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/SDL2.lib ^
-DSDL2MAIN_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/manual-link/SDL2main.lib ^
-DTIFF_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DTIFF_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/tiff.lib ^
-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
-DCURL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCURL_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libcurl.lib ^
-DCURL_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/libcurl.lib ^
-DFREETYPE_INCLUDE_DIR_ft2build:PATH=%ROOT_DIR%/vcpkg-git/packages/freetype_x64-windows/include ^
-DFREETYPE_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freetype.lib ^
-DFREETYPE_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/freetyped.lib ^
-DGDAL_INCLUDE_DIR:PATH=%WT_GDAL_INCLUDE_DIR% ^
-DGDAL_LIBRARY:FILEPATH=%WT_GDAL_LIBRARY% ^
-DGDAL_LIBRARY_DEBUG:FILEPATH=%WT_GDAL_LIBRARY_DEBUG% ^
-DGLUT_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGLUT_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freeglut.lib ^
-DGLUT_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/freeglut.lib ^
-DJPEG_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DJPEG_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/jpeg.lib ^
-DJPEG_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/jpeg.lib ^
-DLIBXML2_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DLIBXML2_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libxml2.lib ^
-DLIBXML2_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/libxml2.lib ^
-DPNG_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DPNG_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libpng16.lib ^
-DPNG_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/libpng16d.lib ^
-DSDL2_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DSDL2_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/SDL2.lib ^
-DSDL2MAIN_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/manual-link/SDL2main.lib ^
-DTIFF_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DTIFF_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/tiff.lib ^
-DTIFF_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/tiffd.lib ^
-DZLIB_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib ^
-DZLIB_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/zlibd.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%
ECHO Compiling SimGear . . .
cd simgear-build
cmake ..\simgear-git -G %CMAKE_TOOLCHAIN% ^
-DCMAKE_BUILD_TYPE=Release ^
-DMSVC_3RDPARTY_ROOT=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCMAKE_PREFIX_PATH:PATH=%ROOT_DIR%/Stage/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
echo Compiling SimGear . . .
cd scratch-build\simgear
cmake ..\..\scratch-source\simgear-git -G %CMAKE_TOOLCHAIN% ^
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug;Release ^
-DCMAKE_BUILD_TYPE:STRING=Release ^
-DMSVC_3RDPARTY_ROOT:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCMAKE_PREFIX_PATH:STRING=%ROOT_DIR%/scratch-install/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
-DCMAKE_INCLUDE_PATH:STRING=%ROOT_DIR%/scratch-install/include;%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/scratch-install ^
-DOSG_FSTREAM_EXPORT_FIXED:BOOL=1 ^
-DENABLE_GDAL:BOOL=1 ^
-DENABLE_OPENMP:BOOL=1 ^
-DUSE_AEONWAVE:BOOL=0 ^
-DBOOST_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DBOOST_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCURL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCURL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libcurl.lib ^
-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DOPENAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DOPENAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/OpenAL32.lib ^
-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
-DBoost_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DBoost_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCURL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCURL_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/libcurl.lib ^
-DCURL_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libcurl.lib ^
-DGDAL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DOPENAL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DOPENAL_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/OpenAL32.lib ^
-DOPENTHREADS_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOPENTHREADS_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/OpenThreads.lib ^
-DOPENTHREADS_LIBRARY_DEBUG:FILEPATH= ^
-DOSGDB_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGDB_LIBRARY_DEBUG:FILEPATH= ^
-DOSGDB_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgDB.lib ^
-DOSGGA_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGGA_LIBRARY_DEBUG:FILEPATH= ^
-DOSGGA_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgGA.lib ^
-DOSGPARTICLE_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGPARTICLE_LIBRARY_DEBUG:FILEPATH= ^
-DOSGPARTICLE_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgParticle.lib ^
-DOSGSIM_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGSIM_LIBRARY_DEBUG:FILEPATH= ^
-DOSGSIM_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgSim.lib ^
-DOSGTEXT_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGTEXT_LIBRARY_DEBUG:FILEPATH= ^
-DOSGTEXT_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgText.lib ^
-DOSGUTIL_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGUTIL_LIBRARY_DEBUG:FILEPATH= ^
-DOSGUTIL_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgUtil.lib ^
-DOSGVIEWER_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGVIEWER_LIBRARY_DEBUG:FILEPATH= ^
-DOSGVIEWER_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgViewer.lib ^
-DOSG_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSG_LIBRARY_DEBUG:FILEPATH= ^
-DOSG_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osg.lib ^
-DZLIB_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/zlibd.lib ^
-DZLIB_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%
ECHO Compiling FlightGear . . .
cd flightgear-build
cmake ..\flightgear-git -G %CMAKE_TOOLCHAIN% ^
-DMSVC_3RDPARTY_ROOT=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCMAKE_PREFIX_PATH:PATH=%ROOT_DIR%/Stage/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%QT5x64% ^
-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
REM -DENABLE_GDAL:BOOL=1 ^
REM -DENABLE_OPENMP:BOOL=1 ^
REM -DUSE_AEONWAVE:BOOL=0 ^
echo Compiling FlightGear . . .
cd scratch-build\flightgear
cmake ..\..\scratch-source\flightgear-git -G %CMAKE_TOOLCHAIN% ^
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug;Release ^
-DCMAKE_BUILD_TYPE:STRING=Release ^
-DMSVC_3RDPARTY_ROOT:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DCMAKE_PREFIX_PATH:STRING=%ROOT_DIR%/scratch-install/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%QT5x64_LIB% ^
-DCMAKE_INCLUDE_PATH:STRING=%ROOT_DIR%/scratch-install/include;%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/scratch-install ^
-DSimGear_DIR:PATH=%ROOT_DIR%/scratch-install/lib/cmake/SimGear ^
-DOSG_FSTREAM_EXPORT_FIXED:BOOL=1 ^
-DENABLE_GDAL:BOOL=1 ^
-DENABLE_OPENMP:BOOL=1 ^
-DENABLE_JSBSIM:BOOL=1 ^
-DENABLE_GPSSMOOTH:BOOL=1 ^
-DENABLE_FGVIEWER:BOOL=1 ^
-DENABLE_FGVIEWER:BOOL=0 ^
-DENABLE_FGELEV:BOOL=0 ^
-DENABLE_STGMERGE:BOOL=0 ^
-DWITH_FGPANEL:BOOL=0 ^
-DUSE_AEONWAVE:BOOL=0 ^
-DHAVE_CONFIG_H:BOOL=0 ^
-DFREETYPE_INCLUDE_DIR_ft2build=%ROOT_DIR%/vcpkg-git/packages/freetype_x64-windows/include ^
-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DOPENAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DOPENAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/OpenAL32.lib ^
-DPLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DPNG_PNG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DPNG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libpng16.lib ^
-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
-DBoost_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DBoost_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
-DFREETYPE_INCLUDE_DIR_ft2build:PATH=%ROOT_DIR%/vcpkg-git/packages/freetype_x64-windows/include ^
-DFREETYPE_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freetype.lib ^
-DFREETYPE_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/freetyped.lib ^
-DGDAL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DOPENAL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DOPENAL_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/OpenAL32.lib ^
-DOPENTHREADS_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOPENTHREADS_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/OpenThreads.lib ^
-DOPENTHREADS_LIBRARY_DEBUG:FILEPATH= ^
-DOSGDB_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGDB_LIBRARY_DEBUG:FILEPATH= ^
-DOSGDB_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgDB.lib ^
-DOSGFX_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGFX_LIBRARY_DEBUG:FILEPATH= ^
-DOSGFX_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgFX.lib ^
-DOSGGA_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGGA_LIBRARY_DEBUG:FILEPATH= ^
-DOSGGA_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgGA.lib ^
-DOSGPARTICLE_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGPARTICLE_LIBRARY_DEBUG:FILEPATH= ^
-DOSGPARTICLE_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgParticle.lib ^
-DOSGSIM_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGSIM_LIBRARY_DEBUG:FILEPATH= ^
-DOSGSIM_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgSim.lib ^
-DOSGTEXT_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGTEXT_LIBRARY_DEBUG:FILEPATH= ^
-DOSGTEXT_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgText.lib ^
-DOSGUTIL_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGUTIL_LIBRARY_DEBUG:FILEPATH= ^
-DOSGUTIL_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgUtil.lib ^
-DOSGVIEWER_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSGVIEWER_LIBRARY_DEBUG:FILEPATH= ^
-DOSGVIEWER_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osgViewer.lib ^
-DOSG_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DOSG_LIBRARY_DEBUG:FILEPATH= ^
-DOSG_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/scratch-install/lib/osg.lib ^
-DPLIB_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DPLIB_FNT_LIBRARY_DEBUG:FILEPATH= ^
-DPLIB_FNT_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/plib_fnt.lib ^
-DPLIB_PUAUX_LIBRARY_DEBUG:FILEPATH= ^
-DPLIB_PUAUX_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/plib_puAux.lib ^
-DPLIB_PUI_LIBRARY_DEBUG:FILEPATH= ^
-DPLIB_PUI_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/plib_pui.lib ^
-DPLIB_SG_LIBRARY_DEBUG:FILEPATH= ^
-DPLIB_SG_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/plib_sg.lib ^
-DPLIB_UL_LIBRARY_DEBUG:FILEPATH= ^
-DPLIB_UL_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/plib_ul.lib ^
-DPNG_PNG_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DPNG_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libpng16.lib ^
-DZLIB_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/zlibd.lib ^
-DZLIB_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%
ECHO Compiling TerraGear . . .
cd terragear-build
cmake ..\terragear-git -G %CMAKE_TOOLCHAIN% ^
-DCMAKE_PREFIX_PATH:PATH=%ROOT_DIR%/Stage/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%QT5x64% ^
-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
-DMSVC-3RDPARTY_ROOT= ^
-DBoost_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DBoost_LIBRARY_DIR_DEBUG=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib ^
-DBoost_LIBRARY_DIR_RELEASE=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
-DCGAL_DIR=%ROOT_DIR%/vcpkg-git/buildtrees/cgal/x64-windows-rel ^
-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DJPEG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DJPEG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/jpeg.lib ^
-DTIFF_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DTIFF_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/tiff.lib ^
-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib ^
-DSIMGEAR_INCLUDE_DIR=%ROOT_DIR%/Stage/include ^
-DSIMGEAR_CORE_LIBRARY=%ROOT_DIR%/Stage/lib/SimGearCore.lib ^
-DSIMGEAR_SCENE_LIBRARY=%ROOT_DIR%/Stage/lib/SimGearScene.lib
echo Compiling TerraGear . . .
cd scratch-build\terragear
cmake ..\..\scratch-source\terragear-git -G %CMAKE_TOOLCHAIN% ^
-DCMAKE_CONFIGURATION_TYPES:STRING=Debug;Release ^
-DCMAKE_BUILD_TYPE:STRING=Release ^
-DCMAKE_PREFIX_PATH:STRING=%ROOT_DIR%/scratch-install/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%QT5x64_LIB% ^
-DCMAKE_INCLUDE_PATH:STRING=%ROOT_DIR%/scratch-install/include;%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/scratch-install ^
-DMSVC_3RDPARTY_ROOT:PATH= ^
-DBoost_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DBoost_LIBRARY_DIR_RELEASE:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
-DCGAL_DIR:PATH=%ROOT_DIR%/vcpkg-git/buildtrees/cgal/x64-windows-rel ^
-DGDAL_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGDAL_LIBRARY:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
-DGMP_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DGMP_LIBRARIES_DIR:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
-DJPEG_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DJPEG_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/jpeg.lib ^
-DJPEG_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/jpeg.lib ^
-DMPFR_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DMPFR_LIBRARIES_DIR:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
-DTIFF_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DTIFF_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/tiffd.lib ^
-DTIFF_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/tiff.lib ^
-DZLIB_INCLUDE_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
-DZLIB_LIBRARY_DEBUG:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib/zlibd.lib ^
-DZLIB_LIBRARY_RELEASE:FILEPATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib ^
-DSIMGEAR_INCLUDE_DIR:PATH=%ROOT_DIR%/scratch-install/include ^
-DSIMGEAR_CORE_LIBRARY_RELEASE=%ROOT_DIR%/scratch-install/lib/SimGearCore.lib ^
-DSIMGEAR_SCENE_LIBRARY_RELEASE=%ROOT_DIR%/scratch-install/lib/SimGearScene.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%
REM TerraGear is expecting proj.dll instead of proj_4_9.dll, clone it so TG may find it.
for %%i in (vcpkg-git\installed\x64-windows\bin\proj*.dll) do copy /Y %%i Stage\bin\proj.dll
for %%i in (vcpkg-git\installed\x64-windows\bin\proj*.dll) do copy /Y %%i scratch-install\bin\proj.dll
ECHO All done!
echo All done!

2
fgdata

Submodule fgdata updated: dce80cbf83...839f93d27f

View File

@@ -18,22 +18,26 @@ rm -rf $WORKSPACE/dist/include/simgear $WORKSPACE/dist/libSim* $WORKSPACE/dist/l
PATH=$PATH:$QTPATH
echo "Build path is: $PATH"
# this shoudl not be needed, since this is inside CMAKE_INSTALL_PREFIX, but seemed
# 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"
###############################################################################
echo "Starting on SimGear"
pushd sgBuild
cmake -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DCMAKE_BUILD_TYPE=RelWithDebInfo ../simgear
cmake ${cmakeCommonArgs} ../simgear
# compile
make
cmake --build . --target debug_symbols
cmake --build . --target install
if [ $? -ne '0' ]; then
echo "make simgear failed"
exit 1
fi
make install
popd
################################################################################
@@ -46,21 +50,27 @@ else
FGBUILDTYPE=Nightly
fi
cmake -DFG_BUILD_TYPE=$FGBUILDTYPE -DCMAKE_INSTALL_PREFIX:PATH=$WORKSPACE/dist -DENABLE_SWIFT:BOOL=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ../flightgear
cmake -DFG_BUILD_TYPE=$FGBUILDTYPE -DENABLE_SWIFT:BOOL=ON ${cmakeCommonArgs} ../flightgear
make
cmake --build . --target debug_symbols
cmake --build . --target install
if [ $? -ne '0' ]; then
echo "make flightgear failed"
exit 1
fi
make install
popd
chmod +x $WORKSPACE/dist/bin/osgversion
crashpad_bin_path=$WORKSPACE/dist/fgfs.app/Contents/MacOS/crashpad_handler
if [ -f $crashpad_bin_path ]; then
chmod +x $crashpad_bin_path
fi
chmod +x $WORKSPACE/dist/bin/osgversion
echo "Running symbol upload script"
./sentry-dSYM-upload-mac.sh
################################################################################

View File

@@ -31,6 +31,8 @@ $osgSoVersion=runOsgVersion('so-number')
$openThreadsSoVersion=runOsgVersion('openthreads-soversion-number')
$codeSignIdentity = ENV['FG_CODESIGN_IDENTITY']
$keychain = ENV['FG_KEYCHAIN']
puts "Code signing identity is #{$codeSignIdentity}"
puts "osgVersion=#{osgVersion}, so-number=#{$osgSoVersion}"
@@ -41,7 +43,6 @@ $prefixDir=Dir.pwd + "/dist"
dmgDir=Dir.pwd + "/image"
srcDir=Dir.pwd + "/flightgear"
qmlDir=srcDir + "/src/GUI/qml"
puts "Erasing previous image dir"
`rm -rf #{dmgDir}`
@@ -54,11 +55,10 @@ bundle=dmgDir + "/FlightGear.app"
puts "Running macdeployqt on the bundle to copy Qt libraries"
`macdeployqt #{$prefixDir}/fgfs.app -qmldir=#{qmlDir}`
puts "Moving & renaming app bundle"
puts "Copying & renaming app bundle"
`mkdir -p #{dmgDir}`
`mv #{$prefixDir}/fgfs.app #{bundle}`
`rsync --archive --quiet #{$prefixDir}/fgfs.app/ #{bundle}`
bundle=dmgDir + "/FlightGear.app"
contents=bundle + "/Contents"
macosDir=contents + "/MacOS"
$frameworksDir=contents +"/Frameworks"
@@ -68,8 +68,9 @@ osgPluginsDir=contents+"/PlugIns/osgPlugins"
# for writing copyright year to Info.plist
t = Time.new
fgCurrentYear = t.year
fgBundleIdentifier = "org.flightgear.mac"
fgVersion = File.read("#{srcDir}/version").strip
fgVersion = File.read("#{srcDir}/flightgear-version").strip
volName="\"FlightGear #{fgVersion}\""
if $isRelease
@@ -78,6 +79,7 @@ if $isRelease
else
dmgPath = Dir.pwd + "/output/FlightGear-#{fgVersion}-nightly.dmg"
dmgFullPath = Dir.pwd + "/output/FlightGear-#{fgVersion}-nightly-full.dmg"
fgBundleIdentifier = "org.flightgear.mac-nightly"
end
puts "Creating directory structure"
@@ -98,7 +100,7 @@ bins.each do |b|
`cp #{$prefixDir}/bin/#{b} #{outPath}`
end
puts "copying libraries"
puts "Copying OSG libraries"
$osgLibs.each do |l|
libFile = "lib#{l}.#{$osgSoVersion}.dylib"
`cp #{$prefixDir}/lib/#{libFile} #{$frameworksDir}`
@@ -108,6 +110,16 @@ end
libFile = "libOpenThreads.#{$openThreadsSoVersion}.dylib"
`cp #{$prefixDir}/lib/#{libFile} #{$frameworksDir}`
# DBus and libEvent needed for SWIFT
# Sentry is crash reporting
otherLibs = ['dbus-1.3', 'event_core-2.2.1', 'sentry']
otherLibs.each do |l|
`cp #{$prefixDir}/lib/lib#{l}.dylib #{$frameworksDir}`
end
# copy LibLZMA from Homebrew XZ
`cp /usr/local/lib/liblzma.dylib #{$frameworksDir}`
$osgPlugins.each do |p|
pluginFile = "osgdb_#{p}.dylib"
`cp #{$prefixDir}/lib/osgPlugins/#{pluginFile} #{osgPluginsDir}`
@@ -135,27 +147,50 @@ File.open("#{contents}/Info.plist", 'w') { |f|
createArgs = "-format UDBZ -imagekey bzip2-level=9 -quiet -volname #{volName}"
# enable the hardened runtime and timestamp options, so notarization works
codeSignArgs = "--deep --options=runtime --timestamp"
if !$isRelease
# create the 'lite' DMG without the base files
# code sign the entire bundle once complete - v2 code-signing
puts "Signing #{bundle}"
`codesign --deep -s "#{$codeSignIdentity}" #{bundle}`
puts "Creating DMG"
`codesign #{codeSignArgs} --keychain #{$keychain} -s "#{$codeSignIdentity}" #{bundle}`
puts "Creating DMG without base-files"
`rm -f #{dmgPath}`
`hdiutil create -srcfolder #{dmgDir} #{createArgs} #{dmgPath}`
puts "Notarizing DMG #{dmgPath}"
`xcrun altool --notarize-app \
--primary-bundle-id "#{fgBundleIdentifier}" \
--username "zakalawe@mac.com" \
--password "@keychain:FlightGearAppStoreConnectUserName" \
--file #{dmgPath}`
end
puts "Creating full image with data"
puts "Copying base package files into the image"
`rsync -a fgdata/ #{resourcesDir}/data`
# re-sign the entire bundle
puts "Re-signing full #{bundle}"
`codesign --force --deep -s "#{$codeSignIdentity}" #{bundle}`
# sign the entire bundle
puts "Signing full app: #{bundle}"
`codesign --force #{codeSignArgs} --keychain #{$keychain} -s "#{$codeSignIdentity}" #{bundle}`
`rm -f #{dmgFullPath}`
`hdiutil create -srcfolder #{dmgDir} #{createArgs} #{dmgFullPath}`
puts "Notarizing DMG #{dmgFullPath}"
`xcrun altool --notarize-app \
--primary-bundle-id "#{fgBundleIdentifier}" \
--username "zakalawe@mac.com" \
--password "@keychain:FlightGearAppStoreConnectUserName" \
--file #{dmgFullPath}`
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

@@ -83,6 +83,7 @@ FORMAT_HANDLERS_NAMES = []
# qttools/src/linguist/shared/numerus.cpp).
PLURAL_FORMS = {
None: ["<master>"], # for the default (= master) translation
"ca": ["singular", "plural"],
"de": ["singular", "plural"],
"en": ["singular", "plural"],
"es": ["singular", "plural"],
@@ -92,6 +93,7 @@ PLURAL_FORMS = {
"pl": ["singular", "paucal", "plural"],
"pt": ["singular", "plural"],
"ru": ["singular", "plural"],
"sk": ["singular", "paucal", "plural"],
"zh": ["universal"] # universal form
}
@@ -999,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

@@ -42,8 +42,8 @@ NEXT_MINOR_VERSION=${VERSION_A[1]}
setVersionTo() {
local V="$1"
echo "setting version to $V"
echo "$V" > version
git add version
echo "$V" > flightgear-version
git add flightgear-version
echo "new version: $V" | git commit --file=-
# git tag "version/$V"
}

View File

@@ -1,7 +1,7 @@
#!/bin/bash
THIS_RELEASE="2019.1"
NEXT_RELEASE="2019.2"
THIS_RELEASE="2020.2"
NEXT_RELEASE="2020.3"
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}"

View File

@@ -0,0 +1,64 @@
#!/bin/bash
#####################################################################################
if [ "$WORKSPACE" == "" ]; then
echo "ERROR: Missing WORKSPACE environment variable."
exit 1
fi
if [ ! -d "$WORKSPACE/fgdata" ]; then
echo "No fgdata subdir in WORKSPACE: can't continue"
exit 1
fi
VERSION=`cat fgdata/version`
BASE_VERSION_TAG="version/2020.3.1"
SCENERY_PACK_AIRPORT=BIKF
SCENERY_PACK_URI="https://sourceforge.net/projects/flightgear/files/scenery/SceneryPack.${SCENERY_PACK_AIRPORT}.tgz/download"
echo "Assembling base package for $VERSION"
cd $WORKSPACE
# wipe directories and re-create
rm -rf staging
mkdir -p output
mkdir -p staging
# wipe existing data TXZs
rm output/FlightGear-$VERSION*data.txz
rsync -az --exclude=".git" --exclude="Textures/Unused" --exclude="*.xcf" fgdata staging/
# add all the scenery pack files into it
SCENERY_PACK_NAME=SceneryPack_${SCENERY_PACK_AIRPORT}.tgz
# Should we re-download the SceneryPack periodically? Or just rely on doing a workspace wipe?
if [ ! -f $SCENERY_PACK_NAME ]; then
echo "Downloading scenery pack from ${SCENERY_PACK_URI}"
# -L to follow the SF redirect
curl -L $SCENERY_PACK_URI --output $SCENERY_PACK_NAME
fi
pushd staging/fgdata/Scenery
tar -xf $WORKSPACE/$SCENERY_PACK_NAME --strip-components=1
popd
# Creating full base package TXZ
OUTPUT_NAME=FlightGear-$VERSION-data
tar -cJf output/$OUTPUT_NAME.txz --directory staging fgdata
echo "Creating updates package"
pushd fgdata
git diff --name-only --line-prefix="fgdata/" $BASE_VERSION_TAG..HEAD > ../fgdata_changes
popd
tar -cJf output/FlightGear-$VERSION-update-data.txz -T fgdata_changes
echo "Done, data TXZs are in output/"

View File

@@ -0,0 +1,30 @@
#!/bin/bash
# the name to create
SCENERY_PACK=SceneryPack.BIKF
# the tiles to select
TILES="w030n60/w???n??";
# tiles for PHNL for C172 tutorials
TUTORIAL_TILES="w160n[12]0/w???n??";
rm -f SceneryPack.*.tgz
# note the path to the TerraSync root here
ln -s /var/www/uk-mirror/fgscenery ${SCENERY_PACK}
tar --format=gnu --create --owner=root --group=root --gzip --file=${SCENERY_PACK}.tgz \
${SCENERY_PACK}/Objects/${TILES} \
${SCENERY_PACK}/Terrain/${TILES} \
${SCENERY_PACK}/Objects/${TUTORIAL_TILES} \
${SCENERY_PACK}/Terrain/${TUTORIAL_TILES} \
${SCENERY_PACK}/Airports/B/I/K \
${SCENERY_PACK}/Airports/P/H \
${SCENERY_PACK}/Airports_archive.tgz \
${SCENERY_PACK}/Models
rm ${SCENERY_PACK}
# upload to frs.sourceforge.net /home/frs/project/fl/flightgear/scenery/

View File

@@ -0,0 +1,34 @@
#!/bin/bash
#This file is part of FlightGear
#
#FlightGear 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.
#
#FlightGear 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 FlightGear If not, see <http://www.gnu.org/licenses/>.
if [ -z "$1" -o -z "$2" ]; then
echo "usage: author email"
exit
fi
resetAuthor() {
pushd $3 > /dev/null
git config user.name "$1"
git config user.email $2
popd > /dev/null
}
resetAuthor "$1" $2 flightgear
resetAuthor "$1" $2 simgear
resetAuthor "$1" $2 fgdata
resetAuthor "$1" $2 getstart
resetAuthor "$1" $2 .

View File

@@ -33,9 +33,9 @@ MICRO_VERSION=${VERSION_A[2]}
setVersionTo() {
local V="$1"
echo "setting version to $V"
echo "$V" > version
git add version
echo "setting version to $V in $2"
echo "$V" > $2
git add $2
echo "new version: $V" | git commit --file=-
git tag "version/$V"
}
@@ -43,9 +43,22 @@ setVersionTo() {
while [ $# -gt 0 ]; do
echo "Processing $1"
pushd $1 > /dev/null
case $1 in
flightgear)
versionFileName="flightgear-version"
;;
simgear)
versionFileName="simgear-version"
;;
*)
versionFileName="version"
;;
esac
git config user.name "Automatic Release Builder"
git config user.email "build@flightgear.org"
setVersionTo "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}"
setVersionTo "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}" $versionFileName
popd > /dev/null
shift
done

15
sentry-dSYM-upload-mac.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
DWARF_DSYM_FOLDER_PATH=$WORKSPACE/dist/symbols
if which sentry-cli >/dev/null; then
export SENTRY_ORG=flightgear
export SENTRY_PROJECT=flightgear
# export SENTRY_AUTH_TOKEN=YOUR_AUTH_TOKEN
ERROR=$(sentry-cli upload-dif "$DWARF_DSYM_FOLDER_PATH" 2>&1 >/dev/null)
if [ ! $? -eq 0 ]; then
echo "warning: sentry-cli - $ERROR"
fi
else
echo "warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases"
fi

Submodule simgear updated: f964374027...af0f7676c4

View File

@@ -1 +1 @@
2019.2.0
2020.3.12

BIN
windows/flightgear.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@@ -0,0 +1,25 @@
FlightGear LTS
==============
Contains FlightGear stable source code from source code repository ('release' branch).
This is the FlightGear installer for Long Term Support (LTS) version. It contains
the most stable and well tested FlightGear source code. Have fun using it !
Latest features ?
-----------------
Please take a look at the FlightGear unstable installer, but beware, it can contains
new, not well tested code. If you want to have solid and stable flight experience
stick with this FlightGear LTS version.
I have found a bug !
--------------------
If you find serious bugs, instability, performance degradation:
- look at the FlightGear Tickets page (on the SourceForge project page)
- ask on the FlightGear forum (explicitly say that you're using LTS version)
- look at the flightgear-devel mailing list
There is a probability, that developers are working on the solution it right now !

View File

@@ -0,0 +1,23 @@
FlightGear LTS
==============
Dit is de installatie voor de FlightGear versie met langdurige ondersteuning (LTS).
Het bevat de meest stabiele en zorgvuldig geteste versie van FlightGear. Veel plezier!
Op zoek naar de laatste ontwikkelingen?
---------------------------------------
Installeer hiervoor de onstabiele versie. Maar let op, deze bevat nieuwe, niet goed
geteste code. Blijf de huidige LTS versie gebruiken voor de meest stabiele ervaring.
Ik heb een fout gevonden!
-------------------------
Als er een fout, instabiliteit of prestatieprobleem optreedt:
- kijk op de Tickets pagina op de SourceForge website van het project
- vraag om hulp op het FlightGear forum (en vermeld daarbij dat om welke LTS versie het gaat)
- kijk op de flightgear-devel mailinglijst
De ontwikkelaars zijn misschien al bezig met het oplossen van het probleem!

View File

@@ -0,0 +1,26 @@
FlightGear LTS
==============
Zawiera kod źródłowy FlightGear z repozytorium kodu źródłowego (gałąź 'release).
To jest instalator dla wersji Long Term Support (LTS) - o długim czasie wsparcia.
Zawiera najbardziej stabilny i dobrze przetestowany kod źródłowy FlightGear.
Miłej zabawy i korzystania z niego !
Najnowsze funkcje ?
-----------------
Proszę sprawdź instalator FlightGear wersji niestabilnej, ale miej na uwadze, że
może zawierać nowy, nie do końca przetestowany kod. Jeśli chcesz solidnego i stabilnego
doświadczenia podczas Twoich lotów, pozostań przy tej wersji FlightGear LTS.
Znalazłem błąd !
--------------------
Jeśli znalazłeś poważny błąd, niestabilność, ograniczenie wydajności:
- sprawdź stronę ze zgłoszeniami błędów FlightGear (na stronie projektu SourceForge)
- zapytaj na forum FlightGear (wskaż jasno, że korzystasz z wersji LTS)
- sprawdź mailową listę dyskusyjną flightgear-devel
Jest prawdopodobne, że programiści już pracują nad rozwiązaniem tego problemu !

View File

@@ -0,0 +1,22 @@
FlightGear LTS
==============
Содержит стабильный исходный код из репозитория (ветвь 'release').
Установщик FlightGear с версией долгосрочной поддержки (LTS). Содержит проверенный и наиболее стабильный исходный код. Приятного использования!
Новые функции ?
-----------------
Обратите внимание на установщик FlightGear нестабильной версии, будьте осторожны, в нём может содержаться непроверенный код. Если вам требуется основательный и стабильный лётный опыт, придерживайтесь версии FlightGear LTS.
Я нашел ошибку !
--------------------
Если найдена серьезная ошибка, нестабильность, падение производительности:
- Посетите страницу FlightGear Tickets (На странице проекта в SourceForge)
- Спросите на форуме FlightGear (укажите, что вы используете версиюю LTS)
- Изучите страницу запросов разработки flightgear-devel
Есть вероятность, что разработчики работают над ее решением прямо сейчас! !

BIN
windows/setupimg.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

BIN
windows/setupsmall.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB