213 lines
7.9 KiB
Plaintext
213 lines
7.9 KiB
Plaintext
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
|
##@require instinc/wobase
|
||
|
|
||
|
######################################################################
|
||
|
# Informations sur des bundles
|
||
|
|
||
|
function dump_frameworks() {
|
||
|
# Afficher les frameworks utilisés par une application
|
||
|
if [ "$SYSTEM_NAME" == "Darwin" ]; then
|
||
|
clspth="$APP_MACOSCLSPTH"
|
||
|
else
|
||
|
clspth="$APP_UNIXCLSPTH"
|
||
|
fi
|
||
|
cat "$1/$clspth" | nl2lf | grep '\.framework' | grep -v "^#" | grep -v "APPROOT/" | grep -v "WOROOT/" | awk '
|
||
|
{
|
||
|
if (match($0, /[^\/]*\.framework/) != 0) {
|
||
|
print substr($0, RSTART, RLENGTH)
|
||
|
}
|
||
|
}' | sort -u
|
||
|
}
|
||
|
|
||
|
function get_app_winclspth() {
|
||
|
# calculer la valeur de APP_WINCLSPTH pour l'application $1
|
||
|
if [ -f "$1/$APP_WINCLSPTH" ]; then
|
||
|
echo "$APP_WINCLSPTH"
|
||
|
else
|
||
|
local clspth
|
||
|
array_from_lines clspth "$(list_files "$1/$APP_WINCLSPTHDIR" | grep -i clsspath.txt)"
|
||
|
if [ ${#clspth[*]} -eq 1 ]; then
|
||
|
echo "$APP_WINCLSPTHDIR/$clspth"
|
||
|
else
|
||
|
echo "$APP_WINCLSPTH"
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
######################################################################
|
||
|
# Correction de bundles
|
||
|
|
||
|
function verifix_bundle() {
|
||
|
# vérifier et corriger le bundle $1. Pour une application, on vérifie que le
|
||
|
# script est exécutable. Pour un framework, on vérifie que le framework est
|
||
|
# conforme au modèle des framework générés par WebObjects.
|
||
|
local bundir="$1"
|
||
|
if is_woappdir "$bundir"; then
|
||
|
local script="$bundir/$(basename "$bundir" .woa)"
|
||
|
if [ ! -x "$script" ]; then
|
||
|
chmod +x "$script"
|
||
|
fi
|
||
|
|
||
|
elif is_wofwdir "$bundir"; then
|
||
|
[ -L "$bundir/Resources" ] && return
|
||
|
|
||
|
local filename
|
||
|
|
||
|
if [ ! -L "$bundir/Resources" ]; then
|
||
|
rm -rf "$bundir/Versions/A/Resources"
|
||
|
mkdir -p "$bundir/Versions/A/Resources"
|
||
|
list_all "$bundir/Resources" | while read filename; do
|
||
|
cp_R "$bundir/Resources/$filename" "$bundir/Versions/A/Resources"
|
||
|
done
|
||
|
rm -rf "$bundir/Resources"
|
||
|
fi
|
||
|
if [ ! -L "$bundir/WebServerResource" ]; then
|
||
|
rm -rf "$bundir/Versions/A/WebServerResources"
|
||
|
mkdir -p "$bundir/Versions/A/WebServerResources"
|
||
|
list_all "$bundir/WebServerResources" | while read filename; do
|
||
|
cp_R "$bundir/WebServerResources/$filename" "$bundir/Versions/A/WebServerResources"
|
||
|
done
|
||
|
rm -rf "$bundir/WebServerResources"
|
||
|
fi
|
||
|
local cwd="$(pwd)"
|
||
|
cd "$bundir/Versions"
|
||
|
if [ -e Current ]; then
|
||
|
if [ ! -L Current -a -d Current ]; then
|
||
|
rm -rf Current
|
||
|
else
|
||
|
rm -f Current
|
||
|
fi
|
||
|
fi
|
||
|
ln -s A Current
|
||
|
cd ..
|
||
|
ln -s Versions/Current/Resources Resources
|
||
|
ln -s Versions/Current/WebServerResources WebServerResources
|
||
|
cd "$cwd"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function add_framework() {
|
||
|
# ajouter le framework $2 (nom de base ou chemin absolu) à l'application
|
||
|
# dans le répertoire $1
|
||
|
local bundir="$1" framework="$2" frameworks jars jar line
|
||
|
local app_winclspth="$(get_app_winclspth "$bundir")"
|
||
|
|
||
|
endswith "$framework" .framework || framework="$framework.framework"
|
||
|
array_from_lines frameworks "$(dump_frameworks "$bundir")"
|
||
|
if ! array_contains frameworks "$framework"; then
|
||
|
if beginswith "$framework" /; then
|
||
|
# on a donné un chemin absolu
|
||
|
array_from_lines jars "$(list_files "$framework/$FW_SRVJAVADIR" "*.jar")"
|
||
|
if [ -z "${jars[*]}" ]; then
|
||
|
eerror "Impossible de trouver les fichiers du framework $framework
|
||
|
dans $WOFRAMEWORKS"
|
||
|
else
|
||
|
for jar in "${jars[@]}"; do
|
||
|
line="$framework/$FW_SRVJAVADIR/$jar"
|
||
|
echo "$jar" >>"$bundir/$APP_UNIXCLSPTH"
|
||
|
echo "$jar" >>"$bundir/$APP_MACOSCLSPTH"
|
||
|
echo "${jar//\//\\}" >>"$bundir/$app_winclspth"
|
||
|
done
|
||
|
fi
|
||
|
else
|
||
|
# on a donné juste le nom du framework
|
||
|
array_from_lines jars "$(list_files "$WOFRAMEWORKS/$framework/$FW_SRVJAVADIR" "*.jar")"
|
||
|
if [ -z "${jars[*]}" ]; then
|
||
|
eerror "Impossible de trouver les fichiers du framework $framework
|
||
|
dans $WOFRAMEWORKS"
|
||
|
else
|
||
|
for jar in "${jars[@]}"; do
|
||
|
line="LOCALROOT/Library/WebObjects/Applications/Frameworks/$framework/$FW_SRVJAVADIR/$jar"
|
||
|
echo "$line" >>"$bundir/$APP_UNIXCLSPTH"
|
||
|
echo "$line" >>"$bundir/$APP_MACOSCLSPTH"
|
||
|
echo "${line//\//\\}" >>"$bundir/$app_winclspth"
|
||
|
done
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function searchreplace_classpath() {
|
||
|
# Dans les fichiers classpath de l'application $1, remplacer $2 par $3. Si
|
||
|
# $3 est vide, la ligne est supprimée
|
||
|
local bundir="$1" search="$2" replace="$3" scriptunx scriptwin
|
||
|
local app_winclspth="$(get_app_winclspth "$bundir")"
|
||
|
|
||
|
[ -n "$search" ] || return 1
|
||
|
search="${search//\//\\/}"; replace="${replace//\//\\/}"
|
||
|
if [ -n "$replace" ]; then
|
||
|
scriptunx="s/${search}/${replace}/g"
|
||
|
else
|
||
|
scriptunx="/${search}/d"
|
||
|
fi
|
||
|
search="${search//\\\//\\\\}"; replace="${replace//\\\//\\\\}"
|
||
|
if [ -n "$replace" ]; then
|
||
|
scriptwin="s/${search}/${replace}/g"
|
||
|
else
|
||
|
scriptwin="/${search}/d"
|
||
|
fi
|
||
|
|
||
|
nl2lf "$bundir/$APP_UNIXCLSPTH"; sedi "$scriptunx" "$bundir/$APP_UNIXCLSPTH"
|
||
|
nl2lf "$bundir/$APP_MACOSCLSPTH"; sedi "$scriptunx" "$bundir/$APP_MACOSCLSPTH"
|
||
|
nl2lf "$bundir/$app_winclspth"; sedi "$scriptwin" "$bundir/$app_winclspth"; nl2crlf "$bundir/$app_winclspth"
|
||
|
}
|
||
|
|
||
|
function remove_framework() {
|
||
|
# supprimer le framework $2 (nom de base) de l'application dans le
|
||
|
# répertoire $1
|
||
|
local bundir="$1" framework="$2" frameworks
|
||
|
|
||
|
endswith "$framework" .framework || framework="$framework.framework"
|
||
|
array_from_lines frameworks "$(dump_frameworks "$bundir")"
|
||
|
if array_contains frameworks "$framework"; then
|
||
|
searchreplace_classpath "$bundir" "$framework/"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function fix_jars_case() {
|
||
|
# Vérifier que la casse des jars de tous les frameworks utilisés par
|
||
|
# l'application $1 est conforme au système de fichier
|
||
|
local bundir="$1" clspth jars jar fwdir fwname jarname jarnamefs
|
||
|
if [ "$SYSTEM_NAME" == "Darwin" ]; then
|
||
|
clspth="$APP_MACOSCLSPTH"
|
||
|
else
|
||
|
clspth="$APP_UNIXCLSPTH"
|
||
|
fi
|
||
|
array_from_lines jars "$(cat "$bundir/$clspth" | nl2lf | grep '\.framework' | grep -v "^#" | grep -v "APPROOT/" | grep -v "WOROOT/" | awk '
|
||
|
{
|
||
|
if (match($0, /[^\/]*\.framework/) != 0) {
|
||
|
print
|
||
|
}
|
||
|
}' | sort -u)"
|
||
|
for jar in "${jars[@]}"; do
|
||
|
! endswith "$jar" .jar && ! endswith "$jar" .zip && continue
|
||
|
|
||
|
if beginswith "$jar" LOCALROOT; then
|
||
|
fwname="${jar##*/Frameworks/}"; fwname="${fwname%%/*}"
|
||
|
fwdir="$WOFRAMEWORKS"
|
||
|
else
|
||
|
fwdir="${jar%/*.framework/*}"
|
||
|
fwname="${jar##/*.framework/}";
|
||
|
fwname="${jar:0:$((${#jar}-${#fwname}-1))}"; fwname="${fwname##*/}"
|
||
|
fi
|
||
|
jarname="${jar##*/}"
|
||
|
|
||
|
if [ ! -d "$fwdir/$fwname" ]; then
|
||
|
eerror "$(basename "$bundir"): $fwname: ce framework n'existe pas"
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
array_from_lines jarnamefs "$(list_files "$fwdir/$fwname/$FW_SRVJAVADIR" "*.jar" | grep -i "$jarname")"
|
||
|
if [ ${#jarnamefs[*]} -eq 0 ]; then
|
||
|
eerror "$(basename "$bundir"): $fwname: $jarname n'existe pas"
|
||
|
elif [ ${#jarnamefs[*]} -gt 1 ]; then
|
||
|
eerror "$(basename "$bundir"): $fwname: il existe plusieurs jars $jarname"
|
||
|
else
|
||
|
if [ "$jarname" != "$jarnamefs" ]; then
|
||
|
einfo "$(basename "$bundir"): $fwname: $jarnamefs"
|
||
|
searchreplace_classpath "$bundir" "$fwname/$FW_SRVJAVADIR/$jarname" "$fwname/$FW_SRVJAVADIR/$jarnamefs"
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
}
|