nimectos <tt4g-x...@dea.spamcon.org> wrote:

>Steffen Schwigon <s...@renormalist.net> wrote:
>
>>nimectos <tt4g-x...@dea.spamcon.org> writes:
>>> I want to point CPAN or some tool to the module .tar.gz files I want
>>> to add, and get them installed.
>>
>>If you already have the .tgz files,then you just need to unpack them by
>>yourself and then use “cpan .” inside such a subdir:
>>
>>  cd /tmp/
>>  tar xzf Some-Lib.tar.gz          # or -Z/-j for unzip/bunzip2 etc.
>>  cd /tmp/Some-Lib
>>  cpan .
>>
>>Kind regards,
>>Steffen 
>
>Thank you SO much - that's the solution I needed!  I did see "cpan ." in
>the man CPAN page but it immediately talks about downloading dependencies
>so I'd skipped it thinking it was little different than regular cpan use.
>
>I came up with this for my current simple needs of a handful of packages,
>with no dependencies I don't already have installed, all are .tar.gz, and
>I only need installs, not upgrades:
>
>for MOD_ARCHIVE in *.tar.gz
>do
>    ARCH_CONTENT=`tar -xzvf $MOD_ARCHIVE 2> /dev/null`
>    [ $? -ne 0 ] && echo "ERROR: Could not extract $MOD_ARCHIVE,
>skipping." && continue
>    ARCH_DIR=`echo "$ARCH_CONTENT" | head -1 | sed -r 's_^([^/]+)/.*_\1_'`
>    [ $? -ne 0 -o "$ARCH_DIR" == "" ] && echo "ERROR: Could not determine
>archive dir for $MOD_ARCHIVE, skipping." && continue
>    pushd $ARCH_DIR &> /dev/null
>    MOD_NAME=`grep -hP "^[ \t]+'*NAME'*[ \t]*=>" * 2> /dev/null | sed -r
>"s/.*NAME.*[^']+'([^']+)'.*/\1/" | sed -r
>"s/.*NAME.*.*q\[([^]]+)\].*/\1/"`
>    [ $? -ne 0 -o "$MOD_NAME" == "" ] && echo "ERROR: Could not determine
>module name for $MOD_ARCHIVE, skipping." && popd &> /dev/null && continue
>    CHECK_CMD="use $MOD_NAME; exit 0;"
>    perl -e '$CHECK_CMD' &> /dev/null
>    if [ $? -eq 0 ]
>    then
>        echo "Already installed: $MOD_NAME"
>    else
>        echo "Installing: $MOD_NAME from $MOD_ARCHIVE ..."
>        nice cpan . >> ../cpan-stdout.log 2>>../cpan-stderr.log
>        [ $? -ne 0 ] && echo "ERROR: 'cpan .' returned error doing
>$MOD_NAME, see *.log."
>    fi
>    popd &> /dev/null
>done
>
>
>

Correcting myself: change two CHECK lines to this:
    CHECK_CMD="perl -e 'use $MOD_NAME; exit 0;' &> /dev/null"
    eval $CHECK_CMD


Reply via email to