Ticket #34617: perl5-16.bash

File perl5-16.bash, 2.0 KB (added by BjarneDMat, 7 years ago)

my script that works directly on the port files

Line 
1#!/macports/bin/bash
2
3#
4#   ${1} :: type of conversion (hard|soft) (default:soft)
5#   ${2} :: old version of Perl5 (default: 12)
6#   ${3} :: new version of Perl5 (default: 16)
7#
8
9declare type=${1:-soft}
10declare -i versionOld=${2:-12}
11declare -v versionNew=${3:-16}
12
13declare -i counter=0
14declare -i totalPorts=$( port -q list | wc -l )
15declare -i portrev
16
17#
18# this time we're only interested in perl5.12
19#
20declare -i version=12
21
22#
23# find all the ports that are dependent on perl5.${version}
24# or p5.${version}-<something>
25#
26while read portname[0] portname[1] portname[2]
27do
28    (( counter++ ))
29    printf "\r[ %5i | %5i ] %-50s" ${counter} ${totalPorts} ${portname[2]}
30    fundet=$( \
31        grep -E -e "(perl5.${version}|p5.${version})" $(port file ${portname[0]}) \
32    |   wc -l )
33    if [ ${fundet} -gt 0 ]
34    then
35        cd  $(dirname $(port file ${portname[0]}))
36        echo ''
37
38        #
39        # splice the PortGroup command into the Portfile
40        #
41        portrev=$( grep -i "PortGroup.*perl5" 'Portfile' | wc -l )
42        if [ ${portrev} -eq 0 ]
43        then
44            mv  'Portfile' 'Portfile.orig'
45            sed -En -e "1,/^PortSystem/p" 'Portfile.orig' \
46                >  'Portfile'
47            echo -e "PortGroup        perl5  1.0" \
48                >> 'Portfile'
49            sed -E  -e "1,/^PortSystem/d" 'Portfile.orig' \
50                >> 'Portfile'
51            rm  'Portfile.orig'
52        fi
53
54        #
55        # replace the hardcoded values
56        #
57        case ${type} in
58        ( 'soft' )
59            sed -i '' -E \
60                -e "/^\#/!s/perl5.${versionOld}/perl\$\{perl5.major\}/g" \
61                -e "/^\#/!s/p5.${versionOld}/p\$\{perl5.major\}/g" \
62                'Portfile'
63        ;;
64        ( 'hard' )
65        ;;
66            sed -i '' -E \
67                -e "/^\#/!s/perl5.${versionOld}/perl5.${versionNew}/g" \
68                -e "/^\#/!s/p5.${versionOld}/p/5.${versionNew}g" \
69                'Portfile'
70        esac
71    fi
72done < <( port list )
73printf "\r[ %5i | %5i ] %-50s\n" ${counter} ${totalPorts} '*** FINISHED ***'