mirror of
https://github.com/rizsotto/scan-build.git
synced 2025-12-16 12:00:08 +01:00
update functional test cases
This commit is contained in:
@@ -8,35 +8,30 @@ matrix:
|
|||||||
python: 2.7
|
python: 2.7
|
||||||
env:
|
env:
|
||||||
- TRAVIS_CLANG=clang-4.0
|
- TRAVIS_CLANG=clang-4.0
|
||||||
- TRAVIS_CLANGPP=clang++-4.0
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
sudo: false
|
sudo: false
|
||||||
python: 3.3
|
python: 3.3
|
||||||
env:
|
env:
|
||||||
- TRAVIS_CLANG=clang-4.0
|
- TRAVIS_CLANG=clang-4.0
|
||||||
- TRAVIS_CLANGPP=clang++-4.0
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
sudo: false
|
sudo: false
|
||||||
python: 3.4
|
python: 3.4
|
||||||
env:
|
env:
|
||||||
- TRAVIS_CLANG=clang-4.0
|
- TRAVIS_CLANG=clang-4.0
|
||||||
- TRAVIS_CLANGPP=clang++-4.0
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
sudo: false
|
sudo: false
|
||||||
python: 3.5
|
python: 3.5
|
||||||
env:
|
env:
|
||||||
- TRAVIS_CLANG=clang-4.0
|
- TRAVIS_CLANG=clang-4.0
|
||||||
- TRAVIS_CLANGPP=clang++-4.0
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
sudo: false
|
sudo: false
|
||||||
python: 3.6
|
python: 3.6
|
||||||
env:
|
env:
|
||||||
- TRAVIS_CLANG=clang-4.0
|
- TRAVIS_CLANG=clang-4.0
|
||||||
- TRAVIS_CLANGPP=clang++-4.0
|
|
||||||
- os: osx
|
- os: osx
|
||||||
osx_image: xcode6.4
|
osx_image: xcode6.4
|
||||||
language: generic
|
language: generic
|
||||||
@@ -54,6 +49,9 @@ addons:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
packages:
|
packages:
|
||||||
- clang-4.0
|
- clang-4.0
|
||||||
|
- cmake
|
||||||
|
- scons
|
||||||
|
- qt4-qmake
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- uname
|
- uname
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ install:
|
|||||||
# about it being out of date.
|
# about it being out of date.
|
||||||
- "pip install --disable-pip-version-check --user --upgrade pip"
|
- "pip install --disable-pip-version-check --user --upgrade pip"
|
||||||
|
|
||||||
|
# Install the build dependencies of the project. If some dependencies contain
|
||||||
|
# compiled extensions and are not provided as pre-built wheel packages,
|
||||||
|
# pip will build them from source using the MSVC compiler matching the
|
||||||
|
# target Python version and architecture
|
||||||
|
- "pip install pep8 lit"
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
# Build the compiled extension
|
# Build the compiled extension
|
||||||
- "pip install ."
|
- "pip install ."
|
||||||
|
|||||||
90
libear/ear.c
90
libear/ear.c
@@ -26,6 +26,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <locale.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -415,6 +416,11 @@ static void bear_report_call(char const *const argv[]) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
char const * const saved_locale = strdup(setlocale(LC_ALL, NULL));
|
||||||
|
if (0 == saved_locale) {
|
||||||
|
perror("bear: strdup for locale");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
const char *cwd = getcwd(NULL, 0);
|
const char *cwd = getcwd(NULL, 0);
|
||||||
if (0 == cwd) {
|
if (0 == cwd) {
|
||||||
perror("bear: getcwd");
|
perror("bear: getcwd");
|
||||||
@@ -441,23 +447,28 @@ static void bear_report_call(char const *const argv[]) {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
free((void *)cwd);
|
free((void *)cwd);
|
||||||
|
// Restore locale.
|
||||||
|
setlocale(LC_ALL, saved_locale);
|
||||||
|
free((void *)saved_locale);
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bear_write_json_report(int fd, char const *const cmd[], char const *const cwd, pid_t pid) {
|
static int bear_write_json_report(int fd, char const *const cmd[], char const *const cwd, pid_t pid) {
|
||||||
|
setlocale(LC_ALL, "en_US.UTF-8");
|
||||||
|
|
||||||
if (0 > dprintf(fd, "{ \"pid\": %d, \"cmd\": [", pid))
|
if (0 > dprintf(fd, "{ \"pid\": %d, \"cmd\": [", pid))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for (char const *const *it = cmd; (it) && (*it); ++it) {
|
for (char const *const *it = cmd; (it) && (*it); ++it) {
|
||||||
char const *const sep = (it != cmd) ? "," : "";
|
char const *const sep = (it != cmd) ? "," : "";
|
||||||
const size_t buffer_size = 2 * strlen(*it);
|
const size_t buffer_size = 6 * strlen(*it);
|
||||||
char buffer[buffer_size];
|
char buffer[buffer_size];
|
||||||
if (-1 == bear_encode_json_string(*it, buffer, buffer_size))
|
if (-1 == bear_encode_json_string(*it, buffer, buffer_size))
|
||||||
return -1;
|
return -1;
|
||||||
if (0 > dprintf(fd, "%s \"%s\"", sep, buffer))
|
if (0 > dprintf(fd, "%s \"%s\"", sep, buffer))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
const size_t buffer_size = 2 * strlen(cwd);
|
const size_t buffer_size = 6 * strlen(cwd);
|
||||||
char buffer[buffer_size];
|
char buffer[buffer_size];
|
||||||
if (-1 == bear_encode_json_string(cwd, buffer, buffer_size))
|
if (-1 == bear_encode_json_string(cwd, buffer, buffer_size))
|
||||||
return -1;
|
return -1;
|
||||||
@@ -468,56 +479,61 @@ static int bear_write_json_report(int fd, char const *const cmd[], char const *c
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int bear_encode_json_string(char const *const src, char *const dst, size_t const dst_size) {
|
static int bear_encode_json_string(char const *const src, char *const dst, size_t const dst_size) {
|
||||||
char const *src_it = src;
|
size_t const wsrc_length = mbstowcs(NULL, src, 0);
|
||||||
char const *const src_end = src + strlen(src);
|
wchar_t wsrc[wsrc_length + 1];
|
||||||
|
if (mbstowcs((wchar_t *)&wsrc, src, wsrc_length + 1) != wsrc_length) {
|
||||||
|
perror("bear: mbstowcs");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
wchar_t const *wsrc_it = (wchar_t const *)&wsrc;
|
||||||
|
wchar_t const *const wsrc_end = wsrc_it + wsrc_length;
|
||||||
|
|
||||||
char *dst_it = dst;
|
char *dst_it = dst;
|
||||||
char *const dst_end = dst + dst_size;
|
char *const dst_end = dst + dst_size;
|
||||||
|
|
||||||
for (; src_it != src_end; ++src_it, ++dst_it) {
|
for (; wsrc_it != wsrc_end; ++wsrc_it) {
|
||||||
if (dst_it == dst_end)
|
if (dst_it >= dst_end) {
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
// Insert an escape character before control characters.
|
// Insert an escape character before control characters.
|
||||||
switch (*src_it) {
|
switch (*wsrc_it) {
|
||||||
case '\b':
|
case L'\b':
|
||||||
case '\f':
|
dst_it += snprintf(dst_it, 3, "\\b");
|
||||||
case '\n':
|
break;
|
||||||
case '\r':
|
case L'\f':
|
||||||
case '\t':
|
dst_it += snprintf(dst_it, 3, "\\f");
|
||||||
case '"':
|
break;
|
||||||
case '\\':
|
case L'\n':
|
||||||
*dst_it++ = '\\';
|
dst_it += snprintf(dst_it, 3, "\\n");
|
||||||
|
break;
|
||||||
|
case L'\r':
|
||||||
|
dst_it += snprintf(dst_it, 3, "\\r");
|
||||||
|
break;
|
||||||
|
case L'\t':
|
||||||
|
dst_it += snprintf(dst_it, 3, "\\t");
|
||||||
|
break;
|
||||||
|
case L'"':
|
||||||
|
dst_it += snprintf(dst_it, 3, "\\\"");
|
||||||
|
break;
|
||||||
|
case L'\\':
|
||||||
|
dst_it += snprintf(dst_it, 3, "\\\\");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if ((*wsrc_it < L' ') || (*wsrc_it > 127)) {
|
||||||
|
dst_it += snprintf(dst_it, 7, "\\u%04x", (unsigned int)*wsrc_it);
|
||||||
|
} else {
|
||||||
|
*dst_it++ = (char)*wsrc_it;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Transform some of the control characters.
|
|
||||||
switch (*src_it) {
|
|
||||||
case '\b':
|
|
||||||
*dst_it = 'b';
|
|
||||||
break;
|
|
||||||
case '\f':
|
|
||||||
*dst_it = 'f';
|
|
||||||
break;
|
|
||||||
case '\n':
|
|
||||||
*dst_it = 'n';
|
|
||||||
break;
|
|
||||||
case '\r':
|
|
||||||
*dst_it = 'r';
|
|
||||||
break;
|
|
||||||
case '\t':
|
|
||||||
*dst_it = 't';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
*dst_it = *src_it;
|
|
||||||
}
|
}
|
||||||
}
|
if (dst_it < dst_end) {
|
||||||
if (dst_it == dst_end)
|
|
||||||
return -1;
|
|
||||||
// Insert a terminating 0 value.
|
// Insert a terminating 0 value.
|
||||||
*dst_it = 0;
|
*dst_it = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* update environment assure that chilren processes will copy the desired
|
/* update environment assure that chilren processes will copy the desired
|
||||||
* behaviour */
|
* behaviour */
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/input.json" << EOF
|
cat > "${root_dir}/input.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
@@ -46,7 +46,7 @@ cat >> "${root_dir}/input.json" << EOF
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> ${checker_file} << EOF
|
cat > ${checker_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ set -o xtrace
|
|||||||
root_dir=$1
|
root_dir=$1
|
||||||
mkdir -p "${root_dir}/src"
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
cat >> "${root_dir}/src/broken.c" << EOF
|
cat > "${root_dir}/src/broken.c" << EOF
|
||||||
#if NDEBUG
|
#if NDEBUG
|
||||||
#else
|
#else
|
||||||
EOF
|
EOF
|
||||||
@@ -28,7 +28,7 @@ cat >> "${root_dir}/src/broken.c" << EOF
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/input.json" << EOF
|
cat > "${root_dir}/input.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/input.json" << EOF
|
cat > "${root_dir}/input.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
@@ -31,7 +31,7 @@ cat >> "${root_dir}/input.json" << EOF
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> ${checker_file} << EOF
|
cat > ${checker_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ touch "${root_dir}/src/empty.c"
|
|||||||
touch "${root_dir}/src/ignore/empty.c"
|
touch "${root_dir}/src/ignore/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -45,7 +45,7 @@ EOF
|
|||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> ${checker_file} << EOF
|
cat > ${checker_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
build_file="${root_dir}/configure"
|
build_file="${root_dir}/configure"
|
||||||
cat >> "${build_file}" << EOF
|
cat > "${build_file}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
@@ -36,7 +36,7 @@ EOF
|
|||||||
chmod +x "${build_file}"
|
chmod +x "${build_file}"
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> "${checker_file}" << EOF
|
cat > "${checker_file}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/input.json" << EOF
|
cat > "${root_dir}/input.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
@@ -46,7 +46,7 @@ cat >> "${root_dir}/input.json" << EOF
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> ${checker_file} << EOF
|
cat > ${checker_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/input.json" << EOF
|
cat > "${root_dir}/input.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/run.sh" << EOF
|
cat > "${root_dir}/run.sh" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ set -o xtrace
|
|||||||
root_dir=$1
|
root_dir=$1
|
||||||
mkdir -p "${root_dir}/src"
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
cat >> "${root_dir}/src/names.c" << EOF
|
cat > "${root_dir}/src/names.c" << EOF
|
||||||
char const * const first = FIRST;
|
char const * const first = FIRST;
|
||||||
char const * const last = LAST;
|
char const * const last = LAST;
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ int main() {
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -36,7 +36,7 @@ EOF
|
|||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> ${checker_file} << EOF
|
cat > ${checker_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/unkown_compiler_recognised
|
||||||
|
# RUN: cd %T/unkown_compiler_recognised; %{scan-build} --use-cc=%T/unkown_compiler_recognised/wrapper --use-c++=%T/unkown_compiler_recognised/wrapper++ -o . --intercept-first --override-compiler ./run.sh | ./check.sh
|
||||||
|
# RUN: cd %T/unkown_compiler_recognised; %{scan-build} --use-cc=%T/unkown_compiler_recognised/wrapper --use-c++=%T/unkown_compiler_recognised/wrapper++ -o . --override-compiler ./run.sh | ./check.sh
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── wrapper
|
||||||
|
# ├── wrapper++
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── check.sh
|
||||||
|
# └── src
|
||||||
|
# └── broken.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
|
wrapper_file="${root_dir}/wrapper"
|
||||||
|
cat > ${wrapper_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
true
|
||||||
|
EOF
|
||||||
|
chmod +x ${wrapper_file}
|
||||||
|
|
||||||
|
wrapperxx_file="${root_dir}/wrapper++"
|
||||||
|
cat > ${wrapperxx_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
true
|
||||||
|
EOF
|
||||||
|
chmod +x ${wrapperxx_file}
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CC -c -o ./src/empty.o ./src/broken.c;
|
||||||
|
\$CXX -c -o ./src/empty.o ./src/broken.c;
|
||||||
|
|
||||||
|
cd src
|
||||||
|
\$CC -c -o ./empty.o ./broken.c;
|
||||||
|
\$CXX -c -o ./empty.o ./broken.c;
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
check_two="${root_dir}/check.sh"
|
||||||
|
cat > "${check_two}" << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
out_dir=\$(sed -n 's/\(.*\) Report directory created: \(.*\)/\2/p')
|
||||||
|
if [ -d "\$out_dir" ]
|
||||||
|
then
|
||||||
|
ls "\$out_dir/index.html"
|
||||||
|
ls \$out_dir/report-*.html
|
||||||
|
else
|
||||||
|
echo "output directory should exists"
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
chmod +x "${check_two}"
|
||||||
@@ -25,7 +25,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
wrapper_file="${root_dir}/wrapper"
|
wrapper_file="${root_dir}/wrapper"
|
||||||
cat >> ${wrapper_file} << EOF
|
cat > ${wrapper_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
@@ -35,7 +35,7 @@ EOF
|
|||||||
chmod +x ${wrapper_file}
|
chmod +x ${wrapper_file}
|
||||||
|
|
||||||
wrapperxx_file="${root_dir}/wrapper++"
|
wrapperxx_file="${root_dir}/wrapper++"
|
||||||
cat >> ${wrapperxx_file} << EOF
|
cat > ${wrapperxx_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
@@ -45,7 +45,7 @@ EOF
|
|||||||
chmod +x ${wrapperxx_file}
|
chmod +x ${wrapperxx_file}
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -61,7 +61,7 @@ EOF
|
|||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
check_two="${root_dir}/check.sh"
|
check_two="${root_dir}/check.sh"
|
||||||
cat >> "${check_two}" << EOF
|
cat > "${check_two}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
12
tests/functional/cases/intercept/end-to-end/Input/SConstruct
Normal file
12
tests/functional/cases/intercept/end-to-end/Input/SConstruct
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
env = Environment()
|
||||||
|
env['CXX'] = 'c++'
|
||||||
|
env['CC'] = 'cc'
|
||||||
|
env.Append(CPPDEFINES={'RELEASE_BUILD' : 'First release \"quoted\"'})
|
||||||
|
|
||||||
|
some_lib = env.SharedLibrary(target="some_lib",
|
||||||
|
source=["lib/foo.cpp", "lib/bar.cc"])
|
||||||
|
some_app = env.Program(target="some_app",
|
||||||
|
source=["bin/far.cxx", "bin/boo.c++"],
|
||||||
|
CPPPATH=Split('#lib'),
|
||||||
|
LIBPATH=['.'],
|
||||||
|
LIBS=['some_lib'])
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
TARGET = some_app
|
||||||
|
|
||||||
|
INCLUDEPATH += ../lib
|
||||||
|
LIBS += -L../lib -lsome_lib
|
||||||
|
|
||||||
|
HEADERS += boo.h++
|
||||||
|
|
||||||
|
SOURCES += boo.c++
|
||||||
|
SOURCES += far.cxx
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#include "boo.h++"
|
||||||
|
#include <foo.h>
|
||||||
|
|
||||||
|
void t2(int i);
|
||||||
|
|
||||||
|
void t1()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 100; ++i)
|
||||||
|
{
|
||||||
|
if (98 == i)
|
||||||
|
{
|
||||||
|
t2(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void t2(int i)
|
||||||
|
{
|
||||||
|
if (9 == i)
|
||||||
|
{
|
||||||
|
int k = i + 9;
|
||||||
|
++k;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
acme::t1();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
t1();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef boo_h
|
||||||
|
#define boo_h
|
||||||
|
|
||||||
|
void t1();
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#include <foo.h>
|
||||||
|
#include "boo.h++"
|
||||||
|
|
||||||
|
void b1()
|
||||||
|
{
|
||||||
|
t1();
|
||||||
|
acme::t1();
|
||||||
|
}
|
||||||
11
tests/functional/cases/intercept/end-to-end/Input/lib/bar.cc
Normal file
11
tests/functional/cases/intercept/end-to-end/Input/lib/bar.cc
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#include "foo.h"
|
||||||
|
|
||||||
|
namespace acme
|
||||||
|
{
|
||||||
|
|
||||||
|
void b1()
|
||||||
|
{
|
||||||
|
t1();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
#include "foo.h"
|
||||||
|
|
||||||
|
namespace acme
|
||||||
|
{
|
||||||
|
|
||||||
|
void t2(int i);
|
||||||
|
|
||||||
|
void t1()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 100; ++i)
|
||||||
|
{
|
||||||
|
if (98 == i)
|
||||||
|
{
|
||||||
|
t2(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void t2(int i)
|
||||||
|
{
|
||||||
|
if (9 == i)
|
||||||
|
{
|
||||||
|
int k = i + 9;
|
||||||
|
--k;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
11
tests/functional/cases/intercept/end-to-end/Input/lib/foo.h
Normal file
11
tests/functional/cases/intercept/end-to-end/Input/lib/foo.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef foo_h
|
||||||
|
#define foo_h
|
||||||
|
|
||||||
|
namespace acme
|
||||||
|
{
|
||||||
|
|
||||||
|
void t1();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
TEMPLATE = lib
|
||||||
|
TARGET = some_lib
|
||||||
|
|
||||||
|
HEADERS += foo.h
|
||||||
|
|
||||||
|
SOURCES += foo.cpp
|
||||||
|
SOURCES += bar.cc
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
|
CONFIG -= qt
|
||||||
|
|
||||||
|
SUBDIRS += lib
|
||||||
|
SUBDIRS += bin
|
||||||
24
tests/functional/cases/intercept/end-to-end/check_files.py
Normal file
24
tests/functional/cases/intercept/end-to-end/check_files.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
|
EXPECTED = frozenset(['far.cxx', 'bar.cc', 'foo.cpp', 'boo.c++'])
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('input', type=argparse.FileType('r'))
|
||||||
|
args = parser.parse_args()
|
||||||
|
# file is open, parse the json content
|
||||||
|
input = json.load(args.input)
|
||||||
|
# just get file names
|
||||||
|
result = set([os.path.basename(entry['file']) for entry in input])
|
||||||
|
return 0 if result == EXPECTED else 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
5
tests/functional/cases/intercept/end-to-end/qmake.ft
Normal file
5
tests/functional/cases/intercept/end-to-end/qmake.ft
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# REQUIRES: qmake,preload
|
||||||
|
# RUN: mkdir -p %T/qmake_build
|
||||||
|
# RUN: cd %T/qmake_build; qmake-qt4 ../../Input/qmake.pro
|
||||||
|
# RUN: cd %T/qmake_build; %{intercept-build} --cdb qmake.json make
|
||||||
|
# RUN: %{python} %S/check_files.py %T/qmake_build/qmake.json
|
||||||
4
tests/functional/cases/intercept/end-to-end/scons.ft
Normal file
4
tests/functional/cases/intercept/end-to-end/scons.ft
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# REQUIRES: scons,preload
|
||||||
|
# RUN: mkdir -p %T/scons_build
|
||||||
|
# RUN: cd %T/scons_build; %{intercept-build} --cdb scons.json scons -Y ../../Input
|
||||||
|
# RUN: %{python} %S/check_files.py %T/scons_build/scons.json
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# REQUIRES: preload
|
# REQUIRES: preload
|
||||||
# RUN: cmake -B%T -H%S
|
# RUN: cmake -B%T -H%S
|
||||||
# RUN: make -C %T
|
# RUN: make -C %T
|
||||||
@@ -27,45 +27,45 @@ mkdir -p "${root_dir}/src"
|
|||||||
cp "${test_input_dir}/compile_error.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/compile_error.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
"\$CC" -c -o src/broken.o -Dver=1 src/broken.c;
|
\$CC -c -Dver=1 src/broken.c;
|
||||||
"\$CXX" -c -o src/broken.o -Dver=2 src/broken.c;
|
\$CXX -c -Dver=2 src/broken.c;
|
||||||
|
|
||||||
cd src
|
cd src
|
||||||
"\$CC" -c -o broken.o -Dver=3 broken.c;
|
\$CC -c -Dver=3 broken.c;
|
||||||
"\$CXX" -c -o broken.o -Dver=4 broken.c;
|
\$CXX -c -Dver=4 broken.c;
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/broken.o -Dver=1 src/broken.c",
|
"command": "cc -c -Dver=1 src/broken.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/broken.c"
|
"file": "src/broken.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/broken.o -Dver=2 src/broken.c",
|
"command": "c++ -c -Dver=2 src/broken.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/broken.c"
|
"file": "src/broken.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "cc -c -o broken.o -Dver=3 broken.c",
|
"command": "cc -c -Dver=3 broken.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "broken.c"
|
"file": "broken.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o broken.o -Dver=4 broken.c",
|
"command": "c++ -c -Dver=4 broken.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "broken.c"
|
"file": "broken.c"
|
||||||
}
|
}
|
||||||
@@ -26,45 +26,45 @@ mkdir -p "${root_dir}/src"
|
|||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
${clang} -c -o src/empty.o -Dver=1 src/empty.c;
|
${clang} -c -Dver=1 src/empty.c;
|
||||||
${clangpp} -c -o src/empty.o -Dver=2 src/empty.c;
|
${clangpp} -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
cd src
|
cd src
|
||||||
${clang} -c -o empty.o -Dver=3 empty.c;
|
${clang} -c -Dver=3 empty.c;
|
||||||
${clangpp} -c -o empty.o -Dver=4 empty.c;
|
${clangpp} -c -Dver=4 empty.c;
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "cc -c -o empty.o -Dver=3 empty.c",
|
"command": "cc -c -Dver=3 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o empty.o -Dver=4 empty.c",
|
"command": "c++ -c -Dver=4 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -35,29 +35,34 @@ set -o xtrace
|
|||||||
|
|
||||||
echo "hi there \"people\""
|
echo "hi there \"people\""
|
||||||
echo "hi again"
|
echo "hi again"
|
||||||
|
echo "מה שלומך?"
|
||||||
|
echo "Как дела?"
|
||||||
|
echo "[1mThis line might cause an exception in json load[0m"
|
||||||
|
|
||||||
"\$CC" -c -o src/empty.o -Dver=1 src/empty.c;
|
\$CC -c -Dver=1 src/empty.c &
|
||||||
"\$CXX" -c -o src/empty.o -Dver=2 src/empty.c;
|
\$CXX -c -Dver=2 src/empty.c &
|
||||||
|
|
||||||
bash -c "\
|
bash -c "\
|
||||||
mkdir -p ./this/that \
|
mkdir -p ./this/that; \
|
||||||
touch ./this/that \
|
touch ./this/that; \
|
||||||
rm -rf ./this"
|
rm -rf ./this;"
|
||||||
|
|
||||||
|
wait
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
@@ -27,19 +27,19 @@ mkdir -p "${root_dir}/src"
|
|||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
"\$CC" -c -o src/empty.o -Dver=1 src/empty.c &
|
\$CC -c -Dver=1 src/empty.c &
|
||||||
"\$CXX" -c -o src/empty.o -Dver=2 src/empty.c &
|
\$CXX -c -Dver=2 src/empty.c &
|
||||||
|
|
||||||
cd src
|
cd src
|
||||||
|
|
||||||
"\$CC" -c -o empty.o -Dver=3 empty.c &
|
\$CC -c -Dver=3 empty.c &
|
||||||
"\$CXX" -c -o empty.o -Dver=4 empty.c &
|
\$CXX -c -Dver=4 empty.c &
|
||||||
|
|
||||||
wait
|
wait
|
||||||
|
|
||||||
@@ -47,28 +47,28 @@ true;
|
|||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "cc -c -o empty.o -Dver=3 empty.c",
|
"command": "cc -c -Dver=3 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o empty.o -Dver=4 empty.c",
|
"command": "c++ -c -Dver=4 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
: RUN: %s %T\successful_build
|
||||||
|
: RUN: cd %T\successful_build; %{expect} --cdb expected.json --command "cc -c -Dver=1 src\empty.c" --file "src\empty.c"
|
||||||
|
: RUN: cd %T\successful_build; %{expect} --cdb expected.json --command "c++ -c -Dver=2 src\empty.c" --file "src\empty.c"
|
||||||
|
: RUN: cd %T\successful_build; %{expect} --cdb expected.json --command "cc -c -Dver=3 src\empty.c" --file "src\empty.c"
|
||||||
|
: RUN: cd %T\successful_build; %{expect} --cdb expected.json --command "c++ -c -Dver=4 src\empty.c" --file "src\empty.c"
|
||||||
|
: RUN: cd %T\successful_build; %{intercept-build} --override-compiler --cdb wrapper.json run.bat
|
||||||
|
: RUN: cd %T\successful_build; %{cdb_diff} wrapper.json expected.json
|
||||||
|
|
||||||
|
set root_dir=%1
|
||||||
|
|
||||||
|
mkdir "%root_dir%"
|
||||||
|
mkdir "%root_dir%\src"
|
||||||
|
|
||||||
|
copy /y nul "%root_dir%\src\empty.c"
|
||||||
|
|
||||||
|
echo ^
|
||||||
|
%%CC%% -c -Dver=1 src\empty.c ^
|
||||||
|
|
||||||
|
^
|
||||||
|
|
||||||
|
%%CXX%% -c -Dver=2 src\empty.c ^
|
||||||
|
|
||||||
|
^
|
||||||
|
|
||||||
|
%%CC%% -c -Dver=3 src\empty.c ^
|
||||||
|
|
||||||
|
^
|
||||||
|
|
||||||
|
%%CXX%% -c -Dver=4 src\empty.c ^
|
||||||
|
|
||||||
|
> "%root_dir%\run.bat"
|
||||||
|
|
||||||
|
set output="%root_dir%\expected.json"
|
||||||
|
del /f %output%
|
||||||
@@ -27,45 +27,45 @@ mkdir -p "${root_dir}/src"
|
|||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
"\$CC" -c -o src/empty.o -Dver=1 src/empty.c;
|
\$CC -c -Dver=1 src/empty.c;
|
||||||
"\$CXX" -c -o src/empty.o -Dver=2 src/empty.c;
|
\$CXX -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
cd src
|
cd src
|
||||||
"\$CC" -c -o empty.o -Dver=3 empty.c;
|
\$CC -c -Dver=3 empty.c;
|
||||||
"\$CXX" -c -o empty.o -Dver=4 empty.c;
|
\$CXX -c -Dver=4 empty.c;
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "cc -c -o empty.o -Dver=3 empty.c",
|
"command": "cc -c -Dver=3 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o empty.o -Dver=4 empty.c",
|
"command": "c++ -c -Dver=4 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/unkown_compiler_recognised
|
||||||
|
# RUN: cd %T/unkown_compiler_recognised; %{intercept-build} --use-cc=%T/unkown_compiler_recognised/wrapper --use-c++=%T/unkown_compiler_recognised/wrapper++ --cdb wrapper.json --override-compiler ./run.sh
|
||||||
|
# RUN: cd %T/unkown_compiler_recognised; %{cdb_diff} wrapper.json expected.json
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── wrapper
|
||||||
|
# ├── wrapper++
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── expected.json
|
||||||
|
# └── src
|
||||||
|
# └── empty.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
|
wrapper_file="${root_dir}/wrapper"
|
||||||
|
cat > ${wrapper_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
true
|
||||||
|
EOF
|
||||||
|
chmod +x ${wrapper_file}
|
||||||
|
|
||||||
|
wrapperxx_file="${root_dir}/wrapper++"
|
||||||
|
cat > ${wrapperxx_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
true
|
||||||
|
EOF
|
||||||
|
chmod +x ${wrapperxx_file}
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
${wrapper_file} -c -Dver=1 src/empty.c;
|
||||||
|
${wrapperxx_file} -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
|
cd src
|
||||||
|
${wrapper_file} -c -Dver=3 empty.c;
|
||||||
|
${wrapperxx_file} -c -Dver=4 empty.c;
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "cc -c -Dver=3 empty.c",
|
||||||
|
"directory": "${root_dir}/src",
|
||||||
|
"file": "empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "c++ -c -Dver=4 empty.c",
|
||||||
|
"directory": "${root_dir}/src",
|
||||||
|
"file": "empty.c"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/define_with_quote
|
||||||
|
# RUN: cd %T/define_with_quote; %{intercept-build} --cdb wrapper.json --override-compiler ./run.sh
|
||||||
|
# RUN: cd %T/define_with_quote; %{cdb_diff} wrapper.json expected.json
|
||||||
|
#
|
||||||
|
# when library preload disabled, it falls back to use compiler wrapper
|
||||||
|
#
|
||||||
|
# RUN: cd %T/define_with_quote; %{intercept-build} --cdb preload.json ./run.sh
|
||||||
|
# RUN: cd %T/define_with_quote; %{cdb_diff} preload.json expected.json
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── expected.json
|
||||||
|
# └── src
|
||||||
|
# └── main.cpp
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
cat > "${root_dir}/src/main.cpp" << EOF
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
EXPORT void foo(void) {
|
||||||
|
printf("Hello world!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CXX -DEXPORT="extern \"C\"" -o hello src/main.cpp
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"arguments": ["c++", "-c", "-DEXPORT=extern \"C\"", "-o", "hello", "src/main.cpp"],
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/main.cpp"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/define_with_unicode
|
||||||
|
# RUN: cd %T/define_with_unicode; %{intercept-build} --cdb wrapper.json --override-compiler ./run.sh
|
||||||
|
# RUN: cd %T/define_with_unicode; %{cdb_diff} wrapper.json expected.json
|
||||||
|
#
|
||||||
|
# when library preload disabled, it falls back to use compiler wrapper
|
||||||
|
#
|
||||||
|
# RUN: cd %T/define_with_unicode; %{intercept-build} --cdb preload.json ./run.sh
|
||||||
|
# RUN: cd %T/define_with_unicode; %{cdb_diff} preload.json expected.json
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── expected.json
|
||||||
|
# └── src
|
||||||
|
# └── main.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
cat > "${root_dir}/src/main.c" << EOF
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static char const * const message = "MESSAGE";
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
printf("%s\n", message);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CC -DMESSAGE="מה שלומך?" -o hello src/main.c
|
||||||
|
\$CC -DMESSAGE="Как дела?" -o hello src/main.c
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
|
||||||
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"arguments": ["cc", "-c", "-DMESSAGE=\u041a\u0430\u043a \u0434\u0435\u043b\u0430?", "-o", "hello", "src/main.c"],
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/main.c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": ["cc", "-c", "-DMESSAGE=\u05de\u05d4 \u05e9\u05dc\u05d5\u05de\u05da?", "-o", "hello", "src/main.c"],
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/main.c"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/directory_path_absolute
|
||||||
|
# RUN: cd %T/directory_path_absolute; %{intercept-build} --cdb preload.json ./run.sh
|
||||||
|
# RUN: cd %T/directory_path_absolute; %{python} is_dir.py preload.json
|
||||||
|
# RUN: cd %T/directory_path_absolute; %{python} is_abs.py preload.json
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── is_dir.py
|
||||||
|
# ├── is_abs.py
|
||||||
|
# └── src
|
||||||
|
# └── empty.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CC -c -Dver=1 src/empty.c;
|
||||||
|
\$CXX -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
|
cd src
|
||||||
|
|
||||||
|
\$CC -c -Dver=1 empty.c;
|
||||||
|
\$CXX -c -Dver=2 empty.c;
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
cat > "${root_dir}/is_dir.py" << EOF
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('input', type=argparse.FileType('r'))
|
||||||
|
args = parser.parse_args()
|
||||||
|
# file is open, parse the json content
|
||||||
|
input = json.load(args.input)
|
||||||
|
# just get directory paths
|
||||||
|
return [os.path.isdir(entry['directory']) for entry in input].count(False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "${root_dir}/is_abs.py" << EOF
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('input', type=argparse.FileType('r'))
|
||||||
|
args = parser.parse_args()
|
||||||
|
# file is open, parse the json content
|
||||||
|
input = json.load(args.input)
|
||||||
|
# just get directory paths
|
||||||
|
return [os.path.isabs(entry['directory']) for entry in input].count(False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/duplicate_entries
|
||||||
|
# RUN: cd %T/duplicate_entries; %{intercept-build} --cdb preload.json ./run.sh
|
||||||
|
# RUN: cd %T/duplicate_entries; %{cdb_diff} preload.json expected.json
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── expected.json
|
||||||
|
# └── src
|
||||||
|
# └── empty.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CC -c -Dver=1 src/empty.c;
|
||||||
|
\$CXX -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
|
\$CC -c -Dver=1 src/empty.c;
|
||||||
|
\$CXX -c -Dver=2 src/empty.c;
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/empty.c"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
EOF
|
||||||
@@ -29,88 +29,88 @@ mkdir -p "${root_dir}/src"
|
|||||||
touch "${root_dir}/src/empty.c"
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run-one.sh"
|
build_file="${root_dir}/run-one.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
"\$CC" -c -o src/empty.o -Dver=1 src/empty.c;
|
\$CC -c -Dver=1 src/empty.c;
|
||||||
"\$CXX" -c -o src/empty.o -Dver=2 src/empty.c;
|
\$CXX -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
build_file="${root_dir}/run-two.sh"
|
build_file="${root_dir}/run-two.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
cd src
|
cd src
|
||||||
"\$CC" -c -o empty.o -Dver=3 empty.c;
|
\$CC -c -Dver=3 empty.c;
|
||||||
"\$CXX" -c -o empty.o -Dver=4 empty.c;
|
\$CXX -c -Dver=4 empty.c;
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/one.json" << EOF
|
cat > "${root_dir}/one.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >> "${root_dir}/two.json" << EOF
|
cat > "${root_dir}/two.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o empty.o -Dver=3 empty.c",
|
"command": "cc -c -Dver=3 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o empty.o -Dver=4 empty.c",
|
"command": "c++ -c -Dver=4 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >> "${root_dir}/sum.json" << EOF
|
cat > "${root_dir}/sum.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
"command": "cc -c -Dver=1 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
"command": "c++ -c -Dver=2 src/empty.c",
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
"file": "src/empty.c"
|
"file": "src/empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "cc -c -o empty.o -Dver=3 empty.c",
|
"command": "cc -c -Dver=3 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"command": "c++ -c -o empty.o -Dver=4 empty.c",
|
"command": "c++ -c -Dver=4 empty.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "empty.c"
|
"file": "empty.c"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/file_path_relative
|
||||||
|
# RUN: cd %T/file_path_relative; %{intercept-build} --cdb preload.json ./run.sh
|
||||||
|
# RUN: cd %T/file_path_relative; %{python} is_file.py preload.json
|
||||||
|
# RUN: cd %T/file_path_relative; %{python} is_rel.py preload.json
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── is_file.py
|
||||||
|
# ├── is_rel.py
|
||||||
|
# └── src
|
||||||
|
# └── empty.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CC -c -Dver=1 src/empty.c;
|
||||||
|
\$CXX -c -Dver=2 src/empty.c;
|
||||||
|
|
||||||
|
cd src
|
||||||
|
|
||||||
|
\$CC -c -Dver=1 empty.c;
|
||||||
|
\$CXX -c -Dver=2 empty.c;
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
cat > "${root_dir}/is_file.py" << EOF
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('input', type=argparse.FileType('r'))
|
||||||
|
args = parser.parse_args()
|
||||||
|
# file is open, parse the json content
|
||||||
|
input = json.load(args.input)
|
||||||
|
# just get directory paths
|
||||||
|
return [os.path.isfile(os.path.join(entry['directory'], entry['file'])) \
|
||||||
|
for entry in input].count(False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "${root_dir}/is_rel.py" << EOF
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('input', type=argparse.FileType('r'))
|
||||||
|
args = parser.parse_args()
|
||||||
|
# file is open, parse the json content
|
||||||
|
input = json.load(args.input)
|
||||||
|
# just get directory paths
|
||||||
|
return [os.path.isabs(entry['file']) for entry in input].count(True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
|
EOF
|
||||||
@@ -20,13 +20,12 @@ set -o xtrace
|
|||||||
root_dir=$1
|
root_dir=$1
|
||||||
mkdir -p "${root_dir}/src"
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
cat >> "${root_dir}/src/lib.c" << EOF
|
cp "${test_input_dir}/main.c" "${root_dir}/src/main.c"
|
||||||
|
|
||||||
|
cat > "${root_dir}/src/lib.c" << EOF
|
||||||
int foo() { return 2; }
|
int foo() { return 2; }
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >> "${root_dir}/src/main.c" << EOF
|
|
||||||
int main() { return 0; }
|
|
||||||
EOF
|
|
||||||
|
|
||||||
|
|
||||||
# set up platform specific linker options
|
# set up platform specific linker options
|
||||||
@@ -39,7 +38,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -50,36 +49,35 @@ set -o xtrace
|
|||||||
cd src
|
cd src
|
||||||
|
|
||||||
# non compilation calls shall not be in the result
|
# non compilation calls shall not be in the result
|
||||||
"\$CC" -### -c main.c 2> /dev/null
|
\$CC -### -c main.c 2> /dev/null
|
||||||
"\$CC" -E -o "\$\$.i" main.c
|
\$CC -E -o "\$\$.i" main.c
|
||||||
"\$CC" -S -o "\$\$.asm" main.c
|
\$CC -c -o "\$\$.d" -M main.c
|
||||||
"\$CC" -c -o "\$\$.d" -M main.c
|
\$CC -c -o "\$\$.d" -MM main.c
|
||||||
"\$CC" -c -o "\$\$.d" -MM main.c
|
|
||||||
|
|
||||||
# preprocessor flags shall be filtered
|
# preprocessor flags shall be filtered
|
||||||
"\$CC" -c -o one.o -fpic -MD -MT target -MF one.d lib.c
|
\$CC -c -o one.o -fpic -MD -MT target -MF one.d lib.c
|
||||||
"\$CC" -c -o two.o -fpic -MMD -MQ target -MF two.d lib.c
|
\$CC -c -o two.o -fpic -MMD -MQ target -MF two.d lib.c
|
||||||
|
|
||||||
# linking shall not in the result
|
# linking shall not in the result
|
||||||
"\$CC" ${LD_FLAGS} one.o two.o
|
\$CC ${LD_FLAGS} one.o two.o
|
||||||
|
|
||||||
# linker flags shall be filtered
|
# linker flags shall be filtered
|
||||||
"\$CC" -o "${PREFIX}_one" "-l${PREFIX}" -L. main.c
|
\$CC -o "${PREFIX}_one" "-l${PREFIX}" -L. main.c
|
||||||
"\$CC" -o "${PREFIX}_two" -l "${PREFIX}" -L . main.c
|
\$CC -o "${PREFIX}_two" -l "${PREFIX}" -L . main.c
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -o one.o -fpic lib.c",
|
"command": "cc -c -fpic -o one.o lib.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "lib.c"
|
"file": "lib.c"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"command": "cc -c -o two.o -fpic lib.c",
|
"command": "cc -c -fpic -o two.o lib.c",
|
||||||
"directory": "${root_dir}/src",
|
"directory": "${root_dir}/src",
|
||||||
"file": "lib.c"
|
"file": "lib.c"
|
||||||
},
|
},
|
||||||
@@ -26,19 +26,19 @@ touch "${root_dir}/src/two.c"
|
|||||||
cp "${test_input_dir}/main.c" "${root_dir}/src/main.c"
|
cp "${test_input_dir}/main.c" "${root_dir}/src/main.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> ${build_file} << EOF
|
cat > ${build_file} << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
"\$CC" -Dver=1 src/one.c src/two.c src/main.c;
|
\$CC -Dver=1 src/one.c src/two.c src/main.c;
|
||||||
|
|
||||||
true;
|
true;
|
||||||
EOF
|
EOF
|
||||||
chmod +x ${build_file}
|
chmod +x ${build_file}
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"command": "cc -c -Dver=1 src/one.c",
|
"command": "cc -c -Dver=1 src/one.c",
|
||||||
64
tests/functional/cases/intercept/result/output_kept.fts
Normal file
64
tests/functional/cases/intercept/result/output_kept.fts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# RUN: bash %s %T/output_kept
|
||||||
|
# RUN: cd %T/output_kept; %{intercept-build} --cdb result.json ./run.sh
|
||||||
|
# RUN: cd %T/output_kept; %{cdb_diff} result.json expected.json
|
||||||
|
|
||||||
|
# the test creates a subdirectory inside output dir.
|
||||||
|
#
|
||||||
|
# ${root_dir}
|
||||||
|
# ├── run.sh
|
||||||
|
# ├── expected.json
|
||||||
|
# └── src
|
||||||
|
# └── empty.c
|
||||||
|
|
||||||
|
root_dir=$1
|
||||||
|
mkdir -p "${root_dir}/src"
|
||||||
|
|
||||||
|
touch "${root_dir}/src/empty.c"
|
||||||
|
|
||||||
|
build_file="${root_dir}/run.sh"
|
||||||
|
cat > ${build_file} << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
\$CC -c -o src/empty.o src/empty.c;
|
||||||
|
\$CC -c src/empty.c;
|
||||||
|
|
||||||
|
cd src
|
||||||
|
\$CC -c -o empty.obj empty.c;
|
||||||
|
\$CC -c empty.c;
|
||||||
|
|
||||||
|
true;
|
||||||
|
EOF
|
||||||
|
chmod +x ${build_file}
|
||||||
|
|
||||||
|
cat > "${root_dir}/expected.json" << EOF
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"command": "cc -c -o src/empty.o src/empty.c",
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "cc -c src/empty.c",
|
||||||
|
"directory": "${root_dir}",
|
||||||
|
"file": "src/empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "cc -c -o empty.obj empty.c",
|
||||||
|
"directory": "${root_dir}/src",
|
||||||
|
"file": "empty.c"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
"command": "cc -c empty.c",
|
||||||
|
"directory": "${root_dir}/src",
|
||||||
|
"file": "empty.c"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
EOF
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
: RUN: %s %T\successful_build
|
|
||||||
: RUN: cd %T\successful_build; del /f expected.json
|
|
||||||
: RUN: cd %T\successful_build; %{cdb_expect} --cdb expected.json --command "cc -c -Dver=1 src\empty.c" --file "src\empty.c"
|
|
||||||
: RUN: cd %T\successful_build; %{cdb_expect} --cdb expected.json --command "c++ -c -Dver=2 src\empty.c" --file "src\empty.c"
|
|
||||||
: RUN: cd %T\successful_build; %{cdb_expect} --cdb expected.json --command "cc -c -Dver=3 src\empty.c" --file "src\empty.c"
|
|
||||||
: RUN: cd %T\successful_build; %{cdb_expect} --cdb expected.json --command "c++ -c -Dver=4 src\empty.c" --file "src\empty.c"
|
|
||||||
: RUN: cd %T\successful_build; %{intercept-build} --override-compiler --cdb wrapper.json run.bat
|
|
||||||
: RUN: cd %T\successful_build; %{cdb_diff} wrapper.json expected.json
|
|
||||||
|
|
||||||
set root_dir=%1
|
|
||||||
|
|
||||||
mkdir "%root_dir%"
|
|
||||||
mkdir "%root_dir%\src"
|
|
||||||
|
|
||||||
copy /y nul "%root_dir%\src\empty.c"
|
|
||||||
|
|
||||||
echo ^
|
|
||||||
%%CC%% -c -Dver=1 src\empty.c ^
|
|
||||||
|
|
||||||
^
|
|
||||||
|
|
||||||
%%CXX%% -c -Dver=2 src\empty.c ^
|
|
||||||
|
|
||||||
^
|
|
||||||
|
|
||||||
%%CC%% -c -Dver=3 src\empty.c ^
|
|
||||||
|
|
||||||
^
|
|
||||||
|
|
||||||
%%CXX%% -c -Dver=4 src\empty.c ^
|
|
||||||
|
|
||||||
> "%root_dir%\run.bat"
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# RUN: bash %s %T
|
|
||||||
# RUN: cd %T; %{intercept-wrapped-build} --cdb wrapper.json --override-compiler ./run.sh
|
|
||||||
# RUN: cd %T; %{cdb_diff} wrapper.json expected.json
|
|
||||||
#
|
|
||||||
# when library preload disabled, it falls back to use compiler wrapper
|
|
||||||
#
|
|
||||||
# RUN: cd %T; %{intercept-wrapped-build} --cdb preload.json ./run.sh
|
|
||||||
# RUN: cd %T; %{cdb_diff} preload.json expected.json
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
# the test creates a subdirectory inside output dir.
|
|
||||||
#
|
|
||||||
# ${root_dir}
|
|
||||||
# ├── wrapper
|
|
||||||
# ├── wrapper++
|
|
||||||
# ├── run.sh
|
|
||||||
# ├── expected.json
|
|
||||||
# └── src
|
|
||||||
# └── empty.c
|
|
||||||
|
|
||||||
root_dir=$1
|
|
||||||
mkdir -p "${root_dir}/src"
|
|
||||||
|
|
||||||
touch "${root_dir}/src/empty.c"
|
|
||||||
|
|
||||||
wrapper_file="${root_dir}/wrapper"
|
|
||||||
cat >> ${wrapper_file} << EOF
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
${REAL_CC} \$@
|
|
||||||
EOF
|
|
||||||
chmod +x ${wrapper_file}
|
|
||||||
|
|
||||||
wrapperxx_file="${root_dir}/wrapper++"
|
|
||||||
cat >> ${wrapperxx_file} << EOF
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
${REAL_CXX} \$@
|
|
||||||
EOF
|
|
||||||
chmod +x ${wrapperxx_file}
|
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
|
||||||
cat >> ${build_file} << EOF
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o nounset
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
"\$CC" -c -o src/empty.o -Dver=1 src/empty.c;
|
|
||||||
"\$CXX" -c -o src/empty.o -Dver=2 src/empty.c;
|
|
||||||
|
|
||||||
cd src
|
|
||||||
"\$CC" -c -o empty.o -Dver=3 empty.c;
|
|
||||||
"\$CXX" -c -o empty.o -Dver=4 empty.c;
|
|
||||||
EOF
|
|
||||||
chmod +x ${build_file}
|
|
||||||
|
|
||||||
cat >> "${root_dir}/expected.json" << EOF
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"command": "cc -c -o src/empty.o -Dver=1 src/empty.c",
|
|
||||||
"directory": "${root_dir}",
|
|
||||||
"file": "src/empty.c"
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"command": "c++ -c -o src/empty.o -Dver=2 src/empty.c",
|
|
||||||
"directory": "${root_dir}",
|
|
||||||
"file": "src/empty.c"
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"command": "cc -c -o empty.o -Dver=3 empty.c",
|
|
||||||
"directory": "${root_dir}/src",
|
|
||||||
"file": "empty.c"
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"command": "c++ -c -o empty.o -Dver=4 empty.c",
|
|
||||||
"directory": "${root_dir}/src",
|
|
||||||
"file": "empty.c"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
EOF
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# The LLVM Compiler Infrastructure
|
|
||||||
#
|
|
||||||
# This file is distributed under the University of Illinois Open Source
|
|
||||||
# License. See LICENSE.TXT for details.
|
|
||||||
|
|
||||||
import os.path
|
|
||||||
import lit.util
|
|
||||||
|
|
||||||
this_dir = os.path.dirname(__file__)
|
|
||||||
|
|
||||||
wrapper = os.path.join(this_dir, 'Output', 'wrapper')
|
|
||||||
wrapperpp = os.path.join(this_dir, 'Output', 'wrapper++')
|
|
||||||
|
|
||||||
config.substitutions.append(
|
|
||||||
('%{intercept-wrapped-build}',
|
|
||||||
'intercept-build --use-cc={0} --use-c++={1} -vvvv'.format(wrapper, wrapperpp)))
|
|
||||||
|
|
||||||
# use compiler wrapper
|
|
||||||
config.environment['REAL_CC'] = config.environment['CC']
|
|
||||||
config.environment['REAL_CXX'] = config.environment['CXX']
|
|
||||||
config.environment['CC'] = wrapper
|
|
||||||
config.environment['CXX'] = wrapperpp
|
|
||||||
@@ -22,7 +22,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> "${build_file}" << EOF
|
cat > "${build_file}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -34,7 +34,7 @@ EOF
|
|||||||
chmod +x "${build_file}"
|
chmod +x "${build_file}"
|
||||||
|
|
||||||
checker_file="${root_dir}/check.sh"
|
checker_file="${root_dir}/check.sh"
|
||||||
cat >> "${checker_file}" << EOF
|
cat > "${checker_file}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
|
|
||||||
cp "${test_input_dir}/compile_error.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/compile_error.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
cat >> "${root_dir}/input.json" << EOF
|
cat > "${root_dir}/input.json" << EOF
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "${root_dir}",
|
"directory": "${root_dir}",
|
||||||
@@ -39,7 +39,7 @@ cat >> "${root_dir}/input.json" << EOF
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
check_one="${root_dir}/check_exists.sh"
|
check_one="${root_dir}/check_exists.sh"
|
||||||
cat >> "${check_one}" << EOF
|
cat > "${check_one}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
@@ -62,7 +62,7 @@ EOF
|
|||||||
chmod +x "${check_one}"
|
chmod +x "${check_one}"
|
||||||
|
|
||||||
check_two="${root_dir}/check_not_exists.sh"
|
check_two="${root_dir}/check_not_exists.sh"
|
||||||
cat >> "${check_two}" << EOF
|
cat > "${check_two}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ mkdir -p "${root_dir}/src"
|
|||||||
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
cp "${test_input_dir}/div_zero.c" "${root_dir}/src/broken.c"
|
||||||
|
|
||||||
build_file="${root_dir}/run.sh"
|
build_file="${root_dir}/run.sh"
|
||||||
cat >> "${build_file}" << EOF
|
cat > "${build_file}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@@ -37,7 +37,7 @@ EOF
|
|||||||
chmod +x "${build_file}"
|
chmod +x "${build_file}"
|
||||||
|
|
||||||
check_one="${root_dir}/check_plist.sh"
|
check_one="${root_dir}/check_plist.sh"
|
||||||
cat >> "${check_one}" << EOF
|
cat > "${check_one}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
@@ -56,7 +56,7 @@ EOF
|
|||||||
chmod +x "${check_one}"
|
chmod +x "${check_one}"
|
||||||
|
|
||||||
check_two="${root_dir}/check_html.sh"
|
check_two="${root_dir}/check_html.sh"
|
||||||
cat >> "${check_two}" << EOF
|
cat > "${check_two}" << EOF
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -o errexit
|
set -o errexit
|
||||||
|
|||||||
@@ -14,30 +14,24 @@ tool_dir = os.path.join(this_dir, 'tools')
|
|||||||
|
|
||||||
config.environment['test_input_dir'] = os.path.join(this_dir, 'Input')
|
config.environment['test_input_dir'] = os.path.join(this_dir, 'Input')
|
||||||
|
|
||||||
|
config.environment['CC'] = 'clang'
|
||||||
|
config.environment['CXX'] = 'clang++'
|
||||||
|
|
||||||
# this hack is needed to run the right compiler on travis-ci
|
# this hack is needed to run the right compiler on travis-ci
|
||||||
clang=os.environ.get('TRAVIS_CLANG', 'clang')
|
clang=os.environ.get('TRAVIS_CLANG', 'clang')
|
||||||
clangpp=os.environ.get('TRAVIS_CLANGPP', 'clang++')
|
|
||||||
|
|
||||||
config.environment['CC'] = clang
|
|
||||||
config.environment['CXX'] = clangpp
|
|
||||||
|
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
('%{analyze-build}',
|
('%{analyze-build}',
|
||||||
'analyze-build --use-analyzer={clang} -vvvv' \
|
'analyze-build --use-analyzer={clang} -vvvv'.format(clang=clang)))
|
||||||
.format(clang=clang)))
|
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
('%{scan-build}',
|
('%{scan-build}',
|
||||||
'scan-build --use-analyzer={clang} --use-cc={cc} --use-c++={cxx} -vvvv' \
|
'scan-build --use-analyzer={clang} -vvvv'.format(clang=clang)))
|
||||||
.format(clang=clang, cc=clang, cxx=clangpp)))
|
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
('%{intercept-build}',
|
('%{intercept-build}',
|
||||||
'intercept-build --use-cc={cc} --use-c++={cxx} -vvvv' \
|
'intercept-build -vvvv'))
|
||||||
.format(cc=clang, cxx=clangpp)))
|
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
('%{cdb_diff}',
|
('%{cdb_diff}',
|
||||||
'{python} {cdb_diff}' \
|
'{python} {diff}'.format(python=sys.executable, diff=os.path.join(tool_dir, 'diff.py'))))
|
||||||
.format(python=sys.executable, cdb_diff=os.path.join(tool_dir, 'diff.py'))))
|
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
('%{expect}',
|
('%{expect}',
|
||||||
'{python} {expect}' \
|
'{python} {expect}'.format(python=sys.executable, expect=os.path.join(tool_dir, 'expect.py'))))
|
||||||
.format(python=sys.executable, expect=os.path.join(tool_dir, 'expect.py'))))
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ if is_available('qmake-qt4'):
|
|||||||
is_windows = sys.platform in {'win32', 'cygwin'}
|
is_windows = sys.platform in {'win32', 'cygwin'}
|
||||||
if is_windows:
|
if is_windows:
|
||||||
config.available_features.add('batch')
|
config.available_features.add('batch')
|
||||||
config.suffixes.append('.ftb')
|
config.suffixes.append('.bat')
|
||||||
config.environment['windows'] = 'True'
|
config.environment['windows'] = 'True'
|
||||||
else:
|
else:
|
||||||
config.available_features.add('shell')
|
config.available_features.add('shell')
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# REQUIRES: pep8
|
# REQUIRES: pep8
|
||||||
# RUN: pep8 --show-source --show-pep8 ../libscanbuild
|
# RUN: pep8 --show-source --show-pep8 ../libscanbuild
|
||||||
# RUN: pep8 --show-source --show-pep8 ../libear
|
# RUN: pep8 --show-source --show-pep8 ../libear
|
||||||
# RUN: pep8 --show-source --show-pep8 .
|
# RUN: pep8 --show-source --show-pep8 ./unit
|
||||||
|
# RUN: pep8 --show-source --show-pep8 ./functional/tools
|
||||||
|
|||||||
Reference in New Issue
Block a user