| 1 | #!/macports/bin/bash |
|---|
| 2 | |
|---|
| 3 | # |
|---|
| 4 | # change these to reflect your installation: |
|---|
| 5 | # |
|---|
| 6 | # prefix : where you have installed macports |
|---|
| 7 | # macportsRoot : where you want to store the modifed Portfiles |
|---|
| 8 | # |
|---|
| 9 | # ${1} :: type of conversion (hard|soft) (default:soft) |
|---|
| 10 | # ${2} :: old version of Perl5 (default: 12) |
|---|
| 11 | # ${3} :: new version of Perl5 (default: 16) |
|---|
| 12 | # |
|---|
| 13 | |
|---|
| 14 | declare prefix='/macports' |
|---|
| 15 | declare macportsRoot='/Volumes/Bjarne/WebServer/MacPorts/portfiles' |
|---|
| 16 | |
|---|
| 17 | declare type=${1:-soft} |
|---|
| 18 | declare -i versionOld=${2:-12} |
|---|
| 19 | declare -v versionNew=${3:-16} |
|---|
| 20 | |
|---|
| 21 | # don't change this |
|---|
| 22 | declare rsyncMacportsOrg='/var/macports/sources/rsync.macports.org/release/tarballs/ports' |
|---|
| 23 | |
|---|
| 24 | mkdir -pv ${macportsRoot} |
|---|
| 25 | declare -i counter=0 |
|---|
| 26 | declare -i totalPorts=$( port -q list | wc -l ) |
|---|
| 27 | declare -i portrev |
|---|
| 28 | |
|---|
| 29 | # |
|---|
| 30 | # this time we're only interested in perl5.12 |
|---|
| 31 | # |
|---|
| 32 | |
|---|
| 33 | cd "${macportsRoot}" |
|---|
| 34 | |
|---|
| 35 | # |
|---|
| 36 | # find all the ports that are dependent on perl5.${version} |
|---|
| 37 | # or p5.${version}-<something> |
|---|
| 38 | # |
|---|
| 39 | while read portname[0] portname[1] portname[2] |
|---|
| 40 | do |
|---|
| 41 | (( counter++ )) |
|---|
| 42 | printf "\r[ %5i | %5i ] %-50s" ${counter} ${totalPorts} ${portname[2]} |
|---|
| 43 | fundet=$( \ |
|---|
| 44 | grep -E -e "(perl5.${version}|p5.${version})" $(port file ${portname[0]}) \ |
|---|
| 45 | | wc -l ) |
|---|
| 46 | if [ ${fundet} -gt 0 ] |
|---|
| 47 | then |
|---|
| 48 | # |
|---|
| 49 | # copy the Portfile |
|---|
| 50 | # |
|---|
| 51 | echo '' |
|---|
| 52 | mkdir -p ${portname[2]} |
|---|
| 53 | cd ${portname[2]} |
|---|
| 54 | cp $(port file ${portname[0]}) 'Portfile.orig' |
|---|
| 55 | |
|---|
| 56 | # |
|---|
| 57 | # splice the PortGroup command into the Portfile |
|---|
| 58 | # |
|---|
| 59 | portrev=$( grep -i "PortGroup.*perl5" 'Portfile.orig' | wc -l ) |
|---|
| 60 | if [ ${portrev} -eq 0 ] |
|---|
| 61 | then |
|---|
| 62 | sed -En -e "1,/^PortSystem/p" 'Portfile.orig' \ |
|---|
| 63 | > 'Portfile' |
|---|
| 64 | echo -e "PortGroup perl5 1.0" \ |
|---|
| 65 | >> 'Portfile' |
|---|
| 66 | sed -E -e "1,/^PortSystem/d" 'Portfile.orig' \ |
|---|
| 67 | >> 'Portfile' |
|---|
| 68 | else |
|---|
| 69 | cp 'Portfile.orig' 'Portfile' |
|---|
| 70 | fi |
|---|
| 71 | |
|---|
| 72 | # |
|---|
| 73 | # replace the hardcoded values |
|---|
| 74 | # |
|---|
| 75 | case ${type} in |
|---|
| 76 | ( 'soft' ) |
|---|
| 77 | sed -i '' -E \ |
|---|
| 78 | -e "/^\#/!s/perl5.${versionOld}/perl\$\{perl5.major\}/g" \ |
|---|
| 79 | -e "/^\#/!s/p5.${versionOld}/p\$\{perl5.major\}/g" \ |
|---|
| 80 | 'Portfile' |
|---|
| 81 | ;; |
|---|
| 82 | ( 'hard' ) |
|---|
| 83 | ;; |
|---|
| 84 | sed -i '' -E \ |
|---|
| 85 | -e "/^\#/!s/perl5.${versionOld}/perl5.${versionNew}/g" \ |
|---|
| 86 | -e "/^\#/!s/p5.${versionOld}/p/5.${versionNew}g" \ |
|---|
| 87 | 'Portfile' |
|---|
| 88 | esac |
|---|
| 89 | |
|---|
| 90 | # |
|---|
| 91 | # create *.diff files for all the copied Portfiles |
|---|
| 92 | # |
|---|
| 93 | rm 'patch-Portfile.diff' 2>/dev/null |
|---|
| 94 | diff -u \ |
|---|
| 95 | $( port file ${portname[0]} ) \ |
|---|
| 96 | 'Portfile' \ |
|---|
| 97 | > 'patch-Portfile.diff' |
|---|
| 98 | |
|---|
| 99 | cd ${OLDPWD} |
|---|
| 100 | fi |
|---|
| 101 | done < <( port list ) |
|---|
| 102 | printf "\r[ %5i | %5i ] %-50s\n" ${counter} ${totalPorts} '*** FINISHED ***' |
|---|