Vous n'êtes pas identifié(e).
Futur nouvel inscrit, tu dois au préalable lire l'intégralité des 10 articles des règles, s'il te plaît. Tout nouveau compte qui ne respecte pas les règles sera supprimé par l'administration.
salut,
bon comme je suis résolument orienté progrès, et rejette les injonctions à passer pour soit-disant «moderne» en faisant croire que les régressions sont des avancées, et qu'en plus je suis une feignasse, j'ai écrit une petite fonction pour mon shell favori, à savoir zsh. Bon en vrai il devrait être tout à fait possible de l'utiliser avec bash, il suffirait de faire un wrapper, mais j'ai pas essayé.
Bon j'espère que j'ai pas trop réduit mon public
Il s'agit d'avoir dans une commande fgfs (ça s'invente pas), de quoi mettre à jour, compiler, lancer, ... le tout hyper facilement
Il s'appuie sur deux variables d'environnement qui sont des chemins absolus (ainsi la fonction peut être lancée depuis n'importe où).
$FGDIR : l'endroit où se trouve tout le fourbis (sources, binaires, data),
$FGADDON : l'endroit où que t'as mis le gros paquet d'addons
Contrairement au très connu download_and_compile.sh, rien n'est prévu pour installer des dépendances ou les compiler. Mais comme on reprend la même structure, une compilation entamée avec download_and_compile.sh devrait fonctionner tout aussi bien avec la fonction fgfs.
$FGDIR doit avoir la structure suivante au moins au début (rappel: les sources sont déjà présentes). Par exemple:
.
└── source/
├── fgdata/
├── flightgear/
├── OpenSceneGraph/
├── simgear/
├── flightgear.specific
└── ordre
Le fichier $FGDIR/source/ordre contient l'ordre des trucs à compiler. ce sont les noms des répertoires contenant les soures, relatifs à $FGDIR/source
simgear
flightgear
par exemple.
Le(s) fichier(s) *.specific contiennent les options spécifiques pour la configuration avant compilation, par exmeple pour flightgear
cmake_options+=("-DFG_DATA_DIR:PATH=$FGDIR/source/fgdata")
cmake_options+=("-DTRANSLATIONS_SRC_DIR:PATH=$FGDIR/source/fgdata/Translations")
Ça compile dans $FGDIR/build, et ça va installer dans $FGDIR/install. Simple, efficace, rien à dire de plus. S'il y a des soucis de compilation c'est qu'il manque une dépendance ou que le code contient une erreur.
$ fgfs [--update|--update-source|--update-data|--update-build]
--update-data: ça met à jour ton $FGADDON
--update-source: ça met à jour tout ce qui est svn ou git dans ton $FGDIR/source
--update-build: ça contruit à partir des sources depuis $FGDIR/source (ça va créer $FGDIR/install et $FGDIR/build)
--update: ça fait tout ce qui est expliqué juste au-dessus
mais le plus gros intérêt ne réside pas là. Trop galère de taper les «moins moins aircraft égale blablabla espace moins moins...», pis ça change tout le temps, revenir dans l'historique est relou pour chercher l'option d'appareil ou de piste de départ. Bref, tout ça c'est du passé !
$ fgfs cap10b lflg
ah ça c'est plus joli, mais y a mieux !
$ fgfs lflg:\?
Parkings LFLG:
GA_Ramp_1
GA_Ramp_10
GA_Ramp_11
GA_Ramp_12
GA_Ramp_13
GA_Ramp_14
GA_Ramp_15
GA_Ramp_2
GA_Ramp_3
GA_Ramp_4
GA_Ramp_5
GA_Ramp_6
GA_Ramp_7
GA_Ramp_8
GA_Ramp_9
Pas mal non ? (note qu'il faut échapper le «?» sinon le shell va mal l'interpréter, ou sinon écrit "lflg:?" (avec des quotes).
On veut démarrer depuis la position de parking GA_Ramp_12 avec l'appareil par défaut (le c172p) ? c'est ton droit:
$ fgfs lfgl:GA_Ramp_12
Si la position de parking n'est pas trouvée c'est comme si t'avais rien dit.
Bon, en fait tu préfères commencer sur un bout de piste à LFPG (mais tu sais pas comment elle s'appelle). Soyons fous (même motif, même punition pour le «?»):
$ fgfs lfpg+\?
Runways LFPG:
08L
26R
08R
26L
09L
27R
09R
27L
Il ne te reste qu'à montrer tes talents au monde entier sur un serveur multijoueur, avec ton avion favori:
$ fgfs lfpg+09L 767-300ER mp01
comme il fait jour et que c'est moins rigolo que de nuit en pleine tempête, tu peux utiliser toutes les options qui vont bien et qui sont listées par l'option --help
$ fgfs --help
Utilisation : fgfs [ option ... ]
Options générales:
--help, -h Affiche les principales options de ligne de
commande
--verbose, -v Affiche toutes les options de ligne de commande
...
--trace-read=property Trace les accès en lecture pour une
propriété
--trace-write=property Trace les accès en écriture pour une
propriété
le tout présenté dans ton pager favori. Pareil pour la liste des appareils:
$ fgfs --show-aircraft
Available aircraft:
14bis 14bis Santos DUMONT (YASim)
21 Santos Dumont N 21 Demoiselle (YASim)
212 Bell 212 "TwinHuey"
412 Bell 412 "Griffon"
...
ZF_Navy_free_balloon US Navy ZF free gas balloon
ZivkoEdge540 Zivko EDGE 540
ZLT-NT Zeppelin NT07 airship
ZLT-NT-copilot Zeppelin NT07 multiplayer copilot
Enfin toute dernière nouveauté, tu est l'heureux utilisateur de TerraFS, et pour un coin particulier tu as envie de passer par TerraFS plutôt que par TerraSync (oui ça peut arriver, discutable, mais ça peut), encore une solution pour toi (note le «-» devant le nom de l'aéroport):
$ fgfs cap10b -lflg
bien sûr les possibilités de lister ou choisir les pistes ou les places de parking restent les mêmes.
Voilà, je crois que j'ai fait le tour, ah, non j'oubliais, évidemment y a pas d'ordre défini pour les options, tu fais comme tu veux. Je colle ici le bout de code kivabien, si ça peut être utile à quelqu'un:
#attention c'est pas du BASHung, c'est du nietZScHe :)
FGDIR=$HOME/scripts/flightgear
FGADDON=$HOME/.fgfs/flightgear-fgaddon
function fgfs () {
local fgfs_source=$FGDIR/source
local fgfs_build=$FGDIR/build
local fgfs_install=$FGDIR/install
function update_fg () {
case $1 in
data)
svn up $FGADDON
;;
source)
typeset -A control_system_data=(
git pull
svn up
)
for control_system update_command in ${(kv)control_system_data}; do
find $fgfs_source \
-maxdepth 2 \
-mindepth 1 \
-type d \
-name .${control_system} \
-printf "\n[ %h ]\n" \
-execdir ${control_system} ${update_command} \;
done
unset control_system_data control_system update_command
;;
build)
local simultaneous=$(nproc)
local previously_installed=()
mkdir -p $fgfs_install
for component in $(<$fgfs_source/ordre); do
# TODO: prendre en compte les cas sans cmake
title="*** $component:u ***"
printf "\n%s\n%s\n%s\n" "${(l:${#title}::*:)}" "$title" "${(l:${#title}::*:)}"
local cmake_options=("-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=$fgfs_install/$component")
[[ ${#previously_installed[@]} -gt 0 ]] \
&& cmake_options+=(${(j. .)${:--DCMAKE_PREFIX_PATH=$fgfs_install/${^previously_installed}}})
cmake_options+=("-j$simultaneous")
test -e $fgfs_source/${component}.specific && source $fgfs_source/${component}.specific
mkdir -p $fgfs_build/$component
cd $fgfs_build/$component
echo cmake ${cmake_options[@]} $fgfs_source/$component
cmake ${cmake_options[@]} $fgfs_source/$component \
&& make -j$simultaneous \
&& make install \
|| {
echo "erreur construction $component"
return
}
previously_installed+=($component)
cd -
done
unset component
;;
esac
}
function ld_library_path () {
# TODO: prendre en compte les éventuels caractères gênants comme "espace" ou ":" dans $FGDIR
# TODO: ne pas surajouter si déjà présent dans LD_LIBRARY_PATH
print ${(j,:,):-$(ls -d $FGDIR/install/*/lib)}${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}
}
local aircrafts="$FGADDON/Aircraft"
local fgfs_args=("--fg-root=$FGDIR/source/fgdata")
local aircraft=
local airport=
if [[ -o BASH_REMATCH ]]; then
local bash_rematch_set=1
fi
for fgfs_arg in $@; do
if test ${fgfs_arg#--} = ${fgfs_arg}; then
############ APPAREIL DANS FGADDON ?
if test -n "$(find $aircrafts -maxdepth 2 -type f -name ${fgfs_arg}-set.xml -print -quit)"; then
fgfs_args+=("--aircraft=$fgfs_arg")
fgfs_args+=("--fg-aircraft=$FGADDON/Aircraft")
############ APPAREIL DANS FGDIR/source/fgdata ?
elif official_aircraft=$(find "$fgfs_source/fgdata/Aircraft" -maxdepth 2 -type f -name ${fgfs_arg}-set.xml -printf "%h" -quit) && test -n "$official_aircraft"; then
fgfs_args+=("--aircraft=$fgfs_arg")
fgfs_args+=("--aircraft-dir=$official_aircraft")
unset official_aircraft
############ SERVEUR MULTIPLAY ?
elif set -o BASH_REMATCH && [[ $fgfs_arg =~ "^mp([0-9]+)$" ]]; then
fgfs_args+=("--multiplay=out,10,mpserver${BASH_REMATCH[2]}.flightgear.org,5000")
test -z "$bash_rematch_set" && set +o BASH_REMATCH
############ AEROPORT ?
else
local candidate_airport=${fgfs_arg%:*}; [[ $candidate_airport == $fgfs_arg ]] && candidate_airport=${fgfs_arg%+*}
local candidate_parking=${fgfs_arg#*:}; [[ $candidate_parking == $fgfs_arg ]] && unset candidate_parking
local candidate_runway=${fgfs_arg#*+}; [[ $candidate_runway == $fgfs_arg ]] && unset candidate_runway
local terrafs=${candidate_airport#-}
if [[ $terrafs != $candidate_airport && -x $HOME/.fgfs/terrafs && -d $HOME/.fgfs/terrafs.d ]]; then
candidate_airport=$terrafs
$HOME/.fgfs/terrafs $HOME/.fgfs/terrafs.d
fgfs_args+=(--fg-scenery=$HOME/.fgfs/terrafs.d)
fgfs_args+=(--disable-terrasync)
local scenes_dir=$HOME/.fgfs/terrafs.d
else
fgfs_args+=(--terrasync-dir=$HOME/.fgfs/TerraSync)
fgfs_args+=(--enable-terrasync)
local scenes_dir=$HOME/.fgfs/TerraSync
fi
local airport_data="$scenes_dir/Airports/$candidate_airport[1]:u/$candidate_airport[2]:u/$candidate_airport[3]:u/${candidate_airport:u}"
if [[ -a "${airport_data}.threshold.xml" ]]; then
fgfs_args+=(--airport=$candidate_airport)
if [[ -a "${airport_data}.groundnet.xml" && -n "$candidate_parking" ]]; then
if test $candidate_parking = '?'; then
echo "Parkings ${candidate_airport:u}:"
sed -rn "/<parkingList/,/parkingList>/s/^.* name=\"([^\"]+).*$/\1/p" ${airport_data}.groundnet.xml
return
elif sed -rn "/<parkingList/,/parkingList>/p" ${airport_data}.groundnet.xml | grep -q "name=\"${candidate_parking}\""; then
fgfs_args+=("--parking-id='$candidate_parking'")
fi
elif test -n "$candidate_runway"; then
if test $candidate_runway = '?'; then
echo "Runways ${candidate_airport:u}:"
sed -rn 's|^.*<rwy>(.+)</rwy>.*$|\1|p' ${airport_data}.threshold.xml
return
elif grep -q "<rwy>${candidate_runway}</rwy>" ${airport_data}.threshold.xml; then
fgfs_args+=("--runway=$candidate_runway")
fi
fi
fi
fi
######## AUTRE OPTION
else
case $fgfs_arg in
--update(-data|-source|-build|))
for up in ${${=${fgfs_arg#--update}:-data source build}#-}; do
update_fg $up
done
unset up
return
;;
--(show-aircraft|help))
typeset -A complement=(
--show-aircraft --fg-aircraft=$FGADDON/Aircraft
--help --verbose
)
export LD_LIBRARY_PATH=$(ld_library_path)
$FGDIR/install/flightgear/bin/fgfs $fgfs_arg ${complement[$fgfs_arg]} 2>/dev/null | pager
unset complement
return
;;
*)
fgfs_args+=($fgfs_arg);;
esac
fi
done
unset fgfs_arg
# test -z "$aircraft" && echo "avion non trouvé" && return
# test -z "$airport" && echo "aéroport inconnu" && return
export LD_LIBRARY_PATH=$(ld_library_path)
echo ${fgfs_args[@]}
# TODO: ne lancer avec primusrun que si c'est nécesaire, d'autres solution existent ?
primusrun $FGDIR/install/flightgear/bin/fgfs ${fgfs_args[@]}
if grep -q $HOME/.fgfs/terrafs.d /proc/mounts; then
fusermount -u $HOME/.fgfs/terrafs.d
fi
unset fgfs_args
}
bien sûr il faut sourcer pour que ce soit utilisable
[edit]cette fonction a désormais toute sa place sur mon git[/edit]
Bon vols confinés
@+
zakh
Dernière modification par zakharov (16/04/2020 15:25:11)
le zkv1000
Debian Bookworm sur i7-9750H, 16G, NV GeForce GTX 1660 Ti MaxQ 6Go
FG next compilé à la mano
Joystick TM T. Stick X avec fichier de conf perso
Hors ligne
Bonjour,
jusque là je me suis contenté de "download_and_compile" en essayant de suivre ses évolutions. Et en fait il fait bien le job, et en bidouillant un peu on peut même lui faire faire quelques exravagances
Mais pourquoi pas tester une autre voie, je m'y mettrais un prochain jour de pluie...
Pour lancer fg, ma foi le lanceur intégré fait finalement, après une longue gestation, bien l'affaire. Mais il peut être intéressant d'avoir une alternative sous la main.
A suivre donc... et merci pour le partage.
Intel i5-9400F, 16Go Ram, Nvidia GTX1660Ti, Linux Mint
Hors ligne
Il y a déjà fort longtemps, du temps où d&c.sh n'existait pas encore, ou bien existait déjà, mais n'était utilisé par pratiquement personne, et n'était pas encore supporté par FG, mais, seulement par son créateur, Angelo Brisa, zakh avait déjà une spécialité, les scripts, avec un lien, et une véritable bibliothèque.
On pouvait s'attendre à ce qu'il récidive !
Moi aussi je me pencherai sur la question un peu plus tard pour avoir un peu mieux compris.
En attendant je vais continuer à prendre de la hauteur.
Pas en décollant avec FG.
En remontant pour finir de démousser mes toitures...
André. anciennement taureau89_9
Debian Testing Amd64. CM Sabertooth 990FX, FX8350, 32 Go Ram DDR3 1866 Mhz, GTX 1060 6Go, DD 2To Sata 3, THRUSTMASTER T.Flight StickX, FG 2020.4.0 Git.
Hors ligne
j'avoue c'est une marotte
avec un lien, et une véritable bibliothèque
y en a qui se souviennent de ./compile ! il était chouette, me suis bien éclaté dessus
[edit]en cherchant sur le forum j'ai remarqué qu'il était encore là ! je laisse lien on sait jamais [/edit]
@+
zakh
Dernière modification par zakharov (16/04/2020 14:52:56)
le zkv1000
Debian Bookworm sur i7-9750H, 16G, NV GeForce GTX 1660 Ti MaxQ 6Go
FG next compilé à la mano
Joystick TM T. Stick X avec fichier de conf perso
Hors ligne