summaryrefslogtreecommitdiffstats
path: root/test/option--implicit-cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/option--implicit-cache.py')
-rw-r--r--test/option--implicit-cache.py374
1 files changed, 0 insertions, 374 deletions
diff --git a/test/option--implicit-cache.py b/test/option--implicit-cache.py
deleted file mode 100644
index 2508cf2..0000000
--- a/test/option--implicit-cache.py
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import os
-import sys
-import TestSCons
-import string
-
-_exe = TestSCons._exe
-_obj = TestSCons._obj
-
-prog = 'prog' + _exe
-subdir_prog = os.path.join('subdir', 'prog' + _exe)
-variant_prog = os.path.join('variant', 'prog' + _exe)
-
-args = prog + ' ' + subdir_prog + ' ' + variant_prog
-
-test = TestSCons.TestSCons()
-
-test.subdir('include', 'subdir', ['subdir', 'include'], 'inc2')
-
-test.write('SConstruct', """
-env = Environment(CPPPATH = Split('inc2 include'))
-obj = env.Object(target='prog', source='subdir/prog.c')
-env.Program(target='prog', source=obj)
-SConscript('subdir/SConscript', "env")
-
-BuildDir('variant', 'subdir', 0)
-include = Dir('include')
-env = Environment(CPPPATH=['inc2', include])
-SConscript('variant/SConscript', "env")
-
-def copy(target, source, env):
- open(str(target[0]), 'wt').write(open(str(source[0]), 'rt').read())
-nodep = env.Command('nodeps.c', 'nodeps.in', action=copy)
-env.Program('nodeps', 'nodeps.c')
-
-env.Object(['one', 'two'], ['one.c'])
-""")
-
-test.write(['subdir', 'SConscript'],
-"""
-Import("env")
-env.Program(target='prog', source='prog.c')
-""")
-
-test.write('nodeps.in',
-r"""
-int
-main(int argc, char *argv[])
-{
- argv[argc++] = "--";
- return 0;
-}
-""")
-
-
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 1\n"
-#include <bar.h>
-""")
-
-test.write(['include', 'bar.h'],
-r"""
-#define BAR_STRING "include/bar.h 1\n"
-""")
-
-test.write(['include', 'baz.h'],
-r"""
-#define BAZ_STRING "include/baz.h 1\n"
-""")
-
-test.write(['subdir', 'prog.c'],
-r"""
-#include <foo.h>
-#include <stdio.h>
-
-int
-main(int argc, char *argv[])
-{
- argv[argc++] = "--";
- printf("subdir/prog.c\n");
- printf(FOO_STRING);
- printf(BAR_STRING);
- return 0;
-}
-""")
-
-test.write(['subdir', 'include', 'foo.h'],
-r"""
-#define FOO_STRING "subdir/include/foo.h 1\n"
-#include "bar.h"
-""")
-
-test.write(['subdir', 'include', 'bar.h'],
-r"""
-#define BAR_STRING "subdir/include/bar.h 1\n"
-""")
-
-test.write('one.c' ,
-r"""
-#include <foo.h>
-
-void one(void) { }
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(program = test.workpath(prog),
- stdout = "subdir/prog.c\ninclude/foo.h 1\ninclude/bar.h 1\n")
-
-test.run(program = test.workpath(subdir_prog),
- stdout = "subdir/prog.c\nsubdir/include/foo.h 1\nsubdir/include/bar.h 1\n")
-
-test.run(program = test.workpath(variant_prog),
- stdout = "subdir/prog.c\ninclude/foo.h 1\ninclude/bar.h 1\n")
-
-test.up_to_date(arguments = args)
-
-# Make sure implicit dependenies work right when one is modifed:
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 2\n"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(program = test.workpath(prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.run(program = test.workpath(subdir_prog),
- stdout = "subdir/prog.c\nsubdir/include/foo.h 1\nsubdir/include/bar.h 1\n")
-
-test.run(program = test.workpath(variant_prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.up_to_date(arguments = args)
-
-# Make sure that changing the order of includes causes rebuilds and
-# doesn't produce redundant rebuilds:
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 2\n"
-#include "bar.h"
-#include "baz.h"
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(program = test.workpath(prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.run(program = test.workpath(subdir_prog),
- stdout = "subdir/prog.c\nsubdir/include/foo.h 1\nsubdir/include/bar.h 1\n")
-
-test.run(program = test.workpath(variant_prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.up_to_date(arguments = args)
-
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 2\n"
-#include "baz.h"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(program = test.workpath(prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.run(program = test.workpath(subdir_prog),
- stdout = "subdir/prog.c\nsubdir/include/foo.h 1\nsubdir/include/bar.h 1\n")
-
-test.run(program = test.workpath(variant_prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.up_to_date(arguments = args)
-
-# Add inc2/foo.h that should shadow include/foo.h, but
-# because of implicit dependency caching, scons doesn't
-# detect this:
-test.write(['inc2', 'foo.h'],
-r"""
-#define FOO_STRING "inc2/foo.h 1\n"
-#include <bar.h>
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(program = test.workpath(prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-test.run(program = test.workpath(subdir_prog),
- stdout = "subdir/prog.c\nsubdir/include/foo.h 1\nsubdir/include/bar.h 1\n")
-
-test.run(program = test.workpath(variant_prog),
- stdout = "subdir/prog.c\ninclude/foo.h 2\ninclude/bar.h 1\n")
-
-# Now modifying include/foo.h should make scons aware of inc2/foo.h
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 3\n"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.run(program = test.workpath(prog),
- stdout = "subdir/prog.c\ninc2/foo.h 1\ninclude/bar.h 1\n")
-
-test.run(program = test.workpath(subdir_prog),
- stdout = "subdir/prog.c\nsubdir/include/foo.h 1\nsubdir/include/bar.h 1\n")
-
-test.run(program = test.workpath(variant_prog),
- stdout = "subdir/prog.c\ninclude/foo.h 3\ninclude/bar.h 1\n")
-
-# test in the face of a file with no dependencies where the source file is generated:
-test.run(arguments = "--implicit-cache nodeps%s"%_exe)
-
-test.write('nodeps.in',
-r"""
-#include <foo.h>
-
-int
-main(int argc, char *argv[])
-{
- argv[argc++] = "--";
- return 0;
-}
-""")
-
-test.run(arguments = "--implicit-cache one%s"%_obj)
-test.run(arguments = "--implicit-cache one%s"%_obj)
-
-# Test forcing of implicit caching:
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 3\n"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 3\n"
-#include "baz.h"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-deps-unchanged " + variant_prog)
-assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
-
-test.write(['include', 'baz.h'],
-r"""
-#define BAZ_STRING "include/baz.h 2\n"
-""")
-
-test.run(arguments = "--implicit-deps-unchanged " + variant_prog)
-assert string.find(test.stdout(), 'is up to date') != -1, test.stdout()
-
-test.run(arguments = variant_prog)
-assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
-
-# Test forcing rescanning:
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 3\n"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-cache " + args)
-
-test.write(['include', 'foo.h'],
-r"""
-#define FOO_STRING "include/foo.h 3\n"
-#include "baz.h"
-#include "bar.h"
-""")
-
-test.run(arguments = "--implicit-deps-unchanged " + variant_prog)
-assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
-
-test.write(['include', 'baz.h'],
-r"""
-#define BAZ_STRING "include/baz.h 2\n"
-""")
-
-test.run(arguments = "--implicit-deps-unchanged " + variant_prog)
-assert string.find(test.stdout(), 'is up to date') != -1, test.stdout()
-
-test.run(arguments = "--implicit-deps-changed " + variant_prog)
-assert string.find(test.stdout(), 'is up to date') == -1, test.stdout()
-
-# Test that Set/GetOption('implicit_cache') works:
-test.write('SConstruct', """
-assert not GetOption('implicit_cache')
-SetOption('implicit_cache', 1)
-assert GetOption('implicit_cache')
-""")
-
-test.run()
-
-test.write('SConstruct', """
-assert GetOption('implicit_cache')
-SetOption('implicit_cache', 0)
-assert GetOption('implicit_cache')
-""")
-
-test.run(arguments='--implicit-cache')
-
-# Test to make sure SetOption('implicit_cache', 1) actually enables implicit caching
-# by detecting the one case where implicit caching causes inaccurate builds:
-test.write('SConstruct', """
-SetOption('implicit_cache', 1)
-env=Environment(CPPPATH=['i1', 'i2'])
-env.Object('foo.c')
-""")
-
-test.subdir('i1')
-test.subdir('i2')
-
-test.write('foo.c', """
-#include <foo.h>
-
-void foo(void)
-{
- FOO_H_DEFINED
- ++x; /* reference x */
-}
-""")
-
-test.write('i2/foo.h', """
-#define FOO_H_DEFINED int x = 1;
-""")
-
-test.run()
-
-test.write('i1/foo.h', """
-""");
-
-test.run()
-
-
-test.pass_test()