def get_topsrcdir(self): t = self.get_tempdir() prepare_tmp_topsrcdir(t) p = os.path.join(t, 'CLOBBER') with open(p, 'a'): pass return t
def test_objdir_mismatch(self): """Ensure MachCommandBase throwing on objdir mismatch.""" d = os.path.realpath(tempfile.mkdtemp()) try: real_topobjdir = os.path.join(d, "real-objdir") os.makedirs(real_topobjdir) topobjdir = os.path.join(d, "objdir") os.makedirs(topobjdir) topsrcdir = os.path.join(d, "srcdir") prepare_tmp_topsrcdir(topsrcdir) mozconfig = os.path.join(d, "mozconfig") with open(mozconfig, "wt") as fh: fh.write("mk_add_options MOZ_OBJDIR=%s" % real_topobjdir) mozinfo = os.path.join(topobjdir, "mozinfo.json") with open(mozinfo, "wt") as fh: json.dump( dict( topsrcdir=topsrcdir, mozconfig=mozconfig, ), fh, ) os.chdir(topobjdir) class MockMachContext(object): pass context = MockMachContext() context.cwd = topobjdir context.topdir = topsrcdir context.settings = None context.log_manager = None context.detect_virtualenv_mozinfo = False stdout = sys.stdout sys.stdout = StringIO() try: with self.assertRaises(SystemExit): MachCommandBase(context, None) self.assertTrue( sys.stdout.getvalue().startswith( "Ambiguous object directory detected." ) ) finally: sys.stdout = stdout finally: os.chdir(self._old_cwd) shutil.rmtree(d)
def test_objdir_config_status(self): """Ensure @CONFIG_GUESS@ is handled when loading mozconfig.""" base = self.get_base() cmd = base._normalize_command( [os.path.join(topsrcdir, 'build', 'autoconf', 'config.guess')], True) guess = subprocess.check_output(cmd, cwd=topsrcdir).strip() # There may be symlinks involved, so we use real paths to ensure # path consistency. d = os.path.realpath(tempfile.mkdtemp()) try: mozconfig = os.path.join(d, 'mozconfig') with open(mozconfig, 'wt') as fh: fh.write( 'mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/foo/@CONFIG_GUESS@') print('Wrote mozconfig %s' % mozconfig) topobjdir = os.path.join(d, 'foo', guess) os.makedirs(topobjdir) # Create a fake topsrcdir. prepare_tmp_topsrcdir(d) mozinfo = os.path.join(topobjdir, 'mozinfo.json') with open(mozinfo, 'wt') as fh: json.dump(dict( topsrcdir=d, mozconfig=mozconfig, ), fh) os.environ[b'MOZCONFIG'] = mozconfig.encode('utf-8') os.chdir(topobjdir) obj = MozbuildObject.from_environment( detect_virtualenv_mozinfo=False) self.assertEqual(obj.topobjdir, mozpath.normsep(topobjdir)) finally: os.chdir(self._old_cwd) shutil.rmtree(d)
def test_mach_command_base_inside_objdir(self): """Ensure a MachCommandBase constructed from inside the objdir works.""" d = os.path.realpath(tempfile.mkdtemp()) try: topobjdir = os.path.join(d, "objdir") os.makedirs(topobjdir) topsrcdir = os.path.join(d, "srcdir") prepare_tmp_topsrcdir(topsrcdir) mozinfo = os.path.join(topobjdir, "mozinfo.json") with open(mozinfo, "wt") as fh: json.dump( dict( topsrcdir=topsrcdir, ), fh, ) os.chdir(topobjdir) class MockMachContext(object): pass context = MockMachContext() context.cwd = topobjdir context.topdir = topsrcdir context.settings = None context.log_manager = None context.detect_virtualenv_mozinfo = False o = MachCommandBase(context, None) self.assertEqual(o.topobjdir, mozpath.normsep(topobjdir)) self.assertEqual(o.topsrcdir, mozpath.normsep(topsrcdir)) finally: os.chdir(self._old_cwd) shutil.rmtree(d)
def test_objdir_config_status(self): """Ensure @CONFIG_GUESS@ is handled when loading mozconfig.""" base = self.get_base() guess = base.resolve_config_guess() # There may be symlinks involved, so we use real paths to ensure # path consistency. d = os.path.realpath(tempfile.mkdtemp()) try: mozconfig = os.path.join(d, "mozconfig") with open(mozconfig, "wt") as fh: fh.write("mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/foo/@CONFIG_GUESS@") print("Wrote mozconfig %s" % mozconfig) topobjdir = os.path.join(d, "foo", guess) os.makedirs(topobjdir) # Create a fake topsrcdir. prepare_tmp_topsrcdir(d) mozinfo = os.path.join(topobjdir, "mozinfo.json") with open(mozinfo, "wt") as fh: json.dump( dict( topsrcdir=d, mozconfig=mozconfig, ), fh, ) os.environ["MOZCONFIG"] = mozconfig os.chdir(topobjdir) obj = MozbuildObject.from_environment(detect_virtualenv_mozinfo=False) self.assertEqual(obj.topobjdir, mozpath.normsep(topobjdir)) finally: os.chdir(self._old_cwd) shutil.rmtree(d)