Bug 680246 - add missing files from import - r=khuey

This commit is contained in:
Joey Armstrong 2012-04-02 15:28:37 -04:00
parent 85a578963f
commit 88a24ad705
7 changed files with 4521 additions and 0 deletions

View File

@ -0,0 +1,37 @@
# -*- makefile -*-
# vim:set ts=8 sw=8 sts=8 noet:
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
###########################################################################
# AUTO_DEPS - A list of deps/targets drived from other macros.
# *_DEPS - Make dependencies derived from a given macro.
###########################################################################
###########################################################################
# Threadsafe directory creation
# GENERATED_DIRS - Automated creation of these directories.
###########################################################################
mkdir_deps =$(foreach dir,$($(1)),$(dir)/.mkdir.done)
ifneq (,$(GENERATED_DIRS))
tmpauto :=$(call mkdir_deps,GENERATED_DIRS)
GENERATED_DIRS_DEPS +=$(tmpauto)
GARBAGE_DIRS +=$(tmpauto)
endif
%/.mkdir.done:
$(subst $(SPACE)-p,$(null),$(MKDIR)) -p $(dir $@)
@$(TOUCH) $@
#################################################################
# One ring/dep to rule them all:
# config/rules.mk::all target is available by default
# Add $(AUTO_DEPS) as an explicit target dependency when needed.
#################################################################
AUTO_DEPS +=$(GENERATED_DIRS_DEPS)

2035
config/rules.mk.orig Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,44 @@
# -*- makefile -*-
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
PYTHON ?= python
PYTEST = $(PYTHON) -E
# python -B not supported by older interpreters
export PYTHONDONTWRITEBYTECODE=1
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
# INCLUDED_CONFIG_MK = 1
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/config/rules.mk
autotgt_tests = .deps/autotargets.mk.ts
tgts =\
.deps/.mkdir.done\
$(autotgt_tests)
$(NULL)
##------------------_##
##---] TARGETS [---##
##------------------_##
all::
check:: $(tgts)
# Only run unit test when autotargets.mk is modified
$(autotgt_tests): $(topsrcdir)/config/makefiles/autotargets.mk
echo "MAKECMD=$(MAKE)"
MAKECMD=$(MAKE) $(PYTEST) $(srcdir)/check_mkdir.tpy
@$(TOUCH) $@

View File

