Compare commits
95 Commits
release/2.
...
release/3.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2dbbd0502e | ||
|
|
ad64659f67 | ||
|
|
63c7fcfc8f | ||
|
|
19d1dc5bf9 | ||
|
|
be6079692e | ||
|
|
0f1dbad70d | ||
|
|
71366844dd | ||
|
|
5c28af16e8 | ||
|
|
01c48cea4b | ||
|
|
d7b5930118 | ||
|
|
be781298c2 | ||
|
|
5b156f81a7 | ||
|
|
f953e701ce | ||
|
|
52d3dd1759 | ||
|
|
1d879d0e49 | ||
|
|
d43c66d602 | ||
|
|
2ddba10a14 | ||
|
|
841a58097b | ||
|
|
1514eaee73 | ||
|
|
d498ebbe61 | ||
|
|
74a0c9c4ab | ||
|
|
0db50a95a3 | ||
|
|
75c90bfb3f | ||
|
|
8e52a6a247 | ||
|
|
5b5d2865a6 | ||
|
|
6109e8717d | ||
|
|
4abdf82598 | ||
|
|
1ab162d4d6 | ||
|
|
c25db033d6 | ||
|
|
06619741c4 | ||
|
|
4f7be59b0d | ||
|
|
d54ef9f452 | ||
|
|
82931efe42 | ||
|
|
0e925e2b65 | ||
|
|
62a773ed04 | ||
|
|
b1f695a89c | ||
|
|
036899c620 | ||
|
|
636d71da45 | ||
|
|
b4ef60ce93 | ||
|
|
3eda43fa69 | ||
|
|
82feb39e2a | ||
|
|
15b395c983 | ||
|
|
65dbc2051a | ||
|
|
36ab364a91 | ||
|
|
9d1862e591 | ||
|
|
70ee8107b1 | ||
|
|
8639e504c3 | ||
|
|
4a114eb43d | ||
|
|
156a3e1cf1 | ||
|
|
1aa9ff4e84 | ||
|
|
2f9d983441 | ||
|
|
4c8174014e | ||
|
|
586daede43 | ||
|
|
0940dca867 | ||
|
|
783a8a8ee6 | ||
|
|
4c227f76e4 | ||
|
|
13cc7d5e50 | ||
|
|
67bfe88597 | ||
|
|
f98529dbce | ||
|
|
2e4f0171eb | ||
|
|
75cc4a410c | ||
|
|
fe39e97c2e | ||
|
|
5f94a6d623 | ||
|
|
102f797cc3 | ||
|
|
247ca7b113 | ||
|
|
0a81018df9 | ||
|
|
784a595e82 | ||
|
|
95d0692b0e | ||
|
|
af9a7e9bd2 | ||
|
|
a16f37e678 | ||
|
|
4a10d32c61 | ||
|
|
a2a2d6f354 | ||
|
|
866a234822 | ||
|
|
57dfbfe524 | ||
|
|
fe838ad8e8 | ||
|
|
ba53b4ce5f | ||
|
|
e5531723b8 | ||
|
|
9a1a5ce7a6 | ||
|
|
758488cd6d | ||
|
|
4ba10aafda | ||
|
|
9e8fc07ea1 | ||
|
|
9763440ef4 | ||
|
|
c78949fd4a | ||
|
|
7d21138771 | ||
|
|
0b5855fdee | ||
|
|
d627ec7360 | ||
|
|
56e9eb4b6a | ||
|
|
24e55d6b92 | ||
|
|
f625f7b5e5 | ||
|
|
2f97b62112 | ||
|
|
3378b289aa | ||
|
|
8fe9281692 | ||
|
|
5610f352af | ||
|
|
19e9e62ba6 | ||
|
|
75f1a35520 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,6 +2,7 @@ dist
|
||||
.DS_Store
|
||||
install
|
||||
3rdParty
|
||||
3rdParty.x64
|
||||
boost_1_44_0
|
||||
InstallConfig.iss
|
||||
Output
|
||||
@@ -9,6 +10,7 @@ output
|
||||
fgBuild
|
||||
sgBuild
|
||||
image
|
||||
build
|
||||
macflightgear
|
||||
fgdata
|
||||
src
|
||||
|
||||
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -1,12 +1,16 @@
|
||||
[submodule "simgear"]
|
||||
path = simgear
|
||||
url = git://gitorious.org/fg/simgear.git
|
||||
branch = next
|
||||
[submodule "flightgear"]
|
||||
path = flightgear
|
||||
url = git://gitorious.org/fg/flightgear.git
|
||||
branch = next
|
||||
[submodule "fgrun"]
|
||||
path = fgrun
|
||||
url = git://gitorious.org/fg/fgrun.git
|
||||
branch = next
|
||||
[submodule "maclauncher"]
|
||||
path = maclauncher
|
||||
url = git://gitorious.org/fg/maclauncher.git
|
||||
branch = master
|
||||
|
||||
239
CMakeLists.txt
239
CMakeLists.txt
@@ -4,6 +4,11 @@ include (ExternalProject)
|
||||
|
||||
project(FlightGear-Meta)
|
||||
|
||||
if(NOT CMAKE_INSTALL_PREFIX)
|
||||
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install)
|
||||
message(STATUS "Default install dir to ${CMAKE_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
if (UNIX)
|
||||
set(BOOST_BOOTSTRAP "./bootstrap.sh" --prefix=${CMAKE_INSTALL_PREFIX})
|
||||
else()
|
||||
@@ -12,39 +17,39 @@ endif()
|
||||
|
||||
set(SG_DEPS OSG)
|
||||
set(FG_DEPS SimGear)
|
||||
set(SG_CMAKE_ARGS "")
|
||||
set(FG_CMAKE_ARGS "")
|
||||
set(FGRUN_CMAKE_ARGS "")
|
||||
|
||||
if(APPLE)
|
||||
|
||||
set(BOOST_ARGS link=static stage --with-system)
|
||||
ExternalProject_Add(Boost
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
SVN_REPOSITORY http://svn.boost.org/svn/boost/tags/release/Boost_1_52_0
|
||||
UPDATE_COMMAND ${BOOST_BOOTSTRAP}
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ./bjam ${BOOST_ARGS}
|
||||
BUILD_IN_SOURCE 1
|
||||
INSTALL_COMMAND ./b2 install ${BOOST_ARGS})
|
||||
|
||||
|
||||
ExternalProject_Add(libSvn
|
||||
DOWNLOAD_COMMAND URL http://flightgear.simpits.org:8080/job/Mac-Subversion-libs/lastSuccessfulBuild/artifact/dist/*zip*/dist.zip
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
SVN_REPOSITORY http://svn.boost.org/svn/boost/tags/release/Boost_1_52_0
|
||||
UPDATE_COMMAND ${BOOST_BOOTSTRAP}
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND cp -r ${CMAKE_BINARY_DIR}/src/libSvn/include ${CMAKE_INSTALL_PREFIX} && cp -r ${CMAKE_BINARY_DIR}/src/libSvn/lib ${CMAKE_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
list(APPEND SG_DEPS Boost libSvn)
|
||||
BUILD_COMMAND ./bjam ${BOOST_ARGS}
|
||||
BUILD_IN_SOURCE 1
|
||||
INSTALL_COMMAND ./b2 install ${BOOST_ARGS})
|
||||
|
||||
list(APPEND SG_DEPS Boost)
|
||||
endif() # of Apple
|
||||
|
||||
set (OSG_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(OSG_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(SG_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(FG_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(PLIB_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(RTI_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(FGRUN_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
|
||||
# OpenSceneGraph configuration
|
||||
set(OSG_SOURCE http://www.openscenegraph.org/downloads/developer_releases/OpenSceneGraph-3.2.0.zip)
|
||||
|
||||
if (APPLE)
|
||||
SET(SDKROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk)
|
||||
set(SDKROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk)
|
||||
# force disable Qt and Jasper, and ensure an SDKROOT is set, or
|
||||
# osgViewer system detection goes wrongh
|
||||
SET(OSG_CMAKE_ARGS -DCMAKE_OSX_SYSROOT=${SDKROOT}
|
||||
set(OSG_CMAKE_ARGS -DCMAKE_OSX_SYSROOT=${SDKROOT}
|
||||
-DOSG_USE_QT=0
|
||||
-DJASPER_LIBRARY=
|
||||
-DSDL_LIBRARY:FILEPATH=
|
||||
@@ -52,77 +57,104 @@ if (APPLE)
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.7
|
||||
)
|
||||
# OSG with some patches applied for Mac
|
||||
# SET(OSG_SOURCE GIT_REPOSITORY git://gitorious.org/+flightgear-developers/openscenegraph/mac-release-osg.git)
|
||||
SET(OSG_SOURCE URL http://www.openscenegraph.org/downloads/developer_releases/OpenSceneGraph-3.1.4.zip)
|
||||
# set(OSG_SOURCE GIT_REPOSITORY git://gitorious.org/+flightgear-developers/openscenegraph/mac-release-osg.git)
|
||||
# set(OSG_SOURCE URL http://www.openscenegraph.org/downloads/developer_releases/OpenSceneGraph-3.2.0.zip)
|
||||
|
||||
elseif(MSVC)
|
||||
set( OSG_MSVC "msvc" )
|
||||
set(OSG_MSVC "msvc")
|
||||
if (${MSVC_VERSION} EQUAL 1700)
|
||||
set( OSG_MSVC ${OSG_MSVC}110 )
|
||||
set(OSG_MSVC ${OSG_MSVC}110)
|
||||
elseif (${MSVC_VERSION} EQUAL 1600)
|
||||
set( OSG_MSVC ${OSG_MSVC}100 )
|
||||
set(OSG_MSVC ${OSG_MSVC}100)
|
||||
else (${MSVC_VERSION} EQUAL 1700)
|
||||
set( OSG_MSVC ${OSG_MSVC}90 )
|
||||
set(OSG_MSVC ${OSG_MSVC}90)
|
||||
endif (${MSVC_VERSION} EQUAL 1700)
|
||||
if (CMAKE_CL_64)
|
||||
set(OSG_MSVC ${OSG_MSVC}-64)
|
||||
set(RDPARTY_DIR 3rdParty.x64)
|
||||
list(APPEND FG_CMAKE_ARGS -DWITH_FGPANEL=OFF)
|
||||
else ()
|
||||
set(RDPARTY_DIR 3rdParty)
|
||||
endif (CMAKE_CL_64)
|
||||
|
||||
SET(OSG_CMAKE_ARGS
|
||||
-DACTUAL_3RDPARTY_DIR:PATH=${CMAKE_BINARY_DIR}/3rdParty
|
||||
-DBUILD_OSG_APPLICATIONS:BOOL=ON
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=
|
||||
-DOSG_PLUGIN_SEARCH_INSTALL_DIR_FOR_PLUGINS:BOOL=OFF
|
||||
-DFREETYPE_LIBRARY:FILEPATH=${CMAKE_BINARY_DIR}/3rdParty/lib/freetype243.lib
|
||||
-DGDAL_INCLUDE_DIR:PATH=
|
||||
-DGDAL_LIBRARY:FILEPATH=
|
||||
SET(OSG_CMAKE_ARGS
|
||||
-DOSG_USE_QT:BOOL=OFF
|
||||
-DBUILD_OSG_APPLICATIONS:BOOL=ON
|
||||
-DOSG_PLUGIN_SEARCH_INSTALL_DIR_FOR_PLUGINS:BOOL=OFF
|
||||
-DACTUAL_3RDPARTY_DIR:PATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}
|
||||
-DCMAKE_LIBRARY_PATH:STRING=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/lib
|
||||
-DCMAKE_INCLUDE_PATH:STRING=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include;${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include/freetype
|
||||
-DCURL_INCLUDE_DIR:PATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include
|
||||
-DTIFF_INCLUDE_DIR:PATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include
|
||||
-DGDAL_INCLUDE_DIR:PATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include
|
||||
-DGDAL_LIBRARY:FILEPATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/lib/gdal_i.lib
|
||||
-DTIFF_LIBRARY:FILEPATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/lib/libtiff.lib
|
||||
-DCURL_LIBRARY:FILEPATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/lib/libcurl_imp.lib
|
||||
-DFREETYPE_LIBRARY:FILEPATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/lib/freetype.lib
|
||||
-DFREETYPE_INCLUDE_DIR:PATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include;${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/include/freetype
|
||||
)
|
||||
|
||||
# for compatability with MSVC directory layout
|
||||
set(OSG_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install/${OSG_MSVC}/OpenSceneGraph)
|
||||
SET(OSG_SOURCE URL http://www.openscenegraph.org/downloads/developer_releases/OpenSceneGraph-3.1.4.zip)
|
||||
|
||||
|
||||
# for compatability with MSVC directory layout
|
||||
set(OSG_INSTALL_PREFIX ${OSG_INSTALL_PREFIX}/${OSG_MSVC}/OpenSceneGraph)
|
||||
set(FGRUN_INSTALL_PREFIX ${FGRUN_INSTALL_PREFIX}/${OSG_MSVC}/FGRun)
|
||||
set(FG_INSTALL_PREFIX ${FG_INSTALL_PREFIX}/${OSG_MSVC}/FlightGear)
|
||||
set(SG_INSTALL_PREFIX ${SG_INSTALL_PREFIX}/${OSG_MSVC}/SimGear)
|
||||
list(APPEND OSG_DEPS WinDeps)
|
||||
else()
|
||||
# normal OSG
|
||||
SET(OSG_SOURCE URL http://www.openscenegraph.org/downloads/developer_releases/OpenSceneGraph-3.1.4.zip)
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
# download 3rdparty dependeancies zip, including boost
|
||||
ExternalProject_Add(WinDeps
|
||||
DOWNLOAD_COMMAND URL http://files.goneabitbursar.com/fg/fgfs-win32-VS100-3rdParty+OSG-20120411.zip
|
||||
# extract to current root
|
||||
SOURCE_DIR ${CMAKE_BINARY_DIR}/winDeps
|
||||
BINARY_DIR ${CMAKE_BINARY_DIR}
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ${CMAKE_SOURCE_DIR}/installWinDeps.bat
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
ExternalProject_Add(Boost
|
||||
DOWNLOAD_COMMAND URL http://flightgear.simpits.org:8080/job/Boost-Win/lastSuccessfulBuild/artifact/Boost/boost/*zip*/boost.zip
|
||||
SOURCE_DIR ${CMAKE_BINARY_DIR}/Boost/boost
|
||||
# download 3rdparty dependencies zip, including boost
|
||||
ExternalProject_Add(WinDeps
|
||||
SVN_REPOSITORY http://fgfs.goneabitbursar.com/fgwin3rdparty/trunk/msvc100/${RDPARTY_DIR}
|
||||
# extract to current root
|
||||
SOURCE_DIR ${CMAKE_BINARY_DIR}/winDeps/${RDPARTY_DIR}
|
||||
BINARY_DIR ${CMAKE_BINARY_DIR}
|
||||
UPDATE_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
BUILD_COMMAND ${CMAKE_SOURCE_DIR}/installWinDeps.bat
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
list(APPEND SG_DEPS Boost)
|
||||
|
||||
list(APPEND SG_CMAKE_ARGS -DBOOST_ROOT=${CMAKE_BINARY_DIR})
|
||||
list(APPEND FG_CMAKE_ARGS -DBOOST_ROOT=${CMAKE_BINARY_DIR})
|
||||
|
||||
set(BOOST_ARGS link=static stage --with-system)
|
||||
set(Boost_Version 1.54.0)
|
||||
string(REPLACE "." "_" Boost_Version_Underscore ${Boost_Version})
|
||||
ExternalProject_Add(Boost
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
URL http://downloads.sourceforge.net/project/boost/boost/${Boost_Version}/boost_${Boost_Version_Underscore}.zip
|
||||
URL_MD5 78a35834c45220a6164310e280abe675
|
||||
UPDATE_COMMAND ""
|
||||
CONFIGURE_COMMAND ${BOOST_BOOTSTRAP}
|
||||
BUILD_COMMAND bjam --with-program_options ${BOOST_ARGS}
|
||||
BUILD_IN_SOURCE 1
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
list(APPEND SG_DEPS Boost)
|
||||
list(APPEND SG_CMAKE_ARGS -DBOOST_ROOT=${CMAKE_BINARY_DIR}/src/Boost)
|
||||
list(APPEND FG_CMAKE_ARGS -DBOOST_ROOT=${CMAKE_BINARY_DIR}/src/Boost)
|
||||
list(APPEND FG_CMAKE_ARGS -DPNG_LIBRARY=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/lib/libpng16.lib)
|
||||
list(APPEND FGRUN_CMAKE_ARGS -DBOOST_ROOT=${CMAKE_BINARY_DIR}/src/Boost)
|
||||
endif(MSVC) # of Windows
|
||||
|
||||
ExternalProject_Add(OSG
|
||||
DEPENDS ${OSG_DEPS}
|
||||
DEPENDS ${OSG_DEPS}
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
${OSG_SOURCE}
|
||||
URL ${OSG_SOURCE}
|
||||
URL_HASH MD5=4980f8692712a24d4c99f363f80c6814
|
||||
BINARY_DIR osgbuild
|
||||
CMAKE_ARGS ${OSG_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${OSG_INSTALL_PREFIX}
|
||||
# force Release build of OpenSceneGraph
|
||||
# BUILD_COMMAND "cmake --build . --config Release"
|
||||
)
|
||||
|
||||
set(SG_CMAKE_ARGS -DENABLE_PACKAGE=1)
|
||||
set(FG_CMAKE_ARGS "")
|
||||
# Because OSG install the libraries in lib64/ instead of lib/
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
ExternalProject_Add_Step(OSG after_install
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${OSG_INSTALL_PREFIX}/lib64 ${OSG_INSTALL_PREFIX}/lib
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory ${OSG_INSTALL_PREFIX}/lib64
|
||||
DEPENDEES install
|
||||
)
|
||||
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
|
||||
# FIXME install of OpenRTI is failing on Windows, files in PREFIX/share which
|
||||
# are ending up in C:/Program Files/OpenRTI
|
||||
@@ -131,43 +163,80 @@ if (NOT MSVC)
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
DOWNLOAD_COMMAND GIT_REPOSITORY git://gitorious.org/openrti/openrti.git
|
||||
BINARY_DIR rtibuild
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${RTI_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
list(APPEND SG_DEPS OpenRTI)
|
||||
list(APPEND SG_CMAKE_ARGS -DENABLE_RTI=1)
|
||||
list(APPEND FG_CMAKE_ARGS -DENABLE_RTI=1)
|
||||
list(APPEND SG_DEPS OpenRTI)
|
||||
list(APPEND SG_CMAKE_ARGS -DENABLE_RTI=1)
|
||||
list(APPEND FG_CMAKE_ARGS -DENABLE_RTI=1)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(SimGear
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
DEPENDS ${SG_DEPS}
|
||||
DOWNLOAD_COMMAND "" # no need to download
|
||||
UPDATE_COMMAND "" # or update.
|
||||
DOWNLOAD_COMMAND "" # no need to download
|
||||
UPDATE_COMMAND "" # or update.
|
||||
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/simgear
|
||||
BINARY_DIR sgbuild
|
||||
CMAKE_ARGS ${SG_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX})
|
||||
CMAKE_ARGS ${SG_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${SG_INSTALL_PREFIX} -DCMAKE_PREFIX_PATH=${OSG_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
# on Windows, PLIB is in the 3rd-party dependancies zip
|
||||
# because we download SimGear externally (via Git submodules),
|
||||
# the change-detection doesn't work. Ensure we always change
|
||||
# for changes
|
||||
ExternalProject_Add_Step(SimGear forcebuild
|
||||
ALWAYS 1
|
||||
COMMAND ${CMAKE_COMMAND} -E echo foo
|
||||
DEPENDERS build
|
||||
)
|
||||
|
||||
# on Windows, PLIB is in the 3rd-party dependencies zip
|
||||
if (NOT WIN32)
|
||||
SET(PLIB_ARGS --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux)
|
||||
set(PLIB_ARGS --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux)
|
||||
|
||||
ExternalProject_Add(PLIB
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
URL http://plib.sourceforge.net/dist/plib-1.8.5.tar.gz
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${CMAKE_INSTALL_PREFIX} ${PLIB_ARGS}
|
||||
BUILD_IN_SOURCE 1
|
||||
)
|
||||
ExternalProject_Add(PLIB
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
URL http://plib.sourceforge.net/dist/plib-1.8.5.tar.gz
|
||||
URL_HASH MD5=47a6fbf63668c1eed631024038b2ea90
|
||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PLIB_INSTALL_PREFIX} ${PLIB_ARGS}
|
||||
BUILD_IN_SOURCE 1
|
||||
)
|
||||
|
||||
list(APPEND FG_DEPS PLIB)
|
||||
endif()
|
||||
|
||||
# Only compile FGRun for Windows
|
||||
if (MSVC)
|
||||
list(APPEND FGRUN_CMAKE_ARGS -DMSVC_3RDPARTY_ROOT:PATH=${CMAKE_BINARY_DIR})
|
||||
list(APPEND FGRUN_CMAKE_ARGS -DFLTK_FLUID_EXECUTABLE:FILEPATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/bin/fluid.exe)
|
||||
list(APPEND FGRUN_CMAKE_ARGS -DGETTEXT_MSGFMT_EXECUTABLE:FILEPATH==${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/bin/msgfmt.exe)
|
||||
list(APPEND FGRUN_CMAKE_ARGS -DGETTEXT_MSGMERGE_EXECUTABLE:FILEPATH=${CMAKE_BINARY_DIR}/${RDPARTY_DIR}/bin/msgmerge.exe)
|
||||
ExternalProject_Add(FGRun
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
DEPENDS ${FG_DEPS}
|
||||
DOWNLOAD_COMMAND "" # no need to download
|
||||
UPDATE_COMMAND "" # or update.
|
||||
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/fgrun
|
||||
BINARY_DIR fgrunbuild
|
||||
CMAKE_ARGS ${FGRUN_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${FGRUN_INSTALL_PREFIX} -DCMAKE_PREFIX_PATH=${OSG_INSTALL_PREFIX} -DADDITIONAL_LIBRARY_PATHS=${SG_INSTALL_PREFIX}
|
||||
)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(FlightGear
|
||||
PREFIX ${CMAKE_BINARY_DIR}
|
||||
DEPENDS ${FG_DEPS}
|
||||
DOWNLOAD_COMMAND "" # no need to download
|
||||
UPDATE_COMMAND "" # or update.
|
||||
DOWNLOAD_COMMAND "" # no need to download
|
||||
UPDATE_COMMAND "" # or update.
|
||||
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/flightgear
|
||||
BINARY_DIR fgbuild
|
||||
CMAKE_ARGS ${FG_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
|
||||
)
|
||||
CMAKE_ARGS ${FG_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${FG_INSTALL_PREFIX} -DCMAKE_PREFIX_PATH=${OSG_INSTALL_PREFIX} -DADDITIONAL_LIBRARY_PATHS=${SG_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
# because we download FlightGear externally (via Git submodules),
|
||||
# the change-detection doesn't work. Ensure we always change
|
||||
# for changes
|
||||
ExternalProject_Add_Step(FlightGear forcebuild
|
||||
ALWAYS 1
|
||||
COMMAND ${CMAKE_COMMAND} -E echo foo
|
||||
DEPENDERS build
|
||||
)
|
||||
|
||||
327
FlightGear.iss
327
FlightGear.iss
@@ -42,188 +42,203 @@ AppVerName=FlightGear v{#FGVersion}
|
||||
AppPublisherURL=http://www.flightgear.org
|
||||
AppSupportURL=http://www.flightgear.org
|
||||
AppUpdatesURL=http://www.flightgear.org
|
||||
DefaultDirName={pf}\FlightGear
|
||||
DefaultDirName={pf}\FlightGear {#FGVersion}
|
||||
DefaultGroupName=FlightGear {#FGVersion}
|
||||
LicenseFile=X:\flightgear\COPYING
|
||||
Uninstallable=yes
|
||||
SetupIconFile=X:\flightgear\package\flightgear.ico
|
||||
VersionInfoVersion={#FGVersion}.0
|
||||
InfoBeforeFile=X:\flightgear\package\Win32-Inno\infobefore.txt
|
||||
WizardImageFile=X:\flightgear\package\Win32-Inno\setupimg.bmp
|
||||
WizardImageStretch=No
|
||||
WizardSmallImageFile=X:\flightgear\package\Win32-Inno\setupsmall.bmp
|
||||
VersionInfoCompany=The FlightGear Team
|
||||
UninstallDisplayIcon=X:\flightgear\projects\VC90\flightgear.ico
|
||||
UninstallDisplayIcon={app}\bin\fgfs.exe
|
||||
ArchitecturesInstallIn64BitMode=x64
|
||||
ArchitecturesAllowed=x86 x64
|
||||
|
||||
|
||||
[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: "insoal"; Description: "Install OpenAL (the sound engine)"
|
||||
Name: "force32"; Description: "Force 32bit install on 64bit system"; Check: Is64BitInstallMode
|
||||
|
||||
[Files]
|
||||
; NOTE: run subst X: F:\ (or whatever path the expanded tree resides at)
|
||||
;Source: "X:\*.txt"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgfs.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\fgfs.exe"; DestDir: "{app}\bin\Win64"; Flags: ignoreversion skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
; 32 bits install
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgfs.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgadmin.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\terrasync.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\js_demo.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgjs.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\GPSsmooth.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\UGsmooth.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\MIDGsmooth.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\metar.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\yasim.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgcom.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FGRun\bin\fgrun.exe"; DestDir: "{app}\bin"; Flags: ignoreversion ; Check: not Is64BitInstallMode
|
||||
Source: "X:\install\msvc100\FGRun\share\locale\*"; DestDir: "{app}\bin\locale"; Flags: ignoreversion recursesubdirs; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\zlib.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\libpng16.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\CrashRpt1402.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\crashrpt_lang.ini"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\CrashSender1402.exe"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "{#VCInstallDir}\redist\x86\Microsoft.VC100.CRT\*.dll"; DestDir: "{app}\bin"; Check: not Is64BitInstallMode
|
||||
Source: "X:\3rdParty\bin\vcredist_x86.exe"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: not Is64BitInstallMode
|
||||
|
||||
;Unconditional install
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgadmin.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\terrasync.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\js_demo.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgjs.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgpanel.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\GPSsmooth.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\UGsmooth.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\MIDGsmooth.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\metar.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\bin\yasim.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion
|
||||
Source: "X:\3rdParty\bin\*.dll"; DestDir: "{app}\bin\Win32"
|
||||
; 64 bits install
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\fgfs.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\fgadmin.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\terrasync.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\js_demo.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\fgjs.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\GPSsmooth.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\UGsmooth.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\MIDGsmooth.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\metar.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\yasim.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FlightGear\bin\fgcom.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FGRun\bin\fgrun.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Check: Is64BitInstallMode
|
||||
Source: "X:\install\msvc100-64\FGRun\share\locale\*"; DestDir: "{app}\bin\locale"; Flags: ignoreversion recursesubdirs; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\zlib.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\vcredist_x64.exe"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\libpng16.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\CrashRpt1402.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\crashrpt_lang.ini"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
Source: "X:\3rdParty.x64\bin\CrashSender1402.exe"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
Source: "{#VCInstallDir}\redist\x64\Microsoft.VC100.CRT\*.dll"; DestDir: "{app}\bin"; Check: Is64BitInstallMode
|
||||
|
||||
Source: "X:\install\msvc100\FGRun\bin\fgrun.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion ; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "X:\install\msvc100\FGRun\share\locale\*"; DestDir: "{app}\bin\Win32\locale"; Flags: ignoreversion recursesubdirs; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
|
||||
Source: "X:\install\msvc100-64\FGRun\bin\fgrun.exe"; DestDir: "{app}\bin\Win64"; Flags: ignoreversion skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "X:\install\msvc100-64\FGRun\share\locale\*"; DestDir: "{app}\bin\Win64\locale"; Flags: ignoreversion recursesubdirs skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
Source: "X:\3rdParty.x64\bin\*.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
Source: "{#VCInstallDir}\redist\x86\Microsoft.VC100.CRT\*.dll"; DestDir: "{app}\bin\Win32"
|
||||
Source: "{#VCInstallDir}\redist\x64\Microsoft.VC100.CRT\*.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "X:\3rdParty\bin\vcredist_x86.exe"; DestDir: "{app}\bin\Win32"; Flags: skipifsourcedoesntexist
|
||||
Source: "X:\3rdParty.x64\bin\vcredist_x64.exe"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
Source: "X:\3rdParty\bin\oalinst.exe"; DestDir: "{app}\bin\Win32"; Flags: ignoreversion skipifsourcedoesntexist
|
||||
; 32/64 bits install
|
||||
;NOTE: FGPanel has no 64 bits equivalent, so we are using the 32 bits binary for 32&64 bits OS
|
||||
Source: "X:\install\msvc100\FlightGear\bin\fgpanel.exe"; DestDir: "{app}\bin"; Flags: ignoreversion
|
||||
Source: "X:\install\msvc100\FlightGear\share\flightgear\positions.txt"; DestDir: "{app}\share\flightgear"
|
||||
Source: "X:\install\msvc100\FlightGear\share\flightgear\special_frequencies.txt"; DestDir: "{app}\share\flightgear"
|
||||
Source: "X:\3rdParty\bin\oalinst.exe"; DestDir: "{app}\bin"; Flags: ignoreversion skipifsourcedoesntexist
|
||||
|
||||
; NOTE: tar.gz file uses name 'fgdata', to avoid renaming it, look for both names.
|
||||
; assuming no setup has both names and hence we don't package twice :)
|
||||
Source: "X:\data\*.*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs skipifsourcedoesntexist
|
||||
Source: "X:\fgdata\*.*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs skipifsourcedoesntexist
|
||||
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGInstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
; 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_ogr.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode
|
||||
Source: "{#OSGPluginsDir}\osgdb_gdal.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
|
||||
|
||||
Source: "{#OSGInstallDir}\bin\ot12-OpenThreads.dll"; DestDir: "{app}\bin\Win32"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
|
||||
Source: "{#OSGPluginsDir}\osgdb_ac.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_osg.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_osga.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_3ds.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_mdl.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_jpeg.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_rgb.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_png.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_dds.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_txf.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_freetype.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osg.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osganimation.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgfx.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgmanipulator.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgparticle.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgshadow.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgsim.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgterrain.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgtext.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_serializers_osgvolume.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_deprecated_osg.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Source: "{#OSGPluginsDir}\osgdb_deprecated_osgparticle.dll"; DestDir: "{app}\bin\Win32\osgPlugins-{#OSGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
Source: "{#OSG64InstallDir}\bin\ot12-OpenThreads.dll"; DestDir: "{app}\bin\Win64"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
Source: "{#OSG64PluginsDir}\osgdb_ac.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_osg.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_osga.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_3ds.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_mdl.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_jpeg.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_rgb.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_png.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_dds.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_txf.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_freetype.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osg.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osganimation.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgfx.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgmanipulator.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgparticle.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgshadow.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgsim.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgterrain.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgtext.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_serializers_osgvolume.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_deprecated_osg.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
Source: "{#OSG64PluginsDir}\osgdb_deprecated_osgparticle.dll"; DestDir: "{app}\bin\Win64\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
; 64 bits install
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osg.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgDB.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgGA.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgParticle.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgText.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgUtil.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgViewer.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgSim.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\osg{#OSGSoNumber}-osgFX.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64InstallDir}\bin\ot{#OTSoNumber}-OpenThreads.dll"; DestDir: "{app}\bin"; Flags: skipifsourcedoesntexist; 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_ogr.dll"; DestDir: "{app}\bin\osgPlugins-{#OSGVersion}"; Flags: skipifsourcedoesntexist; Check: Is64BitInstallMode
|
||||
Source: "{#OSG64PluginsDir}\osgdb_gdal.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
|
||||
|
||||
[Dirs]
|
||||
; Make the user installable scenery directory
|
||||
Name: "{app}\scenery"; Permissions: everyone-modify
|
||||
Name: "{code:TerrasyncDir}"; Permissions: everyone-modify
|
||||
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'))
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\FlightGear Launcher"; Filename: "{app}\bin\Win32\fgrun.exe"; WorkingDir: "{app}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Name: "{group}\FlightGear Launcher"; Filename: "{app}\bin\Win64\fgrun.exe"; WorkingDir: "{app}"; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
; Name: "{group}\FlightGear"; Filename: "{app}\bin\Win32\fgfs.exe"; Parameters: "--fg-root=."; WorkingDir: "{app}";
|
||||
Name: "{userdesktop}\FlightGear {#FGVersion}"; Filename: "{app}\bin\fgrun.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
|
||||
Name: "{group}\FlightGear Launcher"; Filename: "{app}\bin\fgrun.exe"; WorkingDir: "{app}";
|
||||
Name: "{group}\FlightGear Manual"; Filename: "{app}\data\Docs\getstart.pdf"
|
||||
Name: "{group}\FlightGear Documentation"; Filename: "{app}\data\Docs\index.html"
|
||||
Name: "{group}\Flightgear Wiki"; Filename: "http://wiki.flightgear.org"
|
||||
Name: "{userdesktop}\FlightGear {#FGVersion}"; Filename: "{app}\bin\Win32\fgrun.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
Name: "{userdesktop}\FlightGear {#FGVersion}"; Filename: "{app}\bin\Win64\fgrun.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
Name: "{group}\Tools\Install & Uninstall Scenery"; Filename: "{app}\bin\Win32\fgadmin.exe"; WorkingDir: "{app}"
|
||||
Name: "{group}\Tools\TerraSync"; Filename: "{app}\bin\Win32\terrasync.exe"; Parameters: "-S -p 5505 -d ""{app}\terrasync"""; WorkingDir: "{app}"
|
||||
Name: "{group}\Tools\Install & Uninstall Scenery"; Filename: "{app}\bin\fgadmin.exe"; WorkingDir: "{app}"
|
||||
Name: "{group}\Tools\TerraSync"; Filename: "{app}\bin\terrasync.exe"; Parameters: "-S -p 5505 -d ""{userdocs}\FlightGear\TerraSync"""; WorkingDir: "{app}"
|
||||
Name: "{group}\Tools\Uninstall FlightGear"; Filename: "{uninstallexe}"
|
||||
|
||||
Name: "{group}\Tools\js_demo"; Filename: "{app}\bin\Win32\js_demo.exe"
|
||||
Name: "{group}\Tools\fgjs"; Filename: "cmd"; Parameters: "/k fgjs.exe ""--fg-root={app}\data"""; WorkingDir: "{app}\bin\Win32";
|
||||
Name: "{group}\Tools\GPSsmooth"; Filename: "cmd"; Parameters: "/k ""{app}\bin\Win32\GPSsmooth.exe"" -h"; WorkingDir: "{app}\bin\Win32";
|
||||
Name: "{group}\Tools\UGsmooth"; Filename: "cmd"; Parameters: "/k ""{app}\bin\Win32\UGsmooth.exe"" -h"; WorkingDir: "{app}\bin\Win32";
|
||||
Name: "{group}\Tools\MIDGsmooth"; Filename: "cmd"; Parameters: "/k ""{app}\bin\Win32\MIDGsmooth.exe"" -h"; WorkingDir: "{app}\bin\Win32";
|
||||
Name: "{group}\Tools\metar"; Filename: "cmd"; Parameters: "/k ""{app}\bin\Win32\metar.exe"" -h"; WorkingDir: "{app}\bin\Win32";
|
||||
Name: "{group}\Tools\yasim"; Filename: "cmd"; Parameters: "/k ""{app}\bin\Win32\yasim.exe"" -h"; WorkingDir: "{app}\bin\Win32";
|
||||
Name: "{group}\Tools\fgpanel"; Filename: "cmd"; Parameters: "/k ""{app}\bin\Win32\fgpanel.exe"" -h"; WorkingDir: "{app}\bin\Win32";
|
||||
|
||||
Name: "{group}\Tools\js_demo"; Filename: "{app}\bin\js_demo.exe"
|
||||
Name: "{group}\Tools\fgjs"; Filename: "cmd"; Parameters: "/k fgjs.exe ""--fg-root={app}\data"""; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\GPSsmooth"; Filename: "cmd"; Parameters: "/k ""{app}\bin\GPSsmooth.exe"" -h"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\UGsmooth"; Filename: "cmd"; Parameters: "/k ""{app}\bin\UGsmooth.exe"" -h"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\MIDGsmooth"; Filename: "cmd"; Parameters: "/k ""{app}\bin\MIDGsmooth.exe"" -h"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\metar"; Filename: "cmd"; Parameters: "/k ""{app}\bin\metar.exe"" -h"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\yasim"; Filename: "cmd"; Parameters: "/k ""{app}\bin\yasim.exe"" -h"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\fgpanel"; Filename: "cmd"; Parameters: "/k ""{app}\bin\fgpanel.exe"" -h"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\FGCom"; Filename: "{app}\bin\fgcom.exe"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\FGCom-testing"; Filename: "{app}\bin\fgcom.exe"; Parameters: "-f910"; WorkingDir: "{app}\bin"
|
||||
Name: "{group}\Tools\Explore Documentation Folder"; Filename: "{app}\data\Docs"
|
||||
|
||||
; For running flightgear directly
|
||||
; Name: "{userdesktop}\FlightGear v2.0.0"; Filename: "{app}\bin\Win32\fgfs.exe"; Parameters: "--fg-root=."; WorkingDir: "{app}"; Tasks: desktopicon
|
||||
|
||||
[Run]
|
||||
filename: "cmd.exe"; WorkingDir: "{app}\bin\Win32"; Parameters: "/C del msvc*.dll"; Check: FileExists(ExpandConstant('{app}\bin\Win32\vcredist_x86.exe'))
|
||||
filename: "cmd.exe"; WorkingDir: "{app}\bin\Win64"; Parameters: "/C del msvc*.dll"; Check: FileExists(ExpandConstant('{app}\bin\Win64\vcredist_x64.exe'))
|
||||
filename: "{app}\bin\Win32\vcredist_x86.exe"; WorkingDir: "{app}\bin\Win32"; Parameters: "/passive /norestart"; Description: "Installing MS Visual C++ runtime components"; Check: FileExists(ExpandConstant('{app}\bin\Win32\vcredist_x86.exe'))
|
||||
filename: "{app}\bin\Win64\vcredist_x64.exe"; WorkingDir: "{app}\bin\Win64"; Parameters: "/passive /norestart"; Description: "Installing MS Visual C++ runtime components"; Check: Is64BitInstallMode and not IsTaskSelected('force32') and FileExists(ExpandConstant('{app}\bin\Win64\vcredist_x64.exe'))
|
||||
filename: "{app}\bin\Win32\oalinst.exe"; WorkingDir: "{app}\bin\Win32"; Description: "Installing OpenAL"; Check: IsTaskSelected('insoal') and FileExists(ExpandConstant('{app}\bin\Win32\oalinst.exe'))
|
||||
|
||||
filename: "cmd.exe"; WorkingDir: "{app}\bin"; Parameters: "/C del msvc*.dll"; Check: FileExists(ExpandConstant('{app}\bin\vcredist_x86.exe'))
|
||||
filename: "cmd.exe"; WorkingDir: "{app}\bin"; Parameters: "/C del msvc*.dll"; Check: FileExists(ExpandConstant('{app}\bin\vcredist_x64.exe'))
|
||||
filename: "{app}\bin\vcredist_x86.exe"; WorkingDir: "{app}\bin"; Parameters: "/passive /norestart"; Description: "Installing MS Visual C++ runtime components"; Check: FileExists(ExpandConstant('{app}\bin\vcredist_x86.exe'))
|
||||
filename: "{app}\bin\vcredist_x64.exe"; WorkingDir: "{app}\bin"; Parameters: "/passive /norestart"; Description: "Installing MS Visual C++ runtime components"; Check: Is64BitInstallMode and FileExists(ExpandConstant('{app}\bin\vcredist_x64.exe'))
|
||||
filename: "{app}\bin\oalinst.exe"; WorkingDir: "{app}\bin"; Description: "Installing OpenAL"; Check: IsTaskSelected('insoal') and FileExists(ExpandConstant('{app}\bin\oalinst.exe'))
|
||||
; Put installation directory into the fgrun.prefs
|
||||
filename: "{app}\bin\Win32\fgrun.exe"; WorkingDir: "{app}\bin\Win32"; Parameters: "--silent ""--fg-exe={app}\bin\Win32\fgfs.exe"" ""--ts-exe={app}\bin\Win32\terrasync.exe"" ""--fg-root={app}\data"" ""--fg-scenery={app}\data\Scenery;{app}\scenery;{code:TerrasyncDir}"" --ts-dir=3 --version={#FGVersion}"; Check: not Is64BitInstallMode or IsTaskSelected('force32')
|
||||
filename: "{app}\bin\Win64\fgrun.exe"; WorkingDir: "{app}\bin\Win64"; Parameters: "--silent ""--fg-exe={app}\bin\Win64\fgfs.exe"" ""--ts-exe={app}\bin\Win32\terrasync.exe"" ""--fg-root={app}\data"" ""--fg-scenery={app}\data\Scenery;{app}\scenery;{code:TerrasyncDir}"" --ts-dir=3 --version={#FGVersion}"; Check: Is64BitInstallMode and not IsTaskSelected('force32')
|
||||
|
||||
filename: "{app}\bin\fgrun.exe"; WorkingDir: "{app}\bin"; Parameters: "--silent ""--fg-exe={app}\bin\fgfs.exe"" ""--fg-root={app}\data"" ""--fg-scenery={userdocs}\FlightGear\Custom Scenery;{app}\data\Scenery;{userdocs}\FlightGear\TerraSync"" ""--fg-aircraft={userdocs}\FlightGear\Aircraft"" ""--terrasync-dir={userdocs}\FlightGear\TerraSync"" --version={#FGVersion}"
|
||||
; Put installation and source directories into the fgadmin.prefs
|
||||
filename: "{app}\bin\Win32\fgadmin.exe"; WorkingDir: "{app}\bin\Win32"; Parameters: "--silent ""--install-source={src}\..\Scenery"" ""--scenery-dest={app}\scenery"""
|
||||
|
||||
[Registry]
|
||||
Root: HKLM; Subkey: "Software\flightgear.org"; ValueType: string; ValueName: "TerrasyncDir"; ValueData: "{code:TerrasyncDir}"
|
||||
filename: "{app}\bin\fgadmin.exe"; WorkingDir: "{app}\bin"; Parameters: "--silent ""--install-source={src}\..\Scenery"" ""--scenery-dest={userdocs}\FlightGear\Custom Scenery"""
|
||||
|
||||
[Code]
|
||||
var
|
||||
TerrasyncDirPage: TInputDirWizardPage;
|
||||
|
||||
procedure URLLabelOnClick(Sender: TObject);
|
||||
var
|
||||
ErrorCode: Integer;
|
||||
@@ -247,44 +262,12 @@ begin
|
||||
URLLabel.Left := ScaleX(20);
|
||||
end;
|
||||
|
||||
procedure InitializeWizard();
|
||||
begin
|
||||
TerrasyncDirPage := CreateInputDirPage(wpSelectDir,
|
||||
'Select Terrasync Directory', 'Where should scenery downloaded by Terrasync be put?',
|
||||
'Select the folder in which Terrasync would download additional scenery, then click Next.',
|
||||
False, 'Terrasync Folder');
|
||||
TerrasyncDirPage.Add('');
|
||||
|
||||
CreateURLLabel(WizardForm, WizardForm.CancelButton);
|
||||
end;
|
||||
|
||||
function NextButtonClick(CurPageID: Integer): Boolean;
|
||||
begin
|
||||
if CurPageID = wpSelectDir then begin
|
||||
TerrasyncDirPage.Values[0] := GetPreviousData( 'TerrasyncDir', ExpandConstant('{reg:HKLM\Software\flightgear.org,TerrasyncDir|{app}\terrasync}') );
|
||||
end;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function TerrasyncDir(Param: String): String;
|
||||
begin
|
||||
Result := TerrasyncDirPage.Values[0];
|
||||
end;
|
||||
|
||||
procedure RegisterPreviousData(PreviousDataKey: Integer);
|
||||
begin
|
||||
{ Store the settings so we can restore them next time }
|
||||
SetPreviousData(PreviousDataKey, 'TerrasyncDir', TerrasyncDirPage.Values[0]);
|
||||
end;
|
||||
|
||||
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
|
||||
var
|
||||
S: String;
|
||||
begin
|
||||
S := '';
|
||||
S := S + MemoDirInfo + NewLine + NewLine;
|
||||
S := S + 'Terrasync folder:' + NewLine;
|
||||
S := S + Space + TerrasyncDirPage.Values[0] + NewLine + NewLine;
|
||||
S := S + MemoGroupInfo + NewLine + NewLine;
|
||||
S := S + MemoTasksInfo + NewLine + NewLine;
|
||||
|
||||
|
||||
454
catalogFilenames.py
Normal file
454
catalogFilenames.py
Normal file
@@ -0,0 +1,454 @@
|
||||
aircraft = {
|
||||
"14bis":"14bis_20120506.zip",
|
||||
"21":"21_20101206.zip",
|
||||
"707":"707_20140103.zip",
|
||||
"717":"717_20140116.zip",
|
||||
"727-230":"727-230_20120714.zip",
|
||||
"737-100":"737-100_20120506.zip",
|
||||
"737-200":"737-200_20120506.zip",
|
||||
"737-300":"737-300_20140116.zip",
|
||||
"737NG":"737NG_20140116.zip",
|
||||
"747-200":"747-200_2.1.zip",
|
||||
"747-400":"747-400_20140216.zip",
|
||||
"747":"747_20070714.zip",
|
||||
"757-200":"757-200_20140116.zip",
|
||||
"767-300":"767-300_20100100.zip",
|
||||
"777-200":"777-200_20111215.zip",
|
||||
"777":"777_20140216.zip",
|
||||
"787":"787_20140116.zip",
|
||||
"A-10":"A-10_20140116.zip",
|
||||
"A-26-Invader":"A-26-Invader_20130214.zip",
|
||||
"A-6E":"A-6E_20131204.zip",
|
||||
"A24-Viking":"A24-Viking_20120506.zip",
|
||||
"A300":"A300_20120717.zip",
|
||||
"A320-family":"A320-family_20140116.zip",
|
||||
"A340-600":"A340-600_20080400.zip",
|
||||
"A380":"A380_1.2.zip",
|
||||
"A6M2":"A6M2_20120717.zip",
|
||||
"AG-14":"AG-14_20130810.zip",
|
||||
"AN-225":"AN-225_20130823.zip",
|
||||
"ANT-20":"ANT-20_20120506.zip",
|
||||
"AR-234":"AR-234_20120821.zip",
|
||||
"ASK13":"ASK13_20100401.zip",
|
||||
"ASK21-MI":"ASK21-MI_20120506.zip",
|
||||
"ASK21":"ASK21_20070701.zip",
|
||||
"ATC-ML":"ATC-ML_20131014.zip",
|
||||
"ATC":"ATC_20120717.zip",
|
||||
"ATI-Resolution":"ATI-Resolution_0.0.zip",
|
||||
"ATR-72-500":"ATR-72-500_20120717.zip",
|
||||
"AVRO-IV-Triplane":"AVRO-IV-Triplane_20130805.zip",
|
||||
"Aero-Commander":"Aero-Commander_20130313.zip",
|
||||
"Aerocar":"Aerocar_20130805.zip",
|
||||
"Aerostar-700":"Aerostar-700_20120610.zip",
|
||||
"Aichi-D3A":"Aichi-D3A_20120506.zip",
|
||||
"AirCrane":"AirCrane_20131204.zip",
|
||||
"Airco-DH2":"Airco-DH2_20120506.zip",
|
||||
"Albatross":"Albatross_20130823.zip",
|
||||
"Allegro-2000":"Allegro-2000_20120506.zip",
|
||||
"Alouette-III":"Alouette-III_20131117.zip",
|
||||
"Alouette-II":"Alouette-II_20120506.zip",
|
||||
"Alphajet":"Alphajet_20130225.zip",
|
||||
"Antoinette":"Antoinette_20130220.zip",
|
||||
"Antonov-An-12":"Antonov-An-12_20131220.zip",
|
||||
"Arsenal-VG33":"Arsenal-VG33_0.1.zip",
|
||||
"Arup-S2":"Arup-S2_20120506.zip",
|
||||
"Avro-Arrow":"Avro-Arrow_20120506.zip",
|
||||
"Avro-Lancaster":"Avro-Lancaster_20120817.zip",
|
||||
"B-17":"B-17_20130706.zip",
|
||||
"B-1B":"B-1B_20130823.zip",
|
||||
"B-24-Liberator":"B-24-Liberator_20131227.zip",
|
||||
"B-25":"B-25_20130810.zip",
|
||||
"B-2":"B-2_20130823.zip",
|
||||
"B-36D-Peacemaker":"B-36D-Peacemaker_20120506.zip",
|
||||
"B-52F":"B-52F_20130823.zip",
|
||||
"BAC-TSR2":"BAC-TSR2_20120717.zip",
|
||||
"BAe-125":"BAe-125_20120305.zip",
|
||||
"BV-141":"BV-141_20131015.zip",
|
||||
"BV-170":"BV-170_20130411.zip",
|
||||
"Beechcraft-Staggerwing":"Beechcraft-Staggerwing_20130303.zip",
|
||||
"Bell-222X":"Bell-222X_20120508.zip",
|
||||
"Bell-P-39":"Bell-P-39_20120821.zip",
|
||||
"Bell-P-59":"Bell-P-59_20120817.zip",
|
||||
"Bell-X1":"Bell-X1_20120114.zip",
|
||||
"Bernard-HV220":"Bernard-HV220_20090506.zip",
|
||||
"Bleriot-SPAD-S.510":"Bleriot-SPAD-S.510_20131226.zip",
|
||||
"Boeing-247":"Boeing-247_20130903.zip",
|
||||
"Boeing314":"Boeing314_1.6.zip",
|
||||
"Bombardier-415":"Bombardier-415_20131203.zip",
|
||||
"Br-761":"Br-761_20130123.zip",
|
||||
"Brabazon":"Brabazon_20120821.zip",
|
||||
"Breda-B.Z.308":"Breda-B.Z.308_20130102.zip",
|
||||
"Breguet-XIX":"Breguet-XIX_20100829.zip",
|
||||
"Buccaneer":"Buccaneer_0.1.zip",
|
||||
"Bugatti":"Bugatti_20120524.zip",
|
||||
"Burnelli-CBY-3":"Burnelli-CBY-3_20120506.zip",
|
||||
"C-160-Transall":"C-160-Transall_20120905.zip",
|
||||
"C-2A":"C-2A_20120506.zip",
|
||||
"C130":"C130_20130810.zip",
|
||||
"C460":"C460_20130614.zip",
|
||||
"C561":"C561_20130614.zip",
|
||||
"C684":"C684_20131025.zip",
|
||||
"CRJ-200":"CRJ-200_2.zip",
|
||||
"CRJ700-family":"CRJ700-family_1.1.0.zip",
|
||||
"Campini-Caproni-N1":"Campini-Caproni-N1_20130115.zip",
|
||||
"CanberraBI8":"CanberraBI8_20101204.zip",
|
||||
"Cap10B":"Cap10B_20130824.zip",
|
||||
"Cap10C":"Cap10C_20131202.zip",
|
||||
"Caravelle":"Caravelle_20120506.zip",
|
||||
"Carreidas":"Carreidas_20131025.zip",
|
||||
"Caudron-G3":"Caudron-G3_20120506.zip",
|
||||
"Caudron-G4":"Caudron-G4_20120506.zip",
|
||||
"Cessna-208-Caravan":"Cessna-208-Caravan_20130301.zip",
|
||||
"Cessna-421-Golden-Eagle":"Cessna-421-Golden-Eagle_20120506.zip",
|
||||
"Cessna337":"Cessna337_v20120429.zip",
|
||||
"Citation-Bravo":"Citation-Bravo_20131025.zip",
|
||||
"CitationX":"CitationX_20131025.zip",
|
||||
"Citation":"Citation_20130305.zip",
|
||||
"Coanda-1910":"Coanda-1910_20130129.zip",
|
||||
"Commonwealth-Ca-12":"Commonwealth-Ca-12_20120817.zip",
|
||||
"ComperSwift":"ComperSwift_20120717.zip",
|
||||
"Concorde":"Concorde_2.11.zip",
|
||||
"Convair-XFY-1-Pogo":"Convair-XFY-1-Pogo_20120506.zip",
|
||||
"Cub":"Cub_20120508.zip",
|
||||
"Curtiss-Jenny":"Curtiss-Jenny_20120906.zip",
|
||||
"Curtiss-P40":"Curtiss-P40_20130221.zip",
|
||||
"D510":"D510_20130916.zip",
|
||||
"D520":"D520_20120506.zip",
|
||||
"DC-10-30":"DC-10-30_20140116.zip",
|
||||
"DG-101G":"DG-101G_2013-01-01.zip",
|
||||
"DH-106":"DH-106_20120506.zip",
|
||||
"DH-88":"DH-88_20131026.zip",
|
||||
"DH-89":"DH-89_20120905.zip",
|
||||
"DH-91":"DH-91_20120506.zip",
|
||||
"DO-228":"DO-228_20130824.zip",
|
||||
"DO-26":"DO-26_20100521.zip",
|
||||
"DO-335":"DO-335_20130216.zip",
|
||||
"DO-X":"DO-X_0.2.0.zip",
|
||||
"DR400-dauphin":"DR400-dauphin_20140105.zip",
|
||||
"DR400":"DR400_20131129.zip",
|
||||
"Dauphin":"Dauphin_20140109.zip",
|
||||
"Deperdussin":"Deperdussin_20101124.zip",
|
||||
"DerKleineUhu":"DerKleineUhu_0.1.zip",
|
||||
"Deuche":"Deuche_20120506.zip",
|
||||
"Diamond-Da40":"Diamond-Da40_20130326.zip",
|
||||
"Diamond-Da42":"Diamond-Da42_20120506.zip",
|
||||
"Douglas-Dc3":"Douglas-Dc3_20130107.zip",
|
||||
"Douglas-Dolphin":"Douglas-Dolphin_20131029.zip",
|
||||
"Dragonfly":"Dragonfly_1.0.zip",
|
||||
"Dromader":"Dromader_31-02-2011.zip",
|
||||
"E-2C":"E-2C_20131014.zip",
|
||||
"E3B":"E3B_20130313.zip",
|
||||
"Etrich-Taube":"Etrich-Taube_20120207.zip",
|
||||
"F-106-dart":"F-106-dart_20130808.zip",
|
||||
"F-117":"F-117_20130317.zip",
|
||||
"F-35B":"F-35B_20120717.zip",
|
||||
"F-86":"F-86_20131216.zip",
|
||||
"F-8E-Crusader":"F-8E-Crusader_20130810.zip",
|
||||
"F4U":"F4U_20120717.zip",
|
||||
"F6F-Hellcat":"F6F-Hellcat_20120821.zip",
|
||||
"F7F-Tigercat":"F7F-Tigercat_20130107.zip",
|
||||
"F80C":"F80C_20120717.zip",
|
||||
"FK9MK2":"FK9MK2_20120506.zip",
|
||||
"Fairchild-C119":"Fairchild-C119_20120817.zip",
|
||||
"Fairchild-Metroliner":"Fairchild-Metroliner_20110321.zip",
|
||||
"Fairey-Gannet":"Fairey-Gannet_20131122.zip",
|
||||
"Falcon-50":"Falcon-50_20140116.zip",
|
||||
"Farman-III":"Farman-III_20131014.zip",
|
||||
"Farman-IV":"Farman-IV_20130213.zip",
|
||||
"Focke-Wulf-F19-ente":"Focke-Wulf-F19-ente_20130103.zip",
|
||||
"Fokker-Eindecker-EIII":"Fokker-Eindecker-EIII_20110301.zip",
|
||||
"Fokker-S-11":"Fokker-S-11_20120506.zip",
|
||||
"Fokker-Spin":"Fokker-Spin_20130805.zip",
|
||||
"Ford-Trimotor":"Ford-Trimotor_20120506.zip",
|
||||
"Fouga-Magister":"Fouga-Magister_20120501.zip",
|
||||
"Fw200":"Fw200_20120506.zip",
|
||||
"Fw61":"Fw61_20091025.zip",
|
||||
"G-164":"G-164_20131014.zip",
|
||||
"Gee-Bee":"Gee-Bee_20130711.zip",
|
||||
"Gloster-Meteor":"Gloster-Meteor_20120821.zip",
|
||||
"Gloster-Whittle":"Gloster-Whittle_20120821.zip",
|
||||
"Gotha-G-V":"Gotha-G-V_20131007.zip",
|
||||
"Grob-Astir":"Grob-Astir_20131209.zip",
|
||||
"Grob-G109":"Grob-G109_20131104.zip",
|
||||
"Grob-G115":"Grob-G115_20131209.zip",
|
||||
"Grob-Gf200":"Grob-Gf200_20140102.zip",
|
||||
"H-21C-Shawnee":"H-21C-Shawnee_20120717.zip",
|
||||
"H1-Racer":"H1-Racer_20130531.zip",
|
||||
"H4-Hercules":"H4-Hercules_1.3.zip",
|
||||
"HM-14":"HM-14_20120506.zip",
|
||||
"HS-P-75":"HS-P-75_20130912.zip",
|
||||
"HUP-Retriever":"HUP-Retriever_20120717.zip",
|
||||
"Handley-Page-Halifax":"Handley-Page-Halifax_20120506.zip",
|
||||
"Hansajet":"Hansajet_0.1.zip",
|
||||
"Hawker-Siddeley-Nimrod":"Hawker-Siddeley-Nimrod_20120506.zip",
|
||||
"He-111":"He-111_20131022.zip",
|
||||
"He162":"He162_20131022.zip",
|
||||
"Heinkel-He-111":"Heinkel-He-111_20120817.zip",
|
||||
"Heinkel-He-177":"Heinkel-He-177_20130805.zip",
|
||||
"Heinkel-He-178":"Heinkel-He-178_20101128.zip",
|
||||
"Heinkel-He-280":"Heinkel-He-280_20120825.zip",
|
||||
"HondaJet":"HondaJet_20130620.zip",
|
||||
"Hornet":"Hornet_20101110.zip",
|
||||
"Horsa":"Horsa_20131022.zip",
|
||||
"Horten-Ho-IX":"Horten-Ho-IX_20130208.zip",
|
||||
"Hughes-XF11":"Hughes-XF11_20120506.zip",
|
||||
"Hunter":"Hunter_20131025.zip",
|
||||
"Hurricane":"Hurricane_20130823.zip",
|
||||
"IAR80":"IAR80_20120912.zip",
|
||||
"IL-2":"IL-2_20110311.zip",
|
||||
"JA37":"JA37_1.21.zip",
|
||||
"JAS39-Gripen":"JAS39-Gripen_20120506.zip",
|
||||
"JT-5B":"JT-5B_20130330.zip",
|
||||
"Jaguar":"Jaguar_4.81.zip",
|
||||
"Ju-87":"Ju-87_20130712.zip",
|
||||
"Ju-88":"Ju-88_20120717.zip",
|
||||
"Junkers-F13":"Junkers-F13_20130516.zip",
|
||||
"Junkers-G.38ce":"Junkers-G.38ce_20120506.zip",
|
||||
"Junkers-W34":"Junkers-W34_20130713.zip",
|
||||
"K-7":"K-7_20120506.zip",
|
||||
"K5Y1":"K5Y1_0.1.zip",
|
||||
"KC135":"KC135_20131022.zip",
|
||||
"KM":"KM_20100603.zip",
|
||||
"Ka-50":"Ka-50_20130418.zip",
|
||||
"Katana":"Katana_20130322.zip",
|
||||
"Ki-84":"Ki-84_20120717.zip",
|
||||
"L-1011-500":"L-1011-500_20120506.zip",
|
||||
"LATE-29":"LATE-29_20120506.zip",
|
||||
"La-5":"La-5_20120506.zip",
|
||||
"Lancair-235":"Lancair-235_20130810.zip",
|
||||
"Late-631":"Late-631_20120829.zip",
|
||||
"Leduc-022":"Leduc-022_20120821.zip",
|
||||
"Lightning":"Lightning_20140116.zip",
|
||||
"Lionceau":"Lionceau_20130512.zip",
|
||||
"Lockheed-Martin-FA-22A-Raptor":"Lockheed-Martin-FA-22A-Raptor_20131022.zip",
|
||||
"Lockheed-NF104A":"Lockheed-NF104A_20110316.zip",
|
||||
"Lockheed-NF104":"Lockheed-NF104_20110604.zip",
|
||||
"Lockheed-P38":"Lockheed-P38_20131202.zip",
|
||||
"Lockheed-SR71":"Lockheed-SR71_20120507.zip",
|
||||
"Lockheed-U-2S":"Lockheed-U-2S_20131104.zip",
|
||||
"Lockheed-Vega":"Lockheed-Vega_20100324.zip",
|
||||
"Lockheed1049":"Lockheed1049_1.6.zip",
|
||||
"Lockheed1049h":"Lockheed1049h_1.0.zip",
|
||||
"Long-EZ":"Long-EZ_20120506.zip",
|
||||
"Lynx-WG13":"Lynx-WG13_20120717.zip",
|
||||
"M-XE":"M-XE_20120506.zip",
|
||||
"MB326":"MB326_20131022.zip",
|
||||
"MD11":"MD11_20121126.zip",
|
||||
"ME-209-V1":"ME-209-V1_20130416.zip",
|
||||
"ME-262HGIII":"ME-262HGIII_20120506.zip",
|
||||
"ME-262":"ME-262_20120821.zip",
|
||||
"MPCarrier":"MPCarrier_0.1.zip",
|
||||
"MRJ":"MRJ_20090817.zip",
|
||||
"MS-406":"MS-406_20130806.zip",
|
||||
"Macchi-Castoldi-MC72":"Macchi-Castoldi-MC72_20131016.zip",
|
||||
"Macchi-M33":"Macchi-M33_20120506.zip",
|
||||
"Martin-Baker-MB5":"Martin-Baker-MB5_20120813.zip",
|
||||
"Messerschmitt-BF110":"Messerschmitt-BF110_20130329.zip",
|
||||
"Messerschmitt-Libelle":"Messerschmitt-Libelle_20130511.zip",
|
||||
"Messerschmitt-P1101":"Messerschmitt-P1101_20130315.zip",
|
||||
"MiG-15":"MiG-15_20121210.zip",
|
||||
"MiG-21bis":"MiG-21bis_20120717.zip",
|
||||
"Mig-29":"Mig-29_20140116.zip",
|
||||
"Mil-Mi-12":"Mil-Mi-12_20120216.zip",
|
||||
"Mil-Mi-24":"Mil-Mi-24_20140116.zip",
|
||||
"Mirage-2000":"Mirage-2000_20131025.zip",
|
||||
"MirageIII":"MirageIII_20131008.zip",
|
||||
"MirageIV":"MirageIV_20131008.zip",
|
||||
"Mirage_F1":"Mirage_F1_20131022.zip",
|
||||
"Nakajima-B5N":"Nakajima-B5N_20120506.zip",
|
||||
"Nieuport-11":"Nieuport-11_20130729.zip",
|
||||
"Noratlas":"Noratlas_20120717.zip",
|
||||
"Nord-2502":"Nord-2502_20130605.zip",
|
||||
"Nordstern":"Nordstern_20120813.zip",
|
||||
"North-American-T28D-Trojan":"North-American-T28D-Trojan_20140113.zip",
|
||||
"North-American-T6-Texan":"North-American-T6-Texan_20130915.zip",
|
||||
"Northrop-P61":"Northrop-P61_20130107.zip",
|
||||
"Northrop-xb35":"Northrop-xb35_20130823.zip",
|
||||
"OH-1":"OH-1_0.1.zip",
|
||||
"OV10":"OV10_20140116.zip",
|
||||
"P-38-Lightning":"P-38-Lightning_20120717.zip",
|
||||
"P180":"P180_20131022.zip",
|
||||
"P47":"P47_20131022.zip",
|
||||
"PBY-Catalina":"PBY-Catalina_20140107.zip",
|
||||
"PC-12":"PC-12_20121208.zip",
|
||||
"PC-21":"PC-21_20130810.zip",
|
||||
"PC-6":"PC-6_20130810.zip",
|
||||
"PC-9M":"PC-9M_20131025.zip",
|
||||
"PaperAirplane":"PaperAirplane_20101229.zip",
|
||||
"Percival-Mew-Gull":"Percival-Mew-Gull_20130919.zip",
|
||||
"Piaggio-Pegna-Pc-7":"Piaggio-Pegna-Pc-7_20131018.zip",
|
||||
"Pioneer-200":"Pioneer-200_20120506.zip",
|
||||
"Piper-PA-18":"Piper-PA-18_20120506.zip",
|
||||
"Piper-PA-32":"Piper-PA-32_20120506.zip",
|
||||
"Polikarpov-I16":"Polikarpov-I16_20120506.zip",
|
||||
"Pond-Racer":"Pond-Racer_20120506.zip",
|
||||
"Potez-630":"Potez-630_20100313.zip",
|
||||
"Pterodactyl":"Pterodactyl_20100502.zip",
|
||||
"Quickie":"Quickie_20120506.zip",
|
||||
"R22":"R22_20120903.zip",
|
||||
"R44":"R44_20130426.zip",
|
||||
"RAF-S-E-5":"RAF-S-E-5_20120506.zip",
|
||||
"RV-6A":"RV-6A_0.1.zip",
|
||||
"Rascal":"Rascal_0.1.zip",
|
||||
"Ryan-Navion":"Ryan-Navion_20130103.zip",
|
||||
"Ryan-PT22":"Ryan-PT22_20110503.zip",
|
||||
"Ryan-SoSL":"Ryan-SoSL_20120325.zip",
|
||||
"S-51-Dragonfly":"S-51-Dragonfly_20120717.zip",
|
||||
"SM-55":"SM-55_20120506.zip",
|
||||
"SPAD-VII":"SPAD-VII_20120506.zip",
|
||||
"SR71-BlackBird":"SR71-BlackBird_20110614.zip",
|
||||
"SU-37":"SU-37_20130823.zip",
|
||||
"SaabJ35Draken":"SaabJ35Draken_20071217.zip",
|
||||
"SaabJ35F":"SaabJ35F_0.9.1.zip",
|
||||
"Saunders-Roe-Princess":"Saunders-Roe-Princess_1.3.zip",
|
||||
"SeaVixen":"SeaVixen_20130524.zip",
|
||||
"SenecaII":"SenecaII_1.0.zip",
|
||||
"Short-Stirling":"Short-Stirling_20120506.zip",
|
||||
"Short_Empire":"Short_Empire_20140113.zip",
|
||||
"Sikorsky-76C":"Sikorsky-76C_20120723.zip",
|
||||
"Sikorsky-S38":"Sikorsky-S38_20120506.zip",
|
||||
"Sikorsky-S58":"Sikorsky-S58_20131213.zip",
|
||||
"Skyranger":"Skyranger_20131205.zip",
|
||||
"Skyvan":"Skyvan_20131127.zip",
|
||||
"Socata-ST10":"Socata-ST10_20130107.zip",
|
||||
"SpaceShip-One":"SpaceShip-One_20120506.zip",
|
||||
"Spitfire":"Spitfire_20130310.zip",
|
||||
"Stampe-SV4":"Stampe-SV4_20121113.zip",
|
||||
"Starship":"Starship_20130923.zip",
|
||||
"Stearman":"Stearman_20130817.zip",
|
||||
"Stieglitz":"Stieglitz_20091025.zip",
|
||||
"Stiletto":"Stiletto_20110917.zip",
|
||||
"Storch":"Storch_20130313.zip",
|
||||
"Submarine_Scout":"Submarine_Scout_20130115.zip",
|
||||
"Super-Etendard":"Super-Etendard_20131008.zip",
|
||||
"Super-Frelon":"Super-Frelon_20120506.zip",
|
||||
"Supermarine-S.6B":"Supermarine-S.6B_20130312.zip",
|
||||
"Superwal":"Superwal_20100330.zip",
|
||||
"T-4":"T-4_20130620.zip",
|
||||
"T-50":"T-50_20120717.zip",
|
||||
"T37":"T37_20101230.zip",
|
||||
"T38":"T38_20110911.zip",
|
||||
"TBM-Avenger":"TBM-Avenger_20120506.zip",
|
||||
"TU-114":"TU-114_20120717.zip",
|
||||
"TU-95":"TU-95_20120506.zip",
|
||||
"Tecnam-P92":"Tecnam-P92_20120506.zip",
|
||||
"Tigre":"Tigre_20130823.zip",
|
||||
"Tu-134":"Tu-134_20131220.zip",
|
||||
"UH-1":"UH-1_20130810.zip",
|
||||
"UH-60":"UH-60_20120718.zip",
|
||||
"V22-Osprey":"V22-Osprey_0.2.zip",
|
||||
"VMX22-Osprey":"VMX22-Osprey_0.59-28.08.2010.zip",
|
||||
"Velocity-XL":"Velocity-XL_20120506.zip",
|
||||
"Vickers-Vimy":"Vickers-Vimy_20120506.zip",
|
||||
"Vostok-1":"Vostok-1_20120717.zip",
|
||||
"Westland-Whirlwind":"Westland-Whirlwind_20130930.zip",
|
||||
"X15":"X15_20101128.zip",
|
||||
"XB-70":"XB-70_20120730.zip",
|
||||
"YF-23":"YF-23_20120717.zip",
|
||||
"YS-11":"YS-11_0.1.zip",
|
||||
"Yak-18T":"Yak-18T_20121126.zip",
|
||||
"Yak-36":"Yak-36_20121225.zip",
|
||||
"YardStik":"YardStik_0.0.zip",
|
||||
"ZF_Navy_free_balloon":"ZF_Navy_free_balloon_20130107.zip",
|
||||
"ZLT-NT":"ZLT-NT_20130923.zip",
|
||||
"ZivkoEdge":"ZivkoEdge_0.2.zip",
|
||||
"Zlin-50lx":"Zlin-50lx_20131125.zip",
|
||||
"a4":"a4_20130706.zip",
|
||||
"airwaveXtreme150":"airwaveXtreme150_July-2013.zip",
|
||||
"an2":"an2_20131014.zip",
|
||||
"apache":"apache_20110119.zip",
|
||||
"as332":"as332_20091217.zip",
|
||||
"asw20":"asw20_July-2013.zip",
|
||||
"b1900d":"b1900d_20130911.zip",
|
||||
"b26":"b26_20130620.zip",
|
||||
"b29":"b29_20130401.zip",
|
||||
"beaufighter":"beaufighter_20120717.zip",
|
||||
"beech99":"beech99_20081221.zip",
|
||||
"bf109":"bf109_20130615.zip",
|
||||
"bleriot-XI":"bleriot-XI_20130715.zip",
|
||||
"bluebird":"bluebird_10.4.zip",
|
||||
"bo105":"bo105_20140116.zip",
|
||||
"bocian":"bocian_20131104.zip",
|
||||
"c150":"c150_20140116.zip",
|
||||
"c172p":"c172p_20140112.zip",
|
||||
"c172r":"c172r_20130209.zip",
|
||||
"c182":"c182_20130209.zip",
|
||||
"c182rg":"c182rg_20130209.zip",
|
||||
"c310":"c310_20130209.zip",
|
||||
"c310u3a":"c310u3a_20130209.zip",
|
||||
"ch47":"ch47_0.1.zip",
|
||||
"ch53e":"ch53e_0.1.zip",
|
||||
"colditz":"colditz_20090126.zip",
|
||||
"couzinet70":"couzinet70_20120506.zip",
|
||||
"cri-cri":"cri-cri_20080206.zip",
|
||||
"dc2":"dc2_20130209.zip",
|
||||
"dc3":"dc3_20110905.zip",
|
||||
"dc6":"dc6_20131014.zip",
|
||||
"dc8-63":"dc8-63_0.02.zip",
|
||||
"dc8-73":"dc8-73_0.1.zip",
|
||||
"dhc1":"dhc1_20120506.zip",
|
||||
"dhc2":"dhc2_20130315.zip",
|
||||
"dhc3":"dhc3_20120506.zip",
|
||||
"dhc4":"dhc4_20101230.zip",
|
||||
"dhc6":"dhc6_20130202.zip",
|
||||
"dhc8":"dhc8_20120714.zip",
|
||||
"eastbourne_mono":"eastbourne_mono_20130805.zip",
|
||||
"ec130":"ec130_20140117.zip",
|
||||
"ec135":"ec135_0.6.zip",
|
||||
"ercoupe":"ercoupe_20130313.zip",
|
||||
"eurofighter":"eurofighter_1.4.zip",
|
||||
"f-14b":"f-14b_20121124.zip",
|
||||
"f15c":"f15c_20101022.zip",
|
||||
"f16":"f16_20120812.zip",
|
||||
"f18":"f18_20101026.zip",
|
||||
"fa223":"fa223_20120717.zip",
|
||||
"fkdr1":"fkdr1_20130313.zip",
|
||||
"flash2a":"flash2a_20130313.zip",
|
||||
"fokker100":"fokker100_20140116.zip",
|
||||
"fokker50":"fokker50_20130810.zip",
|
||||
"followme":"followme_20110613.zip",
|
||||
"fw190":"fw190_20120717.zip",
|
||||
"harrier":"harrier_20130823.zip",
|
||||
"j22":"j22_20101022.zip",
|
||||
"j7w":"j7w_20120717.zip",
|
||||
"jeep":"jeep_20120717.zip",
|
||||
"jetman":"jetman_20110613.zip",
|
||||
"ju52":"ju52_20131204.zip",
|
||||
"kodiak":"kodiak_20101223.zip",
|
||||
"l39":"l39_20100310.zip",
|
||||
"marchetti":"marchetti_20050614.zip",
|
||||
"me163":"me163_20131022.zip",
|
||||
"me323":"me323_20131022.zip",
|
||||
"mirage2000":"mirage2000_20101024.zip",
|
||||
"mosquito":"mosquito_20130620.zip",
|
||||
"ogel":"ogel_20130209.zip",
|
||||
"ornithopter":"ornithopter_20070710.zip",
|
||||
"p51d":"p51d_20140111.zip",
|
||||
"pa22":"pa22_20090703.zip",
|
||||
"pa24-250":"pa24-250_20121128.zip",
|
||||
"pa28-161":"pa28-161_20120717.zip",
|
||||
"paraglider":"paraglider_20130620.zip",
|
||||
"payen-pa100":"payen-pa100_20101117.zip",
|
||||
"pittss1c":"pittss1c_20120717.zip",
|
||||
"pushback":"pushback_20120717.zip",
|
||||
"rallye-MS893":"rallye-MS893_20131016.zip",
|
||||
"santa":"santa_20130216.zip",
|
||||
"seahawk":"seahawk_20131025.zip",
|
||||
"sf25b":"sf25b_20120222.zip",
|
||||
"sgs233":"sgs233_20120717.zip",
|
||||
"shuttle":"shuttle_20080808.zip",
|
||||
"sm79":"sm79_20131022.zip",
|
||||
"snowplow":"snowplow_1.0.zip",
|
||||
"sopwithCamel":"sopwithCamel_20131008.zip",
|
||||
"spitfireIX":"spitfireIX_20120717.zip",
|
||||
"sr20":"sr20_20120717.zip",
|
||||
"superguppySGT":"superguppySGT_20110613.zip",
|
||||
"tu154":"tu154_20081221.zip",
|
||||
"tu154b":"tu154b_20130805.zip",
|
||||
"ufo":"ufo_20140125.zip",
|
||||
"victor":"victor_20140116.zip",
|
||||
"vulcanb2":"vulcanb2_20140116.zip",
|
||||
"wrightFlyer1903":"wrightFlyer1903_20070710.zip",
|
||||
"x24b":"x24b_20090126.zip",
|
||||
"yak3":"yak3_20131022.zip"
|
||||
}
|
||||
73
catalogTags.py
Normal file
73
catalogTags.py
Normal file
@@ -0,0 +1,73 @@
|
||||
aircraftTypeTags = [
|
||||
"ga", "fighter", "helicopter", "glider", "spaceship", "bomber", "groundvehicle",
|
||||
"tanker", "cargo", "passenger", "bizjet", "trainer", "airship", "balloon"
|
||||
]
|
||||
|
||||
manufacturerTags = [
|
||||
"boeing", "cessna", "diamond", "douglas", "bell", "piper",
|
||||
"airbus", "vickers", "lockheed", "fokker",
|
||||
"embrarer", "bombardier", "pilatus"
|
||||
]
|
||||
|
||||
eraTags = [
|
||||
"early-pioneers",
|
||||
"ww1",
|
||||
"1920s",
|
||||
"1930s",
|
||||
"golden-age",
|
||||
"ww2",
|
||||
"coldwar", "vietnam",
|
||||
"1950s",
|
||||
"1960s",
|
||||
"1970s",
|
||||
"1980s",
|
||||
"gulfwar1",
|
||||
"gulfwar2"
|
||||
]
|
||||
|
||||
featureTags = [
|
||||
"ifr",
|
||||
"retractable-gear",
|
||||
"fixed-gear",
|
||||
"tail-dragger",
|
||||
"seaplane",
|
||||
"vtol",
|
||||
"stol",
|
||||
"experimental",
|
||||
"prototype",
|
||||
"fictional",
|
||||
"biplane",
|
||||
"triplane",
|
||||
"supersonic",
|
||||
"t-tail",
|
||||
"v-tail",
|
||||
"high-wing",
|
||||
"cannard",
|
||||
"tail-hook",
|
||||
"refuel",
|
||||
"delta",
|
||||
"variable-geometry",
|
||||
"glass-cockpit",
|
||||
"hud",
|
||||
"etops",
|
||||
"floats",
|
||||
"amphibious",
|
||||
"supersonic"
|
||||
]
|
||||
|
||||
propulsionTags = [
|
||||
"piston", "radial",
|
||||
"diesel",
|
||||
"variable-pitch",
|
||||
"supercharged",
|
||||
"turboprop",
|
||||
"jet", "afterburner", "rocket",
|
||||
"electric"
|
||||
]
|
||||
|
||||
simFeatureTags = [
|
||||
"tow",
|
||||
"dual-controls"
|
||||
]
|
||||
|
||||
tags = aircraftTypeTags + manufacturerTags + eraTags + simFeatureTags + propulsionTags + featureTags
|
||||
@@ -1,171 +1,134 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import fnmatch
|
||||
import tarfile
|
||||
import hashlib
|
||||
import shutil
|
||||
import os, sys, re
|
||||
import urllib
|
||||
import hashlib # for MD5
|
||||
|
||||
import xml.etree.cElementTree as ET
|
||||
import catalogFilenames
|
||||
import catalogTags
|
||||
import sgprops
|
||||
|
||||
rootPath = sys.argv[1]
|
||||
outputDir = sys.argv[2]
|
||||
fgRoot = sys.argv[1]
|
||||
aircraftDir = os.path.join(fgRoot, 'Aircraft')
|
||||
|
||||
existingCatalogPath = os.path.join(outputDir, 'catalog.xml')
|
||||
existingCatalog = None
|
||||
print 'existing ctalog path:' + existingCatalogPath
|
||||
if os.path.exists(existingCatalogPath):
|
||||
existingCatalog = ET.parse(existingCatalogPath)
|
||||
catalogProps = sgprops.Node()
|
||||
catalogProps.addChild('version').value = '3.1.0'
|
||||
catalogProps.addChild('id').value = 'org.flightgear.default'
|
||||
catalogProps.addChild('license').value = 'GPL'
|
||||
catalogProps.addChild('url').value = "http://fgfs.goneabitbursar.com/pkg/3.1.0/default-catalog.xml"
|
||||
|
||||
for file in os.listdir(outputDir):
|
||||
if fnmatch.fnmatch(file, '*.tar.gz'):
|
||||
os.remove(os.path.join(outputDir, file));
|
||||
catalogProps.addChild('description').value = "Aircraft developed and maintained by the FlightGear project"
|
||||
|
||||
de = catalogProps.addChild('de')
|
||||
# de.addChild('description').value = "<German translation of catalog description>"
|
||||
|
||||
thumbsDir = os.path.join(outputDir, 'thumbs')
|
||||
shutil.rmtree(thumbsDir)
|
||||
os.makedirs(thumbsDir)
|
||||
fr = catalogProps.addChild('fr')
|
||||
|
||||
def setProperty(node, id, value):
|
||||
s = node.find(id) # check for existing
|
||||
if s is None:
|
||||
s = ET.SubElement(node, id)
|
||||
s.text = value
|
||||
urls = [
|
||||
"http://flightgear.wo0t.de/",
|
||||
"http://ftp.icm.edu.pl/packages/flightgear/",
|
||||
"http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/",
|
||||
"http://ftp.igh.cnrs.fr/pub/flightgear/ftp/",
|
||||
"http://ftp.linux.kiev.ua/pub/fgfs/",
|
||||
"http://fgfs.physra.net/ftp/"
|
||||
]
|
||||
|
||||
def clearChildren(node, tag):
|
||||
for c in node.findall(tag):
|
||||
node.remove(c)
|
||||
|
||||
def parse_setXml(path):
|
||||
tree = ET.parse(path)
|
||||
thumbs = [
|
||||
"http://www.flightgear.org/thumbs/v3.0/{acft}.jpg"
|
||||
]
|
||||
|
||||
desc = tree.find('sim/description')
|
||||
ratings = tree.find('sim/rating')
|
||||
if (ratings is not None):
|
||||
for rating in list(ratings):
|
||||
if rating.tag == 'status':
|
||||
continue
|
||||
standardTagSet = frozenset(catalogTags.tags)
|
||||
def isNonstandardTag(t):
|
||||
return t not in standardTagSet
|
||||
|
||||
# create the download cache dir if require
|
||||
|
||||
cacheDir = '.catalog_cache'
|
||||
if not os.path.isdir(cacheDir):
|
||||
print "Creating catalog cache dir"
|
||||
os.mkdir(cacheDir)
|
||||
|
||||
|
||||
for d in os.listdir(aircraftDir):
|
||||
acftDirPath = os.path.join(aircraftDir, d)
|
||||
if not os.path.isdir(acftDirPath):
|
||||
continue
|
||||
|
||||
setFilePath = None
|
||||
|
||||
# find the first set file
|
||||
# FIXME - way to designate the primary file
|
||||
for f in os.listdir(acftDirPath):
|
||||
if f.endswith("-set.xml"):
|
||||
setFilePath = os.path.join(acftDirPath, f)
|
||||
break
|
||||
|
||||
if setFilePath is None:
|
||||
print "No -set.xml file found in",acftDirPath,"will be skipped"
|
||||
continue
|
||||
|
||||
try:
|
||||
props = sgprops.readProps(setFilePath, dataDirPath = fgRoot)
|
||||
sim = props.getNode("sim")
|
||||
|
||||
pkgNode = catalogProps.addChild('package')
|
||||
|
||||
# basic / mandatory values
|
||||
pkgNode.addChild('id').value = d
|
||||
pkgNode.addChild('name').value = sim.getValue('description')
|
||||
|
||||
longDesc = sim.getValue('long-description')
|
||||
if longDesc is not None:
|
||||
pkgNode.addChild('description').value = longDesc
|
||||
|
||||
# copy all the standard values
|
||||
for p in ['status', 'author', 'license']:
|
||||
v = sim.getValue(p)
|
||||
if v is not None:
|
||||
pkgNode.addChild(p).value = v
|
||||
|
||||
# ratings
|
||||
if sim.hasChild('rating'):
|
||||
pkgRatings = pkgNode.addChild('rating')
|
||||
for r in ['FDM', 'systems', 'cockpit', 'model']:
|
||||
pkgRatings.addChild(r).value = sim.getValue('rating/' + r, 0)
|
||||
|
||||
# copy tags
|
||||
if sim.hasChild('tags'):
|
||||
for c in sim.getChild('tags').getChildren('tag'):
|
||||
if isNonstandardTag(c.value):
|
||||
print "Skipping non-standard tag:", c.value
|
||||
else:
|
||||
pkgNode.addChild('tag').value = c.value
|
||||
|
||||
rvalue = int(rating.text)
|
||||
if rvalue < 2:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
|
||||
d = {}
|
||||
|
||||
d['desc'] = desc
|
||||
d['ratings'] = ratings;
|
||||
d['status'] = tree.find('sim/status')
|
||||
d['authors'] = tree.findall('sim/author')
|
||||
|
||||
return d
|
||||
|
||||
def process_aircraft(acft, path):
|
||||
print '===' + acft + '==='
|
||||
setFiles = []
|
||||
thumbs = []
|
||||
|
||||
for file in os.listdir(path):
|
||||
if fnmatch.fnmatch(file, '*-set.xml'):
|
||||
setFiles.append(file);
|
||||
# create download and thumbnail URLs
|
||||
s = "{url}Aircraft-3.0/"
|
||||
if d not in catalogFilenames.aircraft:
|
||||
print "filename not found for:",d
|
||||
raise RuntimeError("filename not found for:" + d)
|
||||
s += catalogFilenames.aircraft[d]
|
||||
|
||||
if fnmatch.fnmatch(file, 'thumbnail*'):
|
||||
thumbs.append(file)
|
||||
|
||||
aircraft = []
|
||||
for s in setFiles:
|
||||
d = parse_setXml(os.path.join(path, s))
|
||||
if d is None:
|
||||
continue
|
||||
for u in urls:
|
||||
pkgNode.addChild("url").value = s.format(url=u)
|
||||
|
||||
d['set'] = s[0:-8]
|
||||
aircraft.append(d)
|
||||
|
||||
thumbnailNames = []
|
||||
# copy thumbnails
|
||||
for t in thumbs:
|
||||
outThumb = os.path.join(thumbsDir, acft + "-" + t)
|
||||
thumbnailNames.append(acft + "-" + t)
|
||||
shutil.copyfile(os.path.join(path, t), outThumb)
|
||||
for t in thumbs:
|
||||
pkgNode.addChild("thumbnail").value = t.format(acft=d)
|
||||
|
||||
cachedZip = os.path.join(cacheDir, catalogFilenames.aircraft[d])
|
||||
if not os.path.exists(cachedZip):
|
||||
# download the zip
|
||||
url = s.format(url=urls[0])
|
||||
print "Downloading ", url
|
||||
urllib.urlretrieve(url, cachedZip)
|
||||
#else:
|
||||
# print "Using cached zip for", d
|
||||
|
||||
if len(aircraft) == 0:
|
||||
print "no aircraft profiles for " + acft
|
||||
return
|
||||
|
||||
# tarball creation
|
||||
outTar = os.path.join(outputDir, acft + ".tar.gz")
|
||||
tar = tarfile.open(outTar, "w:gz")
|
||||
tar.add(path, acft)
|
||||
tar.close()
|
||||
|
||||
digest = hashlib.md5(open(outTar, 'r').read()).hexdigest()
|
||||
revision = 1
|
||||
|
||||
# revision check
|
||||
if acft in existingPackages:
|
||||
previousMd5 = existingPackages[acft].find('md5').text
|
||||
previousRevsion = int(existingPackages[acft].find('revision').text)
|
||||
if digest != previousMd5:
|
||||
print acft + ": MD5 has changed"
|
||||
revision = previousRevsion + 1
|
||||
else:
|
||||
print acft + ": MD5 is unchanged"
|
||||
else:
|
||||
existingPackages[acft] = ET.Element('package')
|
||||
setProperty(existingPackages[acft], 'id', acft)
|
||||
|
||||
setProperty(existingPackages[acft], 'revision', str(revision))
|
||||
setProperty(existingPackages[acft], 'md5', digest)
|
||||
setProperty(existingPackages[acft], 'description', aircraft[0]['desc'])
|
||||
zipFile = open(cachedZip, 'r')
|
||||
|
||||
clearChildren(existingPackages[acft], 'thumbnail')
|
||||
for t in thumbnailNames:
|
||||
tn = ET.SubElement(existingPackages[acft], 'thumbnail')
|
||||
tn.text = 'thumbs/' + t
|
||||
|
||||
clearChildren(existingPackages[acft], 'rating')
|
||||
existingPackages[acft].append(aircraft[0]['ratings'])
|
||||
|
||||
print "wrote tarfile, digest is " + digest
|
||||
|
||||
root = ET.Element('PropertyList')
|
||||
catalogTree = ET.ElementTree(root)
|
||||
|
||||
existingPackages = dict()
|
||||
|
||||
if (existingCatalog is not None):
|
||||
print 'have existing catalog data'
|
||||
|
||||
root.append(existingCatalog.find('license'))
|
||||
root.append(existingCatalog.find('url'))
|
||||
root.append(existingCatalog.find('description'))
|
||||
root.append(existingCatalog.find('id'))
|
||||
|
||||
# existing data (for revision incrementing)
|
||||
for n in existingCatalog.findall('package'):
|
||||
idNode = n.find('id')
|
||||
if idNode is None:
|
||||
print 'Missing <id> tag on package'
|
||||
continue
|
||||
|
||||
existingPackages[idNode.text] = n;
|
||||
digest = hashlib.md5(zipFile.read()).hexdigest()
|
||||
pkgNode.addChild("md5").value = digest
|
||||
pkgNode.addChild("file-size-bytes").value = os.path.getsize(cachedZip)
|
||||
except:
|
||||
print "Failure processing:", setFilePath
|
||||
|
||||
#licenseElement = ET.SubElement(root, 'license')
|
||||
#licenseElement.text = 'gpl'
|
||||
|
||||
#urlElement = ET.SubElement(root, 'url')
|
||||
#urlElement.text = 'http://catalog.xml'
|
||||
|
||||
for acft in os.listdir(rootPath):
|
||||
path = os.path.join(rootPath, acft);
|
||||
if (os.path.isdir(path)):
|
||||
process_aircraft(acft, path)
|
||||
|
||||
|
||||
for ep in existingPackages:
|
||||
root.append(existingPackages[ep])
|
||||
|
||||
catalogTree.write(os.path.join(outputDir, 'catalog.xml'), 'UTF-8')
|
||||
|
||||
catalogProps.write("catalog.xml")
|
||||
File diff suppressed because it is too large
Load Diff
450
fgdata_checkers.py
Normal file
450
fgdata_checkers.py
Normal file
@@ -0,0 +1,450 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import print_function#defaults to Python 3, but should also work in 2.7
|
||||
"""Functions for checking fgdata for various problems (and one for creating smaller/split versions of it)
|
||||
|
||||
By Rebecca Palmer"""
|
||||
import os
|
||||
import os.path
|
||||
import re
|
||||
from collections import defaultdict
|
||||
import subprocess
|
||||
import math
|
||||
import tarfile
|
||||
import gzip
|
||||
def path_join(*args):
|
||||
"""Unlike plain os.path.join, this doesn't add a trailing / if the last component is empty"""
|
||||
return os.path.normpath(os.path.join(*args))
|
||||
def rfilelist(path,exclude_dirs=[]):
|
||||
"""Dict of files/sizes in path, including those in any subdirectories (as relative paths)"""
|
||||
files=defaultdict(int)
|
||||
dirs=[""]
|
||||
while dirs:
|
||||
cdir=dirs.pop()
|
||||
cdirfiles=os.listdir(path_join(path,cdir))
|
||||
for file in cdirfiles:
|
||||
if os.path.isdir(path_join(path,cdir,file)):
|
||||
if path_join(cdir,file) not in exclude_dirs:
|
||||
dirs.append(path_join(cdir,file))
|
||||
else:
|
||||
files[path_join(cdir,file)]=os.path.getsize(path_join(path,cdir,file))
|
||||
return files
|
||||
def strip_comments(text,comment_types=None,filename=None):
|
||||
"""Remove comments from text
|
||||
Assumes comments don't nest (including different types of comments: will be wrong for e.g. /* aaa // bbb */ will-remove-this in C++ if // are removed first)
|
||||
Doesn't check for being inside a string literal, and doesn't check for line-start * in C /* ... */"""
|
||||
if comment_types is None:
|
||||
if filename is None:
|
||||
raise TypeError("must give either filename or comment_types")
|
||||
if os.path.splitext(filename)[1] in (".xml",".eff"):
|
||||
comment_types=(("<!--","-->",""),)
|
||||
elif os.path.splitext(filename)[1] in (".c",".cpp",".cxx",".h",".hpp",".hxx",".frag",".vert"):
|
||||
comment_types=(("//","\n","\n"),("/*","*/",""))
|
||||
elif os.path.splitext(filename)[1] in (".nas",):
|
||||
comment_types=(("#","\n","\n"),)
|
||||
else:
|
||||
comment_types=[]
|
||||
if type(text) in (bytes,bytearray):
|
||||
comment_types=[[bytes(c,encoding="ascii") for c in ct] for ct in comment_types]
|
||||
for comment_type in comment_types:
|
||||
text=text.split(comment_type[0],maxsplit=1)[0]+comment_type[2].join(s.split(comment_type[1],maxsplit=1)[1] for s in text.split(comment_type[0])[1:] if comment_type[1] in s)
|
||||
return text
|
||||
def files_used(pattern,path,exclude_dirs=[],filelist=None,filetypes=None,relative_path=False):
|
||||
"""Files used by an element matching pattern, in a file in path or filelist"""
|
||||
textures=[]
|
||||
if filelist is None:
|
||||
filelist=rfilelist(path,exclude_dirs).keys()
|
||||
if filetypes is not None:
|
||||
filelist=[f for f in filelist if os.path.splitext(f)[1] in filetypes]
|
||||
texfind=re.compile(pattern)
|
||||
for file in filelist:
|
||||
try:
|
||||
f=open(path_join(path,file),'r',errors='replace')
|
||||
except FileNotFoundError:
|
||||
continue
|
||||
for line in f:
|
||||
tex=texfind.search(line)
|
||||
if tex:
|
||||
if relative_path:
|
||||
textures.append(os.path.normpath(path_join(os.path.dirname(file),tex.group(1).replace('\\','/'))))
|
||||
else:
|
||||
textures.append(os.path.normpath(tex.group(1).replace('\\','/')))
|
||||
return textures
|
||||
def find_unused_textures(basedir,output_lists=True,grep_check=False,output_rsync_rules=False,output_comparison_strips=False, output_removal_commands=False,return_used_noregions=False):
|
||||
"""Checks if any textures are unused (wasting space), and if any textures are only available as .dds (not recommended in the source repository, as it is a lossy-compressed format)
|
||||
|
||||
Set basedir to your fg-root, and enable the kind(s) of output you want:
|
||||
output_lists prints lists of unused textures, and of dds-only textures
|
||||
grep_check checks for possible use outside the normal directories; requires Unix shell
|
||||
output_rsync_rules prints rsync rules for excluding unused textures from the release flightgear-data. Warning: if you use this, re-run this script regularly, in case they start being used
|
||||
output_comparison_strips creates thumbnail strips, unused_duplicate.png/unused_dds.png/high_low.png, for visually checking whether same-name textures are the same (remove the unused one entirely) or different (move it to Unused); requires imagemagick or graphicsmagick
|
||||
output_removal_commands creates another script, delete_unused_textures.sh, which will remove unused textures when run in a Unix shell"""
|
||||
|
||||
false_positives=set(['buildings-lightmap.png','buildings.png','Credits','Globe/00README.txt', 'Globe/01READMEocean_depth_1png.txt', 'Globe/world.topo.bathy.200407.3x4096x2048.png','Trees/convert.pl','Splash1.png','Splash2.png','Splash3.png','Splash4.png','Splash5.png'])#these either aren't textures, or are used where we don't check; 'unknown.rgb','Terrain/unknown.rgb' are also referenced, but already don't exist
|
||||
used_textures=set(files_used(path=path_join(basedir,'Materials'),pattern=r'<(?:texture|object-mask|tree-texture).*?>(\S+?)</(texture|object-mask|tree-texture)'))|false_positives
|
||||
used_textures_noregions=set(files_used(path=path_join(basedir,'Materials'),exclude_dirs=['regions'],pattern=r'<(?:texture|object-mask|tree-texture).*?>(\S+?)</(texture|object-mask|tree-texture)'))|false_positives#this pattern matches a <texture> (possibly with number), <tree-texture> or <object-mask> element
|
||||
used_effectslow=set(files_used(path=path_join(basedir,'Effects'),pattern=r'image.*?>[\\/]?Textures[\\/](\S+?)</.*?image'))|set(files_used(path=path_join(basedir,'Materials'),pattern=r'<building-(?:texture|lightmap).*?>Textures[\\/](\S+?)</building-(?:texture|lightmap)'))#Effects (<image>), and Materials <building-texture>/<building-lightmap>, explicitly includes the Textures/ or Textures.high/
|
||||
used_effectshigh=set(files_used(path=path_join(basedir,'Effects'),pattern=r'image.*?>[\\/]?Textures.high[\\/](\S+?)</.*?image'))|set(files_used(path=path_join(basedir,'Materials'),pattern=r'<building-(?:texture|lightmap).*?>Textures.high[\\/](\S+?)</building-(?:texture|lightmap)'))
|
||||
high_tsizes=rfilelist(path_join(basedir,'Textures.high'))
|
||||
high_textures=set(high_tsizes.keys())
|
||||
low_tsizes=rfilelist(path_join(basedir,'Textures'),exclude_dirs=['Sky','Unused'])#sky textures are used where we don't check
|
||||
low_textures=set(low_tsizes.keys())
|
||||
only_high=high_textures-low_textures
|
||||
used_noreg_onlyhigh=(only_high&used_textures_noregions)|used_effectshigh
|
||||
used_noreg_onlyhighsize=sum(high_tsizes[t] for t in used_noreg_onlyhigh)
|
||||
used_noreg_low=(low_textures&used_textures_noregions)|used_effectslow
|
||||
used_noregions=used_textures_noregions|used_effectshigh|used_effectslow
|
||||
used_noreg_lowsize=sum(low_tsizes[t] for t in used_noreg_low)
|
||||
used_noreg_defsize=sum(low_tsizes[t] for t in (used_textures_noregions-high_textures)|used_effectslow)+sum(high_tsizes[t] for t in used_textures_noregions|used_effectshigh)
|
||||
used_defsize=sum(low_tsizes[t] for t in (used_textures-high_textures)|used_effectslow)+sum(high_tsizes[t] for t in used_textures|used_effectshigh)
|
||||
unused=(high_textures|low_textures)-used_textures-used_effectslow-used_effectshigh
|
||||
t_size=lambda tset: sum(high_tsizes[t] for t in tset)+sum(low_tsizes[t] for t in tset)
|
||||
missing=(used_textures-(high_textures|low_textures))|(used_effectslow-low_textures)|(used_effectshigh-high_textures)
|
||||
if missing:
|
||||
raise ValueError("Some used textures not found: "+repr(missing))
|
||||
sourceless=[f for f in (high_textures|low_textures) if (f[-4:]==".dds" and f[:-4]+".png" not in high_textures and (f in high_textures or f[:-4]+".png" not in low_textures) )]+['Terrain/airport.dds']#airport.dds isn't the same as airport.png; crop-colors.dds/cropgrass-colors.dds/rock-colors.dds/forest-colors.dds also differ but only in strip width, which doesn't matter as they are 1D color strips
|
||||
sourceless_used=set(sourceless)-unused
|
||||
needed_as_source=[f for f in unused if (f[-4:]!=".dds" and f[:-4]+".png" in (used_textures|used_effectslow|used_effectshigh) or f[:-4]+".dds" in (used_textures|used_effectslow|used_effectshigh))]+['Runway/designation_letters.svg']
|
||||
known_non_duplicates=['deciduous.png','drycrop.png','irrcrop.png','marsh1.png','gravel.png','Town.png','grass.png','mixedcrop.png','resgrid.png']+['glacier.png','rock.png','cropgrass.png']#first group real winter textures, second group unrelated textures
|
||||
unused_duplicate=[f for f in unused if (f[0:14]=="Terrain.winter" and "Terrain"+f[14:] in (high_textures|low_textures) and f[15:] not in known_non_duplicates)]
|
||||
unused_dds=set(f for f in (unused-set(unused_duplicate)) if (f[-4:]==".dds" and f[:-4]+".png" in (high_textures|low_textures) and f!='Terrain/airport.dds'))#airport.dds isn't the same as airport.png; crop-colors.dds/cropgrass-colors.dds/rock-colors.dds/forest-colors.dds also differ but only in strip width, which doesn't matter as they are 1D color strips
|
||||
unused_other=unused-set(unused_duplicate)-set(unused_dds)-set(needed_as_source)
|
||||
known_highlow_mismatch=set(['Terrain.winter/mixedcrop4.png','Terrain.winter/cropgrass3.png','Terrain.winter/drycrop4.png','Terrain.winter/irrcrop2.png','Terrain.winter/drycrop1.png','Terrain.winter/drycrop3.png','Terrain.winter/mixedcrop1.png','Terrain.winter/ mixedforest2.png','Terrain.winter/cropgrass2.png','Terrain.winter/cropgrass1.png','Terrain.winter/tundra.png','Terrain.winter/mixedforest3.png','Terrain.winter/shrub2.png','Terrain.winter/drycrop2.png','Terrain.winter/deciduous1.png','Terrain.winter/ mixedcrop3.png','Terrain.winter/naturalcrop1.png']+['Terrain.winter/tundra3.png','Terrain.winter/forest1c.png','Terrain.winter/herbtundra.png']+['Terrain/grass_rwy.dds','Terrain/cropwood.dds','Terrain/herbtundra.dds','Terrain/irrcrop.dds','Terrain/shrub.dds','Terrain.winter/mixedforest.png','Runway/pa_taxiway.png','Runway/pc_taxiway.png'])#first group are different degrees of snow cover on the same base texture, last group unrelated textures, middle group hard to tell; p{a,c}_taxiway (only low-res has side lines) are also mismatched in .dds, but as each .dds matches its size .png, only the .png needs to be kept in Unused
|
||||
lowres_maybe_source=['Terrain/lava1.png','Terrain/lava2.png','Terrain/lava3.png','Terrain/sand4.png','Terrain/sand5.png','Terrain/sand6.png']#these are clearly related, but the high-res version has unnatural-looking high-frequency noise, suggesting that the low-res version might be the original: keep it
|
||||
unused_dds_matchhigh=set(f for f in (unused_dds&known_highlow_mismatch) if f[:-4]+".png" not in low_textures)
|
||||
unused_dds_matchlow=set(f for f in (unused_dds&known_highlow_mismatch) if f[:-4]+".png" not in high_textures)
|
||||
low_unneeded=(high_textures&low_textures)-used_effectslow-unused-set(lowres_maybe_source)
|
||||
low_unneeded_duplicate=low_unneeded-set(known_highlow_mismatch)
|
||||
low_unneeded_nondup=low_unneeded&set(known_highlow_mismatch)
|
||||
def image_check_strip(basedir,index_fname,ilist1,ilist2=None,size=128):
|
||||
"""Generate two rows of thumbnails, for easy visual comparison (between the two lists given, or if a single list is given, between low and high resolution)"""
|
||||
if ilist2 is None:
|
||||
ipairs=[[path_join(basedir,'Textures',f),path_join(basedir,'Textures.high',f)] for f in ilist1]
|
||||
else:
|
||||
ipairs=[]
|
||||
for f1,f2 in zip(ilist1,ilist2):
|
||||
if f1 in low_textures:
|
||||
ipairs.append([path_join(basedir,'Textures',f1),path_join(basedir,'Textures',f2) if f2 in low_textures else path_join(basedir,'Textures.high',f2)])
|
||||
if f1 in high_textures:
|
||||
ipairs.append([path_join(basedir,'Textures.high',f1),path_join(basedir,'Textures.high',f2) if f2 in high_textures else path_join(basedir,'Textures',f2)])
|
||||
ilist_f=[f[0] for f in ipairs]+[f[1] for f in ipairs]
|
||||
subprocess.call(['montage','-label',"'%f'"]+ilist_f+['-tile','x2','-geometry',str(size)+'x'+str(size)]+[index_fname])
|
||||
def rsync_rules(basedir,flist,include=False,high=None):
|
||||
"""Output rsync rules to exclude/include the specified textures from high/low/both (high=True/False/None) resolutions"""
|
||||
for f in flist:
|
||||
if high!=True and f in low_textures:
|
||||
print("+" if include else "-",path_join('/fgdata/Textures',f))
|
||||
if high!=False and f in high_textures:
|
||||
print("+" if include else "-",path_join('/fgdata/Textures.high',f))
|
||||
def removal_command(basedir,flist,high=None):
|
||||
"""Return command to delete the specified textures from high/low/both (high=True/False/None) resolutions"""
|
||||
if not flist:
|
||||
return ""
|
||||
a="rm"
|
||||
for f in flist:
|
||||
if high!=True and f in low_textures:
|
||||
a=a+" "+path_join('Textures',f)
|
||||
if high!=False and f in high_textures:
|
||||
a=a+" "+path_join('Textures.high',f)
|
||||
a=a+"\n"
|
||||
return a
|
||||
def move_command(basedir,flist,high=None,comment=False):
|
||||
"""Return command to move the specified textures to Unused from high/low/both (high=True/False/None) resolutions"""
|
||||
if not flist:
|
||||
return ""
|
||||
dirset_low=set() if high==True else set(os.path.dirname(f) for f in set(flist)&low_textures)
|
||||
dirset_high=set() if high==False else set(os.path.dirname(f) for f in set(flist)&high_textures)
|
||||
a=""
|
||||
for d in dirset_low:
|
||||
a=a+("#" if comment else "")+"mv --target-directory="+path_join("Textures/Unused",d)+" "+(" ".join(path_join("Textures",f) for f in flist if (os.path.dirname(f)==d and f in low_textures)))+"\n"
|
||||
for d in dirset_high:
|
||||
a=a+("#" if comment else "")+"mv --target-directory="+path_join("Textures/Unused",d+".high")+" "+(" ".join(path_join("Textures.high",f) for f in flist if (os.path.dirname(f)==d and f in high_textures)))+"\n"
|
||||
return a
|
||||
if output_comparison_strips:
|
||||
image_check_strip(basedir,"unused_duplicate.png",unused_duplicate,["Terrain"+f[14:] for f in unused_duplicate])
|
||||
image_check_strip(basedir,"unused_dds.png",unused_dds,[f[:-4]+".png" for f in unused_dds])
|
||||
image_check_strip(basedir,"high_low.png",high_textures&low_textures)
|
||||
#image_check_strip(basedir,"high_low2.png",[f for f in high_textures&low_textures if (f[0:14]=="Terrain.winter" or "_taxiway." in f or "lava" in f or "sand" in f)],size=512)#closer look at the doubtful cases
|
||||
if output_lists:
|
||||
print("\n\nunused-winter same as normal:",sorted(unused_duplicate),"\nsize=",t_size(unused_duplicate),"\n\nunused-dds with matching png:",sorted(unused_dds),"\nsize=",t_size(unused_dds),"\n\nunused-unique:",sorted(unused_other),"\nsize=",t_size(unused_other),"\n\nnot directly used but keep as source:",sorted(needed_as_source),"\nsize=",t_size(needed_as_source),"\n\nunused low, matches high:",sorted(low_unneeded_duplicate),"\nsize=",sum(low_tsizes[f] for f in low_unneeded_duplicate),"\n\nunused low, unique:",sorted(low_unneeded_nondup),"\nsize=",sum(low_tsizes[f] for f in low_unneeded_nondup),"\n\nall non-sky textures size=",sum(high_tsizes.values())+sum(low_tsizes.values()),"used size=",used_defsize,"used no-regions size=",used_noreg_defsize,"\n\nnot found:",sorted(missing),"\n\n.dds only/highest-res:",sorted(sourceless),"\n\n.dds only/highest-res, used:",sorted(sourceless_used))
|
||||
#not really meaningful after removing low-res duplicates: ,"\n\nused high-only, not regions:",sorted(used_noreg_onlyhigh),"\nsize=",used_noreg_onlyhighsize,"these+used low (i.e. minimal flightgear-data) size=",used_noreg_onlyhighsize+used_noreg_lowsize
|
||||
if grep_check:
|
||||
unused_f=[os.path.basename(f) for f in unused]
|
||||
all_f=[os.path.basename(f) for f in (high_textures|low_textures)]
|
||||
print("\n\nPossible use outside main search:")#used to set false_positives
|
||||
subprocess.call(["grep","-r","-E","--exclude-dir=Aircraft","--exclude-dir=.git","-e","("+")|(".join(unused)+")","/home/palmer/fs_dev/git/fgdata","/home/palmer/fs_dev/git/flightgear","/home/palmer/fs_dev/git/simgear"])#everywhere using full names
|
||||
subprocess.call(["grep","-r","-E","--exclude-dir=Aircraft","--exclude-dir=Textures.high","--exclude-dir=Models","--exclude-dir=Materials","--exclude-dir=Effects","--exclude-dir=.git","-e","("+")|(".join(all_f)+")","/home/palmer/fs_dev/git/fgdata","/home/palmer/fs_dev/git/flightgear","/home/palmer/fs_dev/git/simgear"])#restricted (to avoid false positives from Terrain.winter vs Terrain) using filenames
|
||||
subprocess.call(["grep","-r","-E","--exclude-dir=Aircraft","--exclude-dir=Textures.high","--exclude-dir=Models","--exclude-dir=Materials","--exclude-dir=Effects","--exclude-dir=.git","-e",'[."\']dds',"/home/palmer/fs_dev/git/fgdata","/home/palmer/fs_dev/git/flightgear","/home/palmer/fs_dev/git/simgear"])#check for programmatic .png -> .dds swap; none found
|
||||
print("\n\nUse of sourceless textures:")
|
||||
subprocess.call(["grep","-r","-E","--exclude-dir=Aircraft","--exclude-dir=.git","-e","("+")|(".join(sourceless)+")","/home/palmer/fs_dev/git/fgdata","/home/palmer/fs_dev/git/flightgear","/home/palmer/fs_dev/git/simgear"])
|
||||
if output_rsync_rules:
|
||||
print("\n\nFull flightgear-data:\n")
|
||||
rsync_rules(basedir,unused)
|
||||
rsync_rules(basedir,low_unneeded,high=False)
|
||||
print("\n\nMinimal flightgear-data:\n")
|
||||
rsync_rules(basedir,low_textures-used_noreg_low,high=False)
|
||||
rsync_rules(basedir,high_textures-used_noreg_onlyhigh,high=True)
|
||||
if output_removal_commands:
|
||||
r_script=open('delete_unused_textures.sh','w')
|
||||
r_script.write("cd "+basedir+"\n")
|
||||
r_script.write("#Unused duplicates\n")
|
||||
r_script.write(removal_command(basedir,unused_duplicate))
|
||||
r_script.write("#Unused .dds versions\n")
|
||||
r_script.write(removal_command(basedir,unused_dds-unused_dds_matchhigh,high=False))
|
||||
r_script.write(removal_command(basedir,unused_dds-unused_dds_matchlow,high=True))
|
||||
r_script.write("#Unused reduced-resolution versions\n")
|
||||
r_script.write(removal_command(basedir,low_unneeded_duplicate|(unused_other&high_textures&low_textures)-set(lowres_maybe_source),high=False))
|
||||
r_script.write("#Unused unique .png (move to Unused)\n")
|
||||
r_script.write("\n".join(["mkdir -p Textures/Unused/"+d for d in ['Terrain','Terrain.winter','Trees','Terrain.high','Terrain.winter.high','Trees.high','Runway','Water']])+"\n")
|
||||
r_script.write(move_command(basedir,[f for f in unused_other&high_textures if (f[-4:]!=".dds" and f[:5]!="Signs" and f[:6]!="Runway")],high=True))
|
||||
r_script.write(move_command(basedir,[f for f in (unused_other-high_textures)|low_unneeded_nondup if (f[-4:]!=".dds" and f[:5]!="Signs" and f[:6]!="Runway")],high=False))
|
||||
r_script.write("#Unused unique .dds\n")
|
||||
r_script.write("#It is my opinion that these should go, but if you'd prefer to move them to Unused I won't argue further\n")
|
||||
r_script.write(removal_command(basedir,[f for f in (unused_other&high_textures)|unused_dds_matchlow if (f[-4:]==".dds" and f[:5]!="Signs" and f[:6]!="Runway")],high=True))
|
||||
r_script.write(removal_command(basedir,[f for f in (unused_other-high_textures)|low_unneeded_nondup|unused_dds_matchhigh if f[-4:]==".dds"],high=False))
|
||||
r_script.write(move_command(basedir,[f for f in (unused_other&high_textures)|unused_dds_matchlow if (f[-4:]==".dds" and f[:5]!="Signs" and f[:6]!="Runway")],high=True,comment=True))
|
||||
r_script.write(move_command(basedir,[f for f in (unused_other-high_textures)|low_unneeded_nondup|unused_dds_matchhigh if (f[-4:]==".dds" and f[:5]!="Signs" and f[:6]!="Runway")],high=False,comment=True))
|
||||
r_script.close()
|
||||
if return_used_noregions:
|
||||
return used_noregions|set([path_join('Sky',f) for f in rfilelist(path_join(basedir,'Textures/Sky'))])
|
||||
def find_locally_unused_models(basedir):
|
||||
"""Find models not used in the base scenery (these do need to be in Terrasync as they may well be used in other locations, but don't need to be in the base flightgear-data package)
|
||||
Known bug: doesn't search everywhere: check /Nasal,.eff <image>,<inherits-from>,/(AI/)Aircraft not referenced in AI scenarios, unusual tags in Aircraft/Generic/Human/Models/walker.xml,HLA/av-aircraft.xml,/Environment,MP/aircraft_types.xml,preferences.xml"""
|
||||
models_allfiles={path_join('Models',f):s for f,s in rfilelist(path_join(basedir,'Models')).items()}
|
||||
t_size=lambda flist: sum(models_allfiles[f] for f in flist if f in models_allfiles)
|
||||
used_models=set(files_used(path=path_join(basedir,'Scenery'),filetypes=".stg",pattern=r'OBJECT_SHARED (\S+?) '))|set(files_used(path=path_join(basedir,'AI'),exclude_dirs=["Aircraft","Traffic"],pattern=r'<model>[\\/]?(\S+?)</model>'))|set(f for f in files_used(path=path_join(basedir,'Materials'),filetypes=".xml",pattern=r'<path>[\\/]?(\S+?)</path>') if f[-4:]==".xml")
|
||||
n=0
|
||||
while n!=len(used_models):
|
||||
n=len(used_models)
|
||||
used_models=used_models|set(f for f in files_used(path=basedir,filelist=used_models,filetypes=".xml",pattern=r'<path>[\\/]?(\S+?)</path>') if f[-4:]==".xml")
|
||||
used_textures=set(files_used(path=basedir,filelist=used_models,filetypes=".ac",pattern=r'texture "(\S+?)"',relative_path=True))|set(files_used(path=basedir,filelist=used_models,filetypes=".xml",pattern=r'<texture>[\\/]?(\S+?)</texture>',relative_path=True))
|
||||
extra_used_models=set()
|
||||
for f1 in used_models:
|
||||
if f1[-4:]!=".xml":
|
||||
continue
|
||||
for f2 in files_used(path=basedir,filelist=[f1],pattern=r'<path>[\\/]?(\S+?)</path>',relative_path=True):
|
||||
if f2[-3:]!=".ac":
|
||||
continue
|
||||
extra_used_models=extra_used_models|set([f2])
|
||||
p2=[f for f in files_used(path=basedir,filelist=[f1],pattern=r'<texture-path>[\\/]?(\S+?)</texture-path>',relative_path=True)]
|
||||
if len(p2)==0:
|
||||
p2=[os.path.dirname(f1)]
|
||||
if len(p2)!=1:
|
||||
print("non-unique/not found:",f1,f2,p2)
|
||||
continue
|
||||
try:
|
||||
used_textures=used_textures|set(os.path.normpath(path_join(p2[0],f)) for f in files_used(path=basedir,filelist=[f2],filetypes=".ac",pattern=r'texture "(\S+?)"'))
|
||||
except (IOError,OSError):
|
||||
print("not found",f1,f2,p2)
|
||||
used_models=used_models|extra_used_models
|
||||
unused=set(models_allfiles.keys())-(used_models|used_textures)
|
||||
missing=set(f for f in (used_models|used_textures) if ((f.startswith('Models') and f not in models_allfiles.keys()) or not os.path.isfile(path_join(basedir,f))))
|
||||
print("used\n",sorted(used_models),"\nsize=",t_size(used_models),"\n\n",sorted(used_textures),"\nsize=",t_size(used_textures),"\n\nunused\n",sorted(unused),"\nsize=",t_size(unused),"\n\nmissing\n",sorted(missing),"\nsize=",t_size(missing))
|
||||
|
||||
def size_by_type(path,exclude_dirs=[]):
|
||||
"""Dict of total file size by file extension"""
|
||||
files=rfilelist(path,exclude_dirs)
|
||||
size_totals=defaultdict(int)
|
||||
for filename,size in files.items():
|
||||
file_ext=os.path.splitext(filename)[1]
|
||||
if file_ext==".gz":
|
||||
file_ext=os.path.splitext(os.path.splitext(filename)[0])[1]+file_ext
|
||||
size_totals[file_ext]=size_totals[file_ext]+size
|
||||
return size_totals
|
||||
def size_by_size(path,exclude_dirs=[],exts=[".png",".dds",".rgb"]):
|
||||
"""Dict of total file size by individual file size range, of given extensions (empty list for all files)"""
|
||||
files=rfilelist(path,exclude_dirs)
|
||||
size_totals=defaultdict(int)
|
||||
for filename,size in files.items():
|
||||
file_ext=os.path.splitext(filename)[1]
|
||||
if (not exts) or (file_ext in exts):
|
||||
size_totals[2**math.frexp(size)[1]]=size_totals[2**math.frexp(size)[1]]+size
|
||||
return size_totals
|
||||
def fgdata_size(path,dirs_to_list=["AI/Aircraft","AI/Traffic","Aircraft","Models","Scenery","Textures","Textures.high"],exclude_dirs=None,compressed_size=False,num_types=3):
|
||||
if dirs_to_list is None:
|
||||
dirs_to_list=[d for d in os.listdir(path) if os.path.isdir(path_join(path,d))]
|
||||
if exclude_dirs is None:
|
||||
if os.path.exists(path_join(path,".git")):
|
||||
exclude_dirs=[".git","Aircraft"]
|
||||
else:
|
||||
exclude_dirs=[]
|
||||
total_compressed_size=0
|
||||
exclude_list=[[]]*len(dirs_to_list)+[dirs_to_list+exclude_dirs]+[exclude_dirs]
|
||||
names_list=dirs_to_list+["other","all"]
|
||||
for n,dir1 in enumerate(dirs_to_list+["",""]):
|
||||
size_totals=size_by_type(path_join(path,dir1),exclude_list[n])
|
||||
print(names_list[n],sorted(size_totals.items(),key=lambda x:-x[1])[:num_types],"total",sum(size_totals.values()))
|
||||
if compressed_size:
|
||||
if names_list[n]=="all":
|
||||
print("compressed size",total_compressed_size)
|
||||
continue
|
||||
targz=tarfile.open("fgdata_sizetest_temp.tar.gz",mode="w:gz")
|
||||
for file in rfilelist(path_join(path,dir1),exclude_list[n]):
|
||||
targz.add(path_join(path,dir1,file))
|
||||
targz.close()
|
||||
print("compressed size",os.path.getsize("fgdata_sizetest_temp.tar.gz"))
|
||||
total_compressed_size=total_compressed_size+os.path.getsize("fgdata_sizetest_temp.tar.gz")
|
||||
|
||||
def create_reduced_fgdata(input_path,output_path,split_textures=True,exclude_parts=[],include_aircraft=['UIUC','777','777-200','b1900d','CitationX','ZLT-NT','dhc2','Cub','sopwithCamel','f-14b','ASK13','bo105','Dragonfly','SenecaII','A6M2'],dirs_to_downsample=(),downsample_min_filesize=30000):
|
||||
"""Create a smaller, reduced-quality flightgear-data package
|
||||
Can downsample textures 50% and/or omit sections
|
||||
Requires Unix shell; downsampling requires imagemagick or graphicsmagick (for convert) and libnvtt-bin (for nvcompress)
|
||||
|
||||
Optional parts, use exclude_parts to omit:
|
||||
ai: no background traffic, but tankers etc do still work
|
||||
extra-textures (requires split_textures=True): no region-specific textures
|
||||
|
||||
The c172p and ufo are always included; other aircraft are added by include_aircraft
|
||||
|
||||
Texture downsampling: textures in dirs_to_downsample and larger than downsample_min_filesize downsampled 50%
|
||||
Example: dirs_to_downsample=("Textures.high/Terrain","Textures.high/Trees","Textures.high/Terrain.winter","AI/Aircraft","Models"),downsample_min_filesize=30000
|
||||
|
||||
To put each section in its own directory use {0} in output_path, e.g.
|
||||
python3 -c "import fgdata_checkers; fgdata_checkers.create_reduced_fgdata(input_path='/home/palmer/fs_dev/git/fgdata',output_path='/home/palmer/fs_dev/flightgear/data_split/debian/flightgear-data-{0}/usr/share/games/flightgear',include_aircraft=['UIUC','b1900d','CitationX','ZLT-NT','dhc2','Cub','sopwithCamel','f-14b','ASK13','bo105','Dragonfly','SenecaII','A6M2'])"
|
||||
This creates separate preferences-regions.xml and preferences-noregions.xml files for with and without regional textures; you need to handle symlinking preferences.xml to the correct one
|
||||
"""
|
||||
texture_filetypes={".png":"PNG",".dds":"DDS"}#,".rgb":"SGI" loses cloud transparency
|
||||
exclude_dirs=[".git","Textures/Unused"]
|
||||
exclude_unnamed_subdirs=["Aircraft"]#these are a separate mechanism from subtree_class/exclude_parts mostly to save time (subtree_class still fully scans excluded directories because the class may change again further down the tree, e.g. AI/Aircraft ai -> performancedb.xml base; these don't)
|
||||
subtree_class={"Aircraft/c172p":"base","Aircraft/Generic":"base","Aircraft/Instruments":"base","Aircraft/Instruments-3d":"base","Aircraft/ufo":"base","Textures":"textures","Textures.high":"textures","AI/Aircraft":"ai","AI/Traffic":"ai","AI/Aircraft/performancedb.xml":"base","Scenery":"scenery","Models":"models"}
|
||||
for aircraft in include_aircraft:
|
||||
if "Aircraft/"+aircraft not in subtree_class:
|
||||
subtree_class["Aircraft/"+aircraft]="aircraft"
|
||||
include_files=[]
|
||||
if split_textures:
|
||||
base_texture_files=[]
|
||||
for t in find_unused_textures(input_path,return_used_noregions=True):
|
||||
base_texture_files.extend([path_join("Textures",t),path_join("Textures.high",t)])
|
||||
#if os.path.exists(path_join(input_path,".git")):
|
||||
#print(input_path,"appears to be a git clone; this will work, but the result will be larger than starting from a standard flightgear-data package.\nTo create this use (adjusting paths as necessary) rsync -av --filter=\"merge /home/palmer/fs_dev/git/fgmeta/base-package.rules\" ~/fs_dev/git/fgdata ~/fs_dev/flightgear/data_full")
|
||||
if os.path.exists(output_path.format("base")) and os.listdir(output_path.format("base")):
|
||||
print("output path",output_path,"non-empty, aborting to avoid data loss\nIf you did want to lose its previous contents, run:\nrm -r",output_path,"\nthen re-run this script")
|
||||
return
|
||||
dirs={"":"base"}
|
||||
while dirs:
|
||||
cdir,cclass=dirs.popitem()
|
||||
cdirfiles=os.listdir(path_join(input_path,cdir))
|
||||
for file in cdirfiles:
|
||||
fclass=subtree_class.get(path_join(cdir,file),cclass)
|
||||
if os.path.isdir(path_join(input_path,cdir,file)):
|
||||
if (path_join(cdir,file) not in exclude_dirs) and (cdir not in exclude_unnamed_subdirs or path_join(cdir,file) in subtree_class):
|
||||
dirs[path_join(cdir,file)]=fclass
|
||||
else:#file
|
||||
if split_textures and fclass=="textures":
|
||||
if path_join(cdir,file) in base_texture_files:
|
||||
fclass="base-textures"
|
||||
else:
|
||||
fclass="extra-textures"
|
||||
if fclass in exclude_parts:
|
||||
continue
|
||||
if not os.path.exists(path_join(output_path.format(fclass),cdir)):
|
||||
subprocess.call(["mkdir","-p",path_join(output_path.format(fclass),cdir)])
|
||||
if (cdir.startswith(dirs_to_downsample)) and (os.path.splitext(file)[1] in texture_filetypes) and (os.path.getsize(path_join(input_path,cdir,file))>downsample_min_filesize):
|
||||
image_type=texture_filetypes[os.path.splitext(file)[1]]
|
||||
if "{0}" in output_path and fclass=="base-textures":#downsampled in base-textures, full resolution in extra-textures
|
||||
if not os.path.exists(path_join(output_path.format("extra-textures"),cdir)):
|
||||
subprocess.call(["mkdir","-p",path_join(output_path.format("extra-textures"),cdir)])
|
||||
subprocess.call(["cp",path_join(input_path,cdir,file),path_join(output_path.format("extra-textures"),cdir,file)])
|
||||
if image_type=="DDS":# in Ubuntu, neither imagemagick nor graphicsmagick can write .dds
|
||||
#doesn't work subprocess.call(["nvzoom","-s","0.5","-f","box",path_join(input_path,cdir,file),path_join(output_path.format(fclass),cdir,file)])
|
||||
if subprocess.call(["convert",image_type+":"+path_join(input_path,cdir,file),"-sample","50%","temp_reduced_size.png"]):#fails on normal maps, so just copy them
|
||||
subprocess.call(["cp",path_join(input_path,cdir,file),path_join(output_path.format(fclass),cdir,file)])
|
||||
else:
|
||||
subprocess.call(["nvcompress","-bc3","temp_reduced_size.png",path_join(output_path.format(fclass),cdir,file)])
|
||||
else:
|
||||
subprocess.call(["convert",image_type+":"+path_join(input_path,cdir,file),"-sample","50%",image_type+":"+path_join(output_path.format(fclass),cdir,file)])#we use sample rather than an averaging filter to not break mask/rotation/... maps
|
||||
else:#not to be downsampled
|
||||
subprocess.call(["cp",path_join(input_path,cdir,file),path_join(output_path.format(fclass),cdir,file)])
|
||||
if "{0}" in output_path:
|
||||
subprocess.call(["mv",path_join(output_path.format("base"),"preferences.xml"),path_join(output_path.format("base"),"preferences-regions.xml")])
|
||||
if "extra-textures" in exclude_parts or "{0}" in output_path:
|
||||
prefs_in=open(path_join(input_path,"preferences.xml"),'r')
|
||||
prefs_out=open(path_join(output_path.format("base"),"preferences-noregions.xml" if "{0}" in output_path else "preferences.xml"),'w')
|
||||
prefs_str=prefs_in.read(None)
|
||||
prefs_in.close()
|
||||
prefs_str=prefs_str.replace("Materials/regions/materials.xml","Materials/default/materials.xml")#turn off regional textures
|
||||
prefs_out.write(prefs_str)
|
||||
prefs_out.close()
|
||||
def check_text_encoding(path,filelist=None,binary_types=(".png",".dds",".rgb",".RGB",".jpg",".wav",".WAV",".btg.gz",".xcf.gz",".xcf",".XCF","Thumbs.db",".blend",".bmp",".gif", ".3ds",".3DS",".pdf",".ttf",".txf",".htsvoice",".odt",".ods",".xls",".mp3",".zip",".tar.gz"),exclude_dirs=[".git","Timezone"]):
|
||||
"""filelist is intended for quick testing: see fgdata_nonascii_filelist.py"""
|
||||
def err_context(err):
|
||||
start=max(err.object.rfind(b'\n',0,err.start)+1,err.start-30,0)
|
||||
end=min(err.object.find(b'\n',err.start),err.start+30,len(err.object))
|
||||
if end<0:#not found
|
||||
end=err.start+30
|
||||
return err.object[start:end]
|
||||
def dict_print(d):
|
||||
return "".join(i[0]+"\n\t"+str(i[1])+"\n\t"+(str(i[1],encoding="utf-8",errors="replace")+"\n\t"+str(i[1],encoding="latin-1") if type(i[1])==bytes else "")+"\n" for i in sorted(d.items()))
|
||||
if filelist is None:
|
||||
filelist=[f for f in rfilelist(path,exclude_dirs) if not f.endswith(tuple(binary_types))]
|
||||
utf8_files={}
|
||||
withnulls_files=[]
|
||||
othertext_files={}
|
||||
mislabeled_xml={}
|
||||
mislabeled_xml_nocomments={}
|
||||
xml_encoding_pattern=re.compile(r'<\?xml.*?encoding="(\S+?)".*?\?>')
|
||||
xml_noencoding_pattern=re.compile(r'<\?xml.*?\?>')
|
||||
utf8_files_nocomments={}
|
||||
othertext_files_nocomments={}
|
||||
for fname in filelist:
|
||||
if os.path.splitext(fname)[1]==".gz":
|
||||
fobj=gzip.open(path_join(path,fname),mode='rb')
|
||||
else:
|
||||
fobj=open(path_join(path,fname),mode='rb')
|
||||
fdata=fobj.read()
|
||||
if b"\0" in fdata:
|
||||
withnulls_files.append(fname)#two look like corrupted files: Aircraft/p51d/Resources/WIP/P-51D-25NA.ac (hangs gedit,large block of nulls in middle) Docs/Serial/nmeafaq.txt (block of nulls at end), rest are probably-binary types
|
||||
continue
|
||||
if os.path.splitext(fname)[1] in (".xml",".svg",".xhtml"):
|
||||
encoding_mark=xml_encoding_pattern.search(str(fdata.split(b'\n',maxsplit=1)[0],encoding="utf-8"))
|
||||
if encoding_mark:
|
||||
encoding_mark=encoding_mark.group(1)
|
||||
if encoding_mark not in ("utf-8","UTF-8","ISO-8859-1"):
|
||||
mislabeled_xml_nocomments[fname]="unrecognised encoding "+encoding_mark
|
||||
encoding_mark=None
|
||||
else:
|
||||
if xml_noencoding_pattern.search(str(fdata.split(b'\n',maxsplit=1)[0],encoding="utf-8")):
|
||||
encoding_mark="utf-8"#XML standard allows either UTF-8 or UTF-16 (with BOM) in unlabeled files, but we only use -8
|
||||
else:
|
||||
encoding_mark=None
|
||||
#mislabeled_xml_nocomments[fname]="no xml header"
|
||||
else:
|
||||
encoding_mark=None
|
||||
try:
|
||||
fdata.decode(encoding="ascii")
|
||||
continue
|
||||
except UnicodeError as err:
|
||||
errline=err_context(err)
|
||||
try:
|
||||
fdata.decode(encoding="utf-8")
|
||||
utf8_files[fname]=errline
|
||||
if encoding_mark not in ("utf-8","UTF-8",None):
|
||||
mislabeled_xml[fname]=bytes(encoding_mark,encoding="ascii")+errline
|
||||
except UnicodeError as err:
|
||||
errline=err_context(err)
|
||||
othertext_files[fname]=errline
|
||||
if encoding_mark not in ("ISO-8859-1",None):
|
||||
mislabeled_xml[fname]=bytes(encoding_mark,encoding="ascii")+errline
|
||||
if os.path.basename(fname) in ("Read-Me.txt","README.txt","Readme.txt","readme.txt","LIS-MOI_GNU-GPL"):
|
||||
continue
|
||||
fdata_nocomments=strip_comments(fdata,filename=fname)
|
||||
if fdata_nocomments.startswith(bytes([0xef,0xbb,0xbf])) and fname not in mislabeled_xml:#UTF-8 BOM
|
||||
fdata_nocomments=fdata_nocomments[3:]
|
||||
try:
|
||||
fdata_nocomments.decode(encoding="ascii")
|
||||
continue
|
||||
except UnicodeError as err:
|
||||
errline=err_context(err)
|
||||
try:
|
||||
fdata_nocomments.decode(encoding="utf-8")
|
||||
if encoding_mark is None:
|
||||
utf8_files_nocomments[fname]=errline
|
||||
if encoding_mark not in ("utf-8","UTF-8",None):
|
||||
mislabeled_xml_nocomments[fname]=bytes(encoding_mark,encoding="ascii")+errline
|
||||
except UnicodeError as err:
|
||||
errline=err_context(err)
|
||||
if encoding_mark is None:
|
||||
othertext_files_nocomments[fname]=errline
|
||||
if encoding_mark not in ("ISO-8859-1",None):
|
||||
mislabeled_xml_nocomments[fname]=bytes(encoding_mark,encoding="ascii")+errline
|
||||
print("non-ASCII valid UTF-8:",dict_print(utf8_files),"\n\nother:",dict_print(othertext_files),"\n\nmislabeled/unrecognised",dict_print(mislabeled_xml),"\n\nwith nulls (binary or UTF-16/32):",sorted(withnulls_files),"\n\nnon-ASCII valid UTF-8 (outside BOM/comments):",dict_print(utf8_files_nocomments),"\n\nother (outside comments):",dict_print(othertext_files_nocomments),"\n\nmislabeled/unrecognised (outside comments)",dict_print(mislabeled_xml_nocomments))
|
||||
|
||||
2
fgrun
2
fgrun
Submodule fgrun updated: 90e936c01e...e038cc9be4
Submodule flightgear updated: 1a4993f08b...cbc8b26df7
@@ -61,8 +61,14 @@ echo "Assembling base package"
|
||||
cd $WORKSPACE
|
||||
|
||||
echo "Syncing base packages files from sphere.telascience.org"
|
||||
rsync -avz --filter 'merge base-package.rules' \
|
||||
|
||||
# a: archive mode
|
||||
# z: compress
|
||||
# delete: 'delete extraneous files from dest dirs'; avoid bug 1344
|
||||
# filter: use the rules in our rules file
|
||||
rsync -az --delete \
|
||||
--filter 'merge base-package.rules' \
|
||||
-e ssh jturner@sphere.telascience.org:/home/jturner/fgdata .
|
||||
|
||||
tar cjf output/FlightGear-$VERSION-data.tar.bz fgdata/
|
||||
tar cjf output/FlightGear-$VERSION-data.tar.bz2 fgdata/
|
||||
|
||||
|
||||
@@ -22,10 +22,6 @@ puts "Code signing identity is #{$codeSignIdentity}"
|
||||
|
||||
puts "osgVersion=#{osgVersion}, so-number=#{$osgSoVersion}"
|
||||
|
||||
$svnLibs = ['svn_client', 'svn_wc', 'svn_delta', 'svn_diff', 'svn_ra',
|
||||
'svn_ra_local', 'svn_repos', 'svn_fs', 'svn_fs_fs', 'svn_fs_util',
|
||||
'svn_ra_svn', 'svn_subr', 'svn_ra_neon']
|
||||
|
||||
def fix_install_names(object)
|
||||
#puts "fixing install names for #{object}"
|
||||
|
||||
@@ -44,31 +40,11 @@ $prefixDir=Dir.pwd + "/dist"
|
||||
dmgDir=Dir.pwd + "/image"
|
||||
srcDir=Dir.pwd + "/flightgear"
|
||||
|
||||
def fix_svn_install_names(object)
|
||||
$svnLibs.each do |l|
|
||||
fileName = "lib#{l}-1.0.dylib"
|
||||
newName = "@executable_path/../Frameworks/#{fileName}"
|
||||
`install_name_tool -change #{fileName} #{newName} #{object}`
|
||||
end
|
||||
end
|
||||
|
||||
def copy_svn_libs()
|
||||
puts "Copying Subversion client libraries"
|
||||
$svnLibs.each do |l|
|
||||
libFile = "lib#{l}-1.0.dylib"
|
||||
path = "#{$frameworksDir}/#{libFile}"
|
||||
`cp #{$prefixDir}/lib/#{libFile} #{$frameworksDir}`
|
||||
fix_svn_install_names(path)
|
||||
# `install_name_tool -id #{libFile} #{path}`
|
||||
end
|
||||
end
|
||||
|
||||
def code_sign(path)
|
||||
puts "Signing #{path}"
|
||||
`codesign -s "#{$codeSignIdentity}" #{path}`
|
||||
end
|
||||
|
||||
|
||||
puts "Erasing previous image dir"
|
||||
`rm -rf #{dmgDir}`
|
||||
|
||||
@@ -95,7 +71,8 @@ puts "Creating directory structure"
|
||||
`mkdir -p #{osgPluginsDir}`
|
||||
|
||||
puts "Copying binaries"
|
||||
bins = ['fgfs', 'fgjs', 'fgcom', 'fgviewer']
|
||||
`cp #{$prefixDir}/fgfs.app/Contents/MacOS/fgfs #{macosDir}/fgfs`
|
||||
bins = ['fgjs', 'fgcom', 'fgviewer']
|
||||
bins.each do |b|
|
||||
if !File.exist?("#{$prefixDir}/bin/#{b}")
|
||||
next
|
||||
@@ -104,7 +81,6 @@ bins.each do |b|
|
||||
outPath = "#{macosDir}/#{b}"
|
||||
`cp #{$prefixDir}/bin/#{b} #{outPath}`
|
||||
fix_install_names(outPath)
|
||||
fix_svn_install_names(outPath)
|
||||
end
|
||||
|
||||
puts "copying libraries"
|
||||
@@ -124,8 +100,6 @@ $osgPlugins.each do |p|
|
||||
fix_install_names("#{osgPluginsDir}/#{pluginFile}")
|
||||
end
|
||||
|
||||
copy_svn_libs()
|
||||
|
||||
# Macflightgear launcher
|
||||
puts "Copying Macflightgear launcher files"
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ cmake ..\simgear -G "Visual Studio 10" -DMSVC_3RDPARTY_ROOT=%WORKSPACE% -DCMAKE_
|
||||
cmake --build . --config Release --target INSTALL
|
||||
|
||||
cd ..\build-fg
|
||||
cmake ..\flightgear -G "Visual Studio 10" -DMSVC_3RDPARTY_ROOT=%WORKSPACE% -DCMAKE_INSTALL_PREFIX:PATH=%WORKSPACE%/install/msvc100/FlightGear -DFLTK_FLUID_EXECUTABLE=%WORKSPACE%/3rdParty/bin/fluid.exe -DBOOST_ROOT=%WORKSPACE%/Boost
|
||||
cmake ..\flightgear -G "Visual Studio 10" -DMSVC_3RDPARTY_ROOT=%WORKSPACE% -DCMAKE_INSTALL_PREFIX:PATH=%WORKSPACE%/install/msvc100/FlightGear -DPNG_LIBRARY=%WORKSPACE%/3rdParty/lib/libpng16.lib -DFLTK_FLUID_EXECUTABLE=%WORKSPACE%/3rdParty/bin/fluid.exe -DBOOST_ROOT=%WORKSPACE%/Boost
|
||||
cmake --build . --config Release --target INSTALL
|
||||
|
||||
cd ..\build-fgrun
|
||||
|
||||
@@ -10,21 +10,31 @@ REM construct information file to be read by Inno-setup
|
||||
|
||||
|
||||
set PATH=%WORKSPACE%\install\msvc100\OpenSceneGraph\bin;%PATH%
|
||||
|
||||
REM add 7-zip to the PATH
|
||||
set PATH=%PATH%;C:\Program Files\7-zip
|
||||
|
||||
REM indirect way to get command output into an environment variable
|
||||
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 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
|
||||
|
||||
ECHO #define FGVersion "%FLIGHTGEAR_VERSION%" > 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
|
||||
|
||||
set DATA_FILE=FlightGear-%FLIGHTGEAR_VERSION%-data
|
||||
|
||||
REM extract the data files
|
||||
7z e -aoa %DATA_FILE%.tar.bz2 && 7z x -aoa %DATA_FILE%.tar
|
||||
|
||||
REM run Inno-setup!
|
||||
REM use iscc instead of compil32 for better error reporting
|
||||
|
||||
Compil32 /cc FlightGear.iss
|
||||
|
||||
|
||||
|
||||
iscc FlightGear.iss
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
|
||||
|
||||
REM ExternalProject can't cleanly extract a zip into an existing directory
|
||||
REM Instead we extract to a subdir, and then move the directories we want
|
||||
REM using this bat file.
|
||||
|
||||
echo %CD%
|
||||
|
||||
md 3rdParty
|
||||
xcopy /Y /E winDeps/3rdParty 3rdParty
|
||||
|
||||
echo "Done copying Windows deps"
|
||||
IF EXIST winDeps/3rdParty (
|
||||
md 3rdParty
|
||||
xcopy /Y /E winDeps/3rdParty 3rdParty
|
||||
echo "Done copying Windows deps"
|
||||
) ELSE (
|
||||
IF EXIST winDeps/3rdParty.x64 (
|
||||
md 3rdParty.x64
|
||||
xcopy /Y /E winDeps/3rdParty.x64 3rdParty.x64
|
||||
echo "Done copying Windows deps"
|
||||
) ELSE (
|
||||
echo "Error: Windows deps not found"
|
||||
exit -1
|
||||
)
|
||||
)
|
||||
|
||||
Submodule maclauncher updated: 7e6406f35c...45a598c7cc
223
sgprops.py
Normal file
223
sgprops.py
Normal file
@@ -0,0 +1,223 @@
|
||||
# SAX for parsing
|
||||
from xml.sax import make_parser, handler, expatreader
|
||||
|
||||
# ElementTree for writing
|
||||
import xml.etree.cElementTree as ET
|
||||
|
||||
import re, os
|
||||
|
||||
class Node(object):
|
||||
def __init__(self, name = '', index = 0, parent = None):
|
||||
self._parent = parent
|
||||
self._name = name
|
||||
self._value = None
|
||||
self._index = 0
|
||||
self._children = []
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
return self._value
|
||||
|
||||
@value.setter
|
||||
def value(self, v):
|
||||
self._value = v
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def index(self):
|
||||
return self._index
|
||||
|
||||
@property
|
||||
def parent(self):
|
||||
return self._parent
|
||||
|
||||
def getChild(self, n, i=None, create = False):
|
||||
|
||||
if i is None:
|
||||
i = 0
|
||||
# parse name as foo[999] if necessary
|
||||
m = re.match(R"(\w+)\[(\d+)\]", n)
|
||||
if m is not None:
|
||||
n = m.group(1)
|
||||
i = int(m.group(2))
|
||||
|
||||
for c in self._children:
|
||||
if (c.name == n) and (c.index == i):
|
||||
return c
|
||||
|
||||
if create:
|
||||
c = Node(n, i, self)
|
||||
self._children.append(c)
|
||||
return c
|
||||
else:
|
||||
raise IndexError("no such child:" + str(n) + " index=" + str(i))
|
||||
|
||||
def addChild(self, n):
|
||||
i = 0
|
||||
|
||||
# find first free index
|
||||
usedIndices = frozenset(c.index for c in self.getChildren(n))
|
||||
while i < 1000:
|
||||
if i not in usedIndices:
|
||||
break
|
||||
i += 1
|
||||
|
||||
# create it via getChild
|
||||
return self.getChild(n, i, create=True)
|
||||
|
||||
def hasChild(self, nm):
|
||||
for c in self._children:
|
||||
if (c.name == nm):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def getChildren(self, n = None):
|
||||
if n is None:
|
||||
return self._children
|
||||
|
||||
return [c for c in self._children if c.name == n]
|
||||
|
||||
def getNode(self, path, cr = False):
|
||||
axes = path.split('/')
|
||||
nd = self
|
||||
for ax in axes:
|
||||
nd = nd.getChild(ax, create = cr)
|
||||
|
||||
return nd
|
||||
|
||||
def getValue(self, path, default = None):
|
||||
try:
|
||||
nd = self.getNode(path)
|
||||
return nd.value
|
||||
except:
|
||||
return default
|
||||
|
||||
def write(self, path):
|
||||
root = self._createXMLElement('PropertyList')
|
||||
|
||||
t = ET.ElementTree(root)
|
||||
t.write(path, 'utf-8')
|
||||
|
||||
def _createXMLElement(self, nm = None):
|
||||
if nm is None:
|
||||
nm = self.name
|
||||
|
||||
n = ET.Element(nm)
|
||||
|
||||
# value and type specification
|
||||
try:
|
||||
if self._value is not None:
|
||||
if isinstance(self._value, basestring):
|
||||
# don't call str() on strings, breaks the
|
||||
# encoding
|
||||
n.text = self._value
|
||||
else:
|
||||
# use str() to turn non-string types into text
|
||||
n.text = str(self._value)
|
||||
if isinstance(self._value, int):
|
||||
n.set('type', 'int')
|
||||
elif isinstance(self._value, float):
|
||||
n.set('type', 'double')
|
||||
elif isinstance(self._value, bool):
|
||||
n.set('type', "bool")
|
||||
except UnicodeEncodeError:
|
||||
print "Encoding error with", self._value, type(self._value)
|
||||
|
||||
# index in parent
|
||||
if (self.index != 0):
|
||||
n.set('n', self.index)
|
||||
|
||||
# children
|
||||
for c in self._children:
|
||||
n.append(c._createXMLElement())
|
||||
|
||||
return n;
|
||||
|
||||
|
||||
class PropsHandler(handler.ContentHandler):
|
||||
def __init__(self, root = None, path = None, dataDirPath = None):
|
||||
self._root = root
|
||||
self._path = path
|
||||
self._basePath = os.path.dirname(path)
|
||||
self._dataDirPath = dataDirPath
|
||||
self._locator = None
|
||||
|
||||
if root is None:
|
||||
# make a nameless root node
|
||||
self._root = Node("", 0)
|
||||
self._current = self._root
|
||||
|
||||
def setDocumentLocator(self, loc):
|
||||
self._locator = loc
|
||||
|
||||
def startElement(self, name, attrs):
|
||||
self._content = ''
|
||||
if (name == 'PropertyList'):
|
||||
return
|
||||
|
||||
index = 0
|
||||
if 'n' in attrs.keys():
|
||||
index = int(attrs['n'])
|
||||
|
||||
self._current = self._current.getChild(name, index, create=True)
|
||||
|
||||
if 'include' in attrs.keys():
|
||||
self.handleInclude(attrs['include'])
|
||||
|
||||
self._currentTy = None;
|
||||
if 'type' in attrs.keys():
|
||||
self._currentTy = attrs['type']
|
||||
|
||||
def handleInclude(self, includePath):
|
||||
if includePath.startswith('/'):
|
||||
includePath = includePath[1:]
|
||||
|
||||
p = os.path.join(self._basePath, includePath)
|
||||
if not os.path.exists(p):
|
||||
p = os.path.join(self._dataDirPath, includePath)
|
||||
if not os.path.exists(p):
|
||||
raise RuntimeError("include file not found", includePath, "at line", self._locator.getLineNumber())
|
||||
|
||||
readProps(p, self._current, self._dataDirPath)
|
||||
|
||||
def endElement(self, name):
|
||||
if (name == 'PropertyList'):
|
||||
return
|
||||
|
||||
try:
|
||||
# convert and store value
|
||||
self._current.value = self._content
|
||||
if self._currentTy == "int":
|
||||
self._current.value = int(self._content)
|
||||
if self._currentTy is "bool":
|
||||
self._current.value = bool(self._content)
|
||||
if self._currentTy is "double":
|
||||
self._current.value = float(self._content)
|
||||
except:
|
||||
print "Parse error for value:", self._content, "at line:", self._locator.getLineNumber(), "of:", self._path
|
||||
|
||||
self._current = self._current.parent
|
||||
|
||||
def characters(self, content):
|
||||
self._content += content
|
||||
|
||||
def endDocument(self):
|
||||
pass
|
||||
|
||||
@property
|
||||
def root(self):
|
||||
return self._root
|
||||
|
||||
|
||||
def readProps(path, root = None, dataDirPath = None):
|
||||
parser = make_parser()
|
||||
locator = expatreader.ExpatLocator( parser )
|
||||
h = PropsHandler(root, path, dataDirPath)
|
||||
h.setDocumentLocator(locator)
|
||||
parser.setContentHandler(h)
|
||||
parser.parse(path)
|
||||
return h.root
|
||||
2
simgear
2
simgear
Submodule simgear updated: b6c542b0e7...e973ff3cec
Reference in New Issue
Block a user