Avoiding multiple downloads of FGData on Linux
When building different versions of FlightGear, its important to note that each version has its own version of FGData, and FlightGear will check the version to ensure it is compatible.
Since FGData is so large (At least 1.2 GB as of 07/06/15), it makes sense to download the whole FGData only once. You can keep versions of it separately from the install tree that download_and_compile.sh creates and create symbolic links to them before using the script. That way when you decide to rebuild from scratch, at least the FGData will remain.
download_and_compile.sh script can build either the next/master branch, or the stable version of FlightGear.
The instructions below tell how to do this for existing or new uses of
download_and_compile.sh. The technical details are not dependent on where you put your builds. You can use the directory scheme I use or your own existing scheme.
The concept as a whole works great. I've been using it for months. The instructions are a work in progress and have yet to be fully tested.
- 1 The main ideas
- 2 Technical points and command examples
- 3 Background info
- 4 Here's how I handle FGData...
- 5 Detailed directions
- 5.1 Create a directory for each version of FGData you are going to use
- 5.2 Create a directory for each version or variation of FlightGear you want to build
- 5.3 Do you first build of FlightGear
- 5.4 Retrofit previous use of download_and_compile.sh
- 5.5 Prepare to build another version
- 5.6 Building with options
The main ideas
- You may only need one copy of each version of FGData you are working with
- FGData normally lives as a sub-directory in
- Once it exists,
install/fgdatacan moved and replaced by a symbolic link to FGData's real directory location
Technical points and command examples
mkdir -p install/fgfswill create the install directory and subdirectory if either does not yet exist
mvcan move a directory
cp -Rwill copy a directory recursively.
ln -s targetname linknamecreates linkname as a symbolic link to the target. The target may or may not yet exist and that's normally ok. Not in this case, because of the way we create the directory with git.
- The symbolic link must be created after downloading
- Important: You can move the FlightGear source directories and
download_and_compile.shto different folders at will. Git will not care. All the Git specific files move right along with the sources. Its the same for SVN. However, the same does not hold true for the files created during a build by cmake. The build and install folders cannot be moved because the files in them have hard coded paths in some cases. They'll need to be deleted and rebuilt.
I do my builds of different versions and options in separate sub-directories under
~/work/fg. Sometimes I'll create an extra tree for debugging purposes. I don't want to have to copy all of FGData just to do the work on a debug version. I also copy the sources for the various components to avoid re downloading those as well. In download_and_compile.sh, Git takes care of any changes needed to switch to between master and stable as needed.
Here's how I handle FGData...
Normally fgdata lands in
I've moved my 2.10.0 and 2.11.0 FGData versions and replaced them with symbolic links to the new location as needed.
Its as simple as that.
In short the steps are:
- Create a directory for each version of FGData you are going to use
- Create a directory for each version or variation of FlightGear you want to build
- Do you first build of FlightGear
- Retrofit previous use of
- Prepare to build another version
- Building with options
Create a directory for each version of FGData you are going to use
mkdir -p ~/work/fg/fgdata_2.10.0 mkdir -p ~/work/fg/fgdata_2.11.0
Eventually a particular version of FGData will be in each
Create a directory for each version or variation of FlightGear you want to build
download_and_compile.sh will be run from these directories
Mine are sub-directories of
~/work/fg for example:
mkdir -p ~/work/fg/master mkdir -p ~/work/fg/stable mkdir -p ~/work/fg/master_debug mkdir -p ~/work/fg/master_debug_rti
Note that I never build at the
download_and_compile.sh is always run from a sub-directory
Do you first build of FlightGear
You can skip this step if you've already done one.
If you've never used
download_and_compile.sh before you're ready to go.
cp download_and_compile.sh ~/work/fg/master cd ~/work/fg/master ./download_and_compile.sh ALL
That will build just about everything and will download FGData into
Retrofit previous use of download_and_compile.sh
Download_and_compile.sh placed the FGData directory in the
We're going to move it. N
From the directory where you run
mv install/fgfs/fgdata ~/work/fg/fgdata_2.11.0 ln -s /home/userid/work/fg/fgdata_2.11.0/fgdata install/fgfs/fgdata
If you want to adopt my tree naming scheme, then move the source directories for the various components to the appropriate build directory such as
~/work/fg/master. Note that you cannot move the build and install directories. They'll be rebuilt in the new location. The rebuild is needed because we use Cmake.
Test to see that everything is hooked up.
Prepare to build another version
In step 1, we created a spot for two FGData versions. So far only one is actually there,
fgdata_2.11.0/fgdata. Lets fix that so we don't have to download another copy for 2.10.0
cd ~/work/fg/fgdata_2.8.0 cp -r ~/work/fg/fgdata_2.11.0 fgdata
That's right, we just made a copy of 2.11.0's fgdata and are calling it 2.8.0.
While we're at it, lets copy the 2.11.0 source code
cd ~/work/fg/stable cp -R ~/work/fg/master/download_and_compile.sh ./ cp -R ~/work/fg/master/fgfs ./ cp -R ~/work/fg/master/plib ./ cp -R ~/work/fg/master/simgear ./ cp -R ~/work/fg/master/OpenSceneGraph ./ cp -R ~/work/fg/master/fgrun ./ cp -R ~/work/fg/master/fgcom ./ cp -R ~/work/fg/master/fgcomgui ./
And replace the link to the right version
mkdir -p /installfgfs ln -s ~/work/fg/fgdata/2.8.0 install/fgfs ls -lah install/fgfs/fgdata # show the symlink to fgdata ls install/fgfs/fgdata # make sure there's something there.
Now you can build stable
./download_and_compile.sh -s ALL
Building with options
You can use
download_and_compile.sh to build master or stable with various options such as
-i for OpenRTI or
-g to build a debug version.
You can do that in your master or stable that you just built without these options by deleting the install directories and using the options you want to rebuild with. (Remember to redo the link as in step 3 if you delete
install/fgfs. The link will go, but
~/work/fgdata_*/fgdata will stay.)
An alternative is to use a separate directory. All that's needed is that link to fgdata before you start.
Three of the
download_and_compile.sh options actually build differently.
-ibuilds with OpenRTI
-ebuilds with –with-eventinput
-gbuilds for debugging
If you create a separate directory with the correct
install/fgfs/fgdata symbolic link, you can build either master or stable with any of these options, independently of your main builds in master or stable.
You have choices. You can use the options in
~/work/fg/master, or you can do things in separate directories. Whatever suits your purpose.