@ -0,0 +1,271 @@
#!/usr/bin/env python
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
import os
import sys
import tempfile
from subprocess import call
from shutil import rmtree
import logging
import unittest
def banner():
"""
Display interpreter and system info for the test env
"""
print '*' * 75
cmd = os.path.basename(__file__)
print "%s: python version is %s" % (cmd, sys.version)
print '*' * 75
def myopts(vals):
"""
Storage for extra command line args passed.
Returns:
hash - argparse::Namespace object values
"""
if not hasattr(myopts, 'vals'):
if 'argparse' in sys.modules:
tmp = { } # key existance enables unittest module debug
else:
tmp = { 'debug': False, 'verbose': False }
for k in dir(vals):
if k[0:1] == '_':
continue
tmp[k] = getattr(vals, k)
myopts.vals = tmp
return myopts.vals
def path2posix(src):
"""
Normalize directory path syntax
Keyword arguments:
src - path to normalize
Returns:
scalar - a file path with drive separators and windows slashes removed
Todo:
move to {build,config,tools,toolkit}/python for use in a library
"""
## (drive, tail) = os.path.splitdrive(src)
## Support path testing on all platforms
drive = ''
winpath = src.find(':')
if -1 != winpath and 10 > winpath:
(drive, tail) = src.split(':', 2)
if drive:
todo = [ '', drive.rstrip(':').lstrip('/').lstrip('\\') ]
todo.extend( tail.lstrip('/').lstrip('\\').split('\\') ) # c:\a => [a]
else: # os.name == 'posix'
todo = src.split('\\')
dst = '/'.join(todo)
return dst
def checkMkdir(work, debug=False):
"""
Verify arg permutations for directory mutex creation.
Keyword arguments:
None
Returns:
Exception on error
Note:
Exception() rather than self.assertTrue() is used in this test
function to enable scatch cleanup on test exit/failure conditions.
Not guaranteed by python closures on early exit.
"""
logging.debug("Testing: checkMkdir")
if False:
path = os.path.abspath(__file__).split(os.sep)
else:
path = path2posix(os.path.abspath(__file__)).split('/')
root = os.path.join(os.sep, *path[:-5])
src = os.path.join(os.sep, *path[:-1])
rootP = path2posix(root)
srcP = path2posix(src)
workP = path2posix(work)
# C:\foo -vs- /c/foo
# [0] command paths use /c/foo
# [1] os.path.exists() on mingw() requires C:\
paths = [
[ # function generated
"%s/mkdir_bycall" % (workP),
"%s/mkdir_bycall" % (work),
],
[ # explicit dependency
"%s/mkdir_bydep" % (workP),
"%s/mkdir_bydep" % (work),
],
[ # by GENERATED_DIRS macro
"%s/mkdir_bygen" % (workP),
"%s/mkdir_bygen" % (work),
]
]
## Use make from the parent "make check" call when available
cmd = { 'make': 'make' }
shell0 = os.environ.get('MAKECMD')
if shell0:
shell = os.path.splitext(shell0)[0] # strip: .exe, .py
if -1 != shell.find('make'):
print "MAKE COMMAND FOUND: %s" % (shell0)
cmd['make'] = path2posix(shell0)
args = []
args.append('%s' % (cmd['make']))
args.append('-C %s' % (workP))
args.append("-f %s/testor.tmpl" % (srcP))
args.append('topsrcdir=%s' % (rootP))
args.append('deps_mkdir_bycall=%s' % paths[0][0])
args.append('deps_mkdir_bydep=%s' % paths[1][0])
args.append('deps_mkdir_bygen=%s' % paths[2][0])
args.append('checkup') # target
# Call will fail on mingw with output redirected ?!?
if debug:
pass
if False: # if not debug:
args.append('>/dev/null')
cmd = '%s' % (' '.join(args))
logging.debug("Running: %s" % (cmd))
rc = call(cmd, shell=True)
if rc:
raise Exception("make failed ($?=%s): cmd=%s" % (rc, cmd))
for i in paths:
logging.debug("Did testing mkdir(%s) succeed?" % (i[1]))
if not os.path.exists(i[1]):
raise Exception("Test path %s does not exist" % (i[1]))
def parseargs():
"""
Support additional command line arguments for testing
Returns:
hash - arguments of interested parsed from the command line
"""
opts = None
try:
import argparse2
parser = argparse.ArgumentParser()
parser.add_argument('--debug',
action="store_true",
default=False,
help='Enable debug mode')
# Cannot overload verbose, Verbose: False enables debugging
parser.add_argument('--verbose',
action="store_true",
default=False,
help='Enable verbose mode')
parser.add_argument('unittest_args',
nargs='*'
# help='Slurp/pass remaining args to unittest'
)
opts = parser.parse_args()
except ImportError:
pass
return opts
class TestMakeLogic(unittest.TestCase):
"""
Test suite used to validate makefile library rules and macros
"""
def setUp(self):
opts = myopts(None) # NameSpace object not hash
self.debug = opts['debug']
self.verbose = opts['verbose']
if self.debug:
logging.basicConfig(level=logging.DEBUG)
if self.verbose:
print
print "ENVIRONMENT DUMP:"
print '=' * 75
for k,v in os.environ.items():
print "env{%s} => %s" % (k, v)
print
def test_path2posix(self):
todo = {
'/dev/null' : '/dev/null',
'A:\\a\\b\\c' : '/A/a/b/c',
'B:/x/y' : '/B/x/y',
'C:/x\\y/z' : '/C/x/y/z',
'//FOO/bar/tans': '//FOO/bar/tans',
'//X\\a/b\\c/d' : '//X/a/b/c/d',
'\\c:mozilla\\sandbox': '/c/mozilla/sandbox',
}
for val,exp in todo.items():
found = path2posix(val)
tst = "posix2path(%s): %s != %s)" % (val, exp, found)
self.assertEqual(exp, found, "%s: invalid path detected" % (tst))
def test_mkdir(self):
"""
Verify directory creation rules and macros
"""
failed = True
# Exception handling is used to cleanup scratch space on error
try:
work = tempfile.mkdtemp()
checkMkdir(work, self.debug)
failed = False
finally:
if os.path.exists(work):
rmtree(work)
self.assertFalse(failed, "Unit test failure detected")
if __name__ == '__main__':
banner()
opts = parseargs()
myopts(opts)
if opts:
if hasattr(opts, 'unittest_args'):
sys.argv[1:] = opts.unittest_args
else:
sys.argv[1:] = []
unittest.main()

