Vim xxd hexdump utility
This is a build2
package for the Vim
xxd
executable. It creates
a hexdump of a given file or standard input. It can also convert a hexdump
back to its original binary form. One notable xxd
mode is -i|--include
,
which generates a C array definition of the input that can be used to embed
binary data into C/C++ programs. This functionality is the primary reason for
the use of this package.
Note that the xxd
executable in this page provides build2
metadata.
Usage
To start using xxd
in your project, add the following build-time depends
value to your manifest
, adjusting the version constraint as appropriate:
depends: * xxd >= 8.2.3075
Then import the executable in your buildfile
:
import! [metadata] xxd = xxd%exe{xxd}
While the default output of the -i|--include
mode is a bit old school (using
unsigned int
instead of size_t
) and the array/length names are derived
from the input file name (including directories), xxd
can also produce just
the array values allowing us to wrap it into an array of our choice. Below are
some examples of build2
ad hoc recipes:
# Use the default output. Array and length names will be binary_bin and
# binary_bin_len.
#
cxx{binary}: file{binary.bin} $xxd
{{
i = $path($<[0])
env --cwd $directory($i) -- $xxd -i $leaf($i) >$path($>)
}}
# Use just the file name without the extension for names and size_t for
# length.
#
cxx{binary}: file{binary.bin} $xxd
{{
i = $path($<[0]) # Input.
o = $path($>) # Output.
n = $name($<[0]) # Array name.
echo "#include <cstddef>" >$o
echo "unsigned char $n[] = {" >>$o
$xxd -i <$i >>$o
echo "};" >>$o
echo "std::size_t $(n)_len = sizeof \($n\);" >>$o
}}
# Generate both the header with declarations and the source file with
# definitions.
#
<{hxx cxx}{binary}>: file{binary.bin} $xxd
{{
i = $path($<[0]) # Input.
h = $path($>[0]) # Output header.
s = $path($>[1]) # Output source.
n = $name($<[0]) # Array name.
# Get the position of the last byte (in hex).
#
$xxd -s -1 -l 1 $i | sed -n -e 's/^([0-9a-f]+):.*$/\1/p' - | set pos
if ($empty($pos))
exit "unable to extract input size from xxd output"
end
# Write the header and source.
#
echo "#pragma once" >$h
echo "extern unsigned char $n[0x$pos + 1];" >>$h
echo "unsigned char $n[0x$pos + 1] = {" >$s
$xxd -i <$i >>$s
echo '};' >>$s
}}
license | X11 OR LGPL-2.0-only |
---|---|
project | xxd |
url | github.com/vim/vim/tree/master/src/xxd |
version | 8.2.3075+2 (20200204) |
---|---|
repository | https://pkg.cppget.org/1/stable |
depends | 0 |
requires | 1; host |
reviews | +1 |