blob: 41337f68c34470055340725022264eca8c16c5aa [file] [log] [blame]
#!/bin/sh
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Simple script used to regenerate zip files used for unit-testing the
# crazy linker zip parser. This outputs a fragment of C code through 'xdd'
# on Linux that can be copied into crazy_linker_zip_test_data.cpp directly.
set -e
PROGNAME=$(basename "$0")
die () {
echo "ERROR: $@"
exit 1
}
TMP_DIR=/tmp/zip-files-tmp-$$
OUTPUT_DIR=/tmp/zip-files
generate_c_source () {
# Turn generated table const, it's cleaner.
# Also indent with 4 spaces (Chromium style).
xxd -i $1 | \
sed -e 's/^unsigned/const unsigned/g' | \
sed -e 's/^ 0x/ 0x/g'
}
# Preparing temporary directory.
mkdir -p $TMP_DIR
rm -rf $TMP_DIR/*
cd $TMP_DIR
cat <<EOF
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// AUTO-GENERATED BY $PROGNAME - DO NOT EDIT!!
#include "crazy_linker_zip_test_data.h"
namespace crazy {
namespace testing {
EOF
printf "// An empty zip archive\n"
touch empty_file
zip -q empty_archive empty_file
zip -q -d empty_archive empty_file 2>/dev/null
generate_c_source empty_archive.zip
printf "\n"
printf "// A zip archive with a single file named 'hello_world.txt' that\n"
printf "// contains the bytes for 'Hello World Hello World\\\n' without\n"
printf "// compression.\n"
echo "Hello World Hello World" > hello_world.txt
zip -q -0 hello.zip hello_world.txt
generate_c_source hello.zip
printf "\n"
printf "// The same zip archive, but with the file stored compressed.\n"
zip -q -9 hello_compressed.zip hello_world.txt
generate_c_source hello_compressed.zip
printf "\n"
LIB_SUBDIR=lib/test-abi
LIB1_NAME=libfoo.so
LIB2_NAME=crazy.libbar.so
LIB1_TEXT="This is the first test library!"
LIB2_TEXT="This is the second test library!"
cat <<EOF
// A zip archive with two uncompressed files under $LIB_SUBDIR/
// named '$LIB1_NAME' and '$LIB2_NAME', with the following data:
// - first lib: '$LIB1_TEXT'
// - second lib: '$LIB2_TEXT'
EOF
mkdir -p $LIB_SUBDIR
printf "This is the first test library!" > $LIB_SUBDIR/$LIB1_NAME
printf "This is the second test library!" > $LIB_SUBDIR/$LIB2_NAME
zip -q -0 lib_archive.zip $LIB_SUBDIR/$LIB1_NAME $LIB_SUBDIR/$LIB2_NAME
generate_c_source lib_archive.zip
cat <<EOF
} // namespace testing
} // namespace crazy
EOF
rm -rf $TMP_DIR