View File

@ -0,0 +1,62 @@
# -*- makefile -*-
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
###########################################################################
## Intent: Standalone unit tests for makefile rules and target logic
###########################################################################
deps =$(NULL)
tgts =$(NULL)
ifdef VERBOSE
tgts += show
endif
# Define macros
include $(topsrcdir)/config/makefiles/autotargets.mk
##########################
## Verify threadsafe mkdir
##########################
ifdef deps_mkdir_bycall
deps += $(call mkdir_deps,deps_mkdir_bycall)
tgts += check_mkdir
endif
ifdef deps_mkdir_bydep
deps += $(foreach dir,$(deps_mkdir_bydep),$(dir)/.mkdir.done)
tgts += check_mkdir
endif
ifdef deps_mkdir_bygen
GENERATED_DIRS += $(deps_mkdir_bygen)
tgts += check_mkdir
endif
###########################
## Minimal environment load
###########################
MKDIR ?= mkdir -p
TOUCH ?= touch
INCLUDED_CONFIG_MK = 1
include $(topsrcdir)/config/rules.mk
##-------------------##
##---] TARGETS [---##
##-------------------##
all::
# Quarks:
# o Use of 'all' would trigger export target processing
checkup: $(tgts)
# AUTO_DEPS - verify GENERATED_DIRS
check_mkdir: $(deps) $(AUTO_DEPS)
show:
@echo "tgts=[$(tgts)]"
@echo "deps=[$(deps)]"
find $(dir $(deps)) -print

View File

@ -0,0 +1,37 @@
# -*- makefile -*-
# vim:set ts=8 sw=8 sts=8 noet:
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
#
###########################################################################
# AUTO_DEPS - A list of deps/targets drived from other macros.
# *_DEPS - Make dependencies derived from a given macro.
###########################################################################
###########################################################################
# Threadsafe directory creation
# GENERATED_DIRS - Automated creation of these directories.
###########################################################################
mkdir_deps =$(foreach dir,$($(1)),$(dir)/.mkdir.done)
ifneq (,$(GENERATED_DIRS))
tmpauto :=$(call mkdir_deps,GENERATED_DIRS)
GENERATED_DIRS_DEPS +=$(tmpauto)
GARBAGE_DIRS +=$(tmpauto)
endif
%/.mkdir.done:
$(subst $(SPACE)-p,$(null),$(MKDIR)) -p $(dir $@)
@$(TOUCH) $@
#################################################################
# One ring/dep to rule them all:
# config/rules.mk::all target is available by default
# Add $(AUTO_DEPS) as an explicit target dependency when needed.
#################################################################
AUTO_DEPS +=$(GENERATED_DIRS_DEPS)

2035
js/src/config/rules.mk.orig Normal file

File diff suppressed because it is too large Load Diff