213 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # -*- 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
 | |
| }
 |