From 6d84d03c0bbefaf3b44ab010528fd7d72ee3a330 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 3 Apr 2015 12:14:26 -0400 Subject: [PATCH] add script to easily check the sizes of structures --- scripts/check-padding | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 scripts/check-padding diff --git a/scripts/check-padding b/scripts/check-padding new file mode 100755 index 000000000..b10d34b73 --- /dev/null +++ b/scripts/check-padding @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +set -eu +set -o pipefail + +cpp="/tmp/alignment.cpp" +app="/tmp/alignment" + +function usage() { + echo "Usage:" + echo "" + echo "./scripts/rebuild.sh [header] [class name]" + echo "" + echo "Please pass a header file and a class name" + echo "" + echo " ./scripts/check-padding include/mapnik/attribute.hpp mapnik::attribute" + echo "" + exit 1 + +} + +function add() { + echo $1 >> ${cpp} +} + +CXX=${CXX:-clang++} + +function compile() { + ${CXX} -o ${app} ${cpp} -Wpadded -I./ -isystem ./mason_packages/.link/include `mapnik-config --all-flags` -Ideps -Lsrc -Ideps/agg/include -Iinclude +} + +if [[ ${1:-unset} == "unset" ]] || [[ ${2:-unset} == "unset" ]] || [[ $@ == '-h' ]] || [[ $@ == '--help' ]]; then + usage +fi + +echo '' > ${cpp} + +add "#include " +add "#include " + +add "#include \"$1\"" + +add "" + +add '#define REPORT(type) std::clog << "sizeof(" #type ") " << sizeof(type) << "\n";' + +add "int main() {" +add "" + +add "REPORT(std::string)" +add "REPORT(unsigned int)" +add "REPORT(int)" +add "REPORT(bool)" +add "REPORT(std::vector)" +add "REPORT(std::size_t)" + +add "REPORT($2)" + +add "return 0;" +add "}" + +compile +${app}