Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

PerlPowerTools as single Windows executable

by kaldor (Beadle)
on May 26, 2022 at 20:25 UTC ( [id://11144205]=CUFP: print w/replies, xml ) Need Help??

For a long time, I've been looking for a solution to bring Mac, Windows and Linux behaviour closer. My use case : I work in a corporate Windows environment (where you don't want to install unecessary software), but still would like a friendly CLI (I'm not great at it).

I use UnxUtils, BusyBox-w32 and other utils to have a bearable experience on Windows, but they don't provide the same features/options as you'll find on macOS or Linux. Then I heard about the PerlPowerTools and thought they'd be perfect for having the same behaviour across these platforms. Even though I somehow find them hard to use due to namespace conflict with system utilities.

So, I've updated (my fork of) the PerlPowerTools to behave like BusyBox and bundle them (with PAR::Packer) as a single Windows executable.

Result : You can call the tools similarly on all three platforms.

bin/cat bin/perlpowertools cat packed/perlpowertools.exe cat packed/cat.exe

The additional benefit is that I can complement my Windows toolbox with my own (Perl) scripts. For example, add ack! to perlpowertools.exe just by copying the singl e-file version to PerlPowerTools's bin directory and running the 'packer' script.

Any feedback, beta-testing or else are welcomed.

https://github.com/kal247/PerlPowerTools

Replies are listed 'Best First'.
Re: PerlPowerTools as single Windows executable
by stevieb (Canon) on May 26, 2022 at 21:42 UTC

    Can you please provide some examples of how your work is executed, and what its results are? ie. Show us what it does?

      Well, I'm afraid there's not much to show, but here are the 3 parts :

      1. The script 'util/packer' calls PAR::Packer 'pp' to bundle all tools (and POD) as 'PerlPowerTools.exe' :

      # build packed executable system( "pp", "-v", "-I", "lib", # include PerlPowerTools.pm, used for $VERSION "-F", $podstrip, # apply PodStrip but keep PerlPowerTools doc "-a", "$podfile;$packedpodfile", # include perldoc doc "-o", "$ppt_dir/packed/perlpowertools.exe", @tools ) == 0 or die "system failed: $?";

      2. The "fake" tool '~/perlpowertools/bin/perlpowertools' is a frontend/dispatcher to execute the tool supplied as first argument, either from '~/perlpowertools/bin' or from the (extracted) bundle :

      my $ppt_bin = defined $ENV{PAR_TEMP} ? "$ENV{PAR_TEMP}/inc/script" : d +irname(abs_path($0)); ... my $file = "$ppt_bin/$tool"; $0 = $tool; # for usage/warning/error messages my $return = do $file;

      3. The "fake" tool '~/perlpowertools/bin/perldoc' is the real perldoc, but with a custom search path to find POD in '~/perlpowertools/bin' or in the (extracted) bundle :

      # let perldoc also search in perlpowertools bin unshift @INC, dirname(abs_path(__FILE__));

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: CUFP [id://11144205]
Approved by LanX
Front-paged by LanX
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2024-04-16 10:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found