mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 757339 - Make expandlibs commands generate dependencies like gcc does. r=ted
This commit is contained in:
parent
63dd07cb12
commit
199001d030
@ -731,9 +731,8 @@ OPTIMIZE_JARS_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/optimizeja
|
||||
|
||||
CREATE_PRECOMPLETE_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/createprecomplete.py)
|
||||
|
||||
EXPAND_LIBS_DEPS = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_deps.py
|
||||
EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_exec.py
|
||||
EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_gen.py
|
||||
EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_exec.py $(if $@,--depend $(MDDEPDIR)/$(basename $(@F)).pp --target $@)
|
||||
EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_gen.py $(if $@,--depend $(MDDEPDIR)/$(basename $(@F)).pp)
|
||||
EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR)
|
||||
EXPAND_CC = $(EXPAND_LIBS_EXEC) --uselist -- $(CC)
|
||||
EXPAND_CCC = $(EXPAND_LIBS_EXEC) --uselist -- $(CCC)
|
||||
|
@ -27,9 +27,19 @@ ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} following these rules:
|
||||
rules.
|
||||
'''
|
||||
from __future__ import with_statement
|
||||
import sys, os
|
||||
import sys, os, errno
|
||||
import expandlibs_config as conf
|
||||
|
||||
def ensureParentDir(file):
|
||||
'''Ensures the directory parent to the given file exists'''
|
||||
dir = os.path.dirname(file)
|
||||
if dir and not os.path.exists(dir):
|
||||
try:
|
||||
os.makedirs(dir)
|
||||
except OSError, error:
|
||||
if error.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
def relativize(path):
|
||||
'''Returns a path relative to the current working directory, if it is
|
||||
shorter than the given path'''
|
||||
@ -116,5 +126,13 @@ class ExpandArgs(list):
|
||||
return objs
|
||||
return [arg]
|
||||
|
||||
class ExpandLibsDeps(ExpandArgs):
|
||||
'''Same as ExpandArgs, but also adds the library descriptor to the list'''
|
||||
def _expand_desc(self, arg):
|
||||
objs = super(ExpandLibsDeps, self)._expand_desc(arg)
|
||||
if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
|
||||
objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)]
|
||||
return objs
|
||||
|
||||
if __name__ == '__main__':
|
||||
print " ".join(ExpandArgs(sys.argv[1:]))
|
||||
|
@ -1,50 +0,0 @@
|
||||
# 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/.
|
||||
|
||||
'''expandlibs_deps.py takes a list of key/value pairs and prints, for each
|
||||
key, a list of all dependencies corresponding to the corresponding value.
|
||||
Libraries are thus expanded, and their descriptor is also made part of this
|
||||
list.
|
||||
The list of key/value is passed on the command line in the form
|
||||
"var1 = value , var2 = value ..."
|
||||
'''
|
||||
import sys
|
||||
import os
|
||||
from expandlibs import ExpandArgs, relativize
|
||||
import expandlibs_config as conf
|
||||
|
||||
class ExpandLibsDeps(ExpandArgs):
|
||||
def _expand_desc(self, arg):
|
||||
objs = super(ExpandLibsDeps, self)._expand_desc(arg)
|
||||
if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
|
||||
objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)]
|
||||
return objs
|
||||
|
||||
def split_args(args):
|
||||
'''Transforms a list in the form
|
||||
['var1', '=', 'value', ',', 'var2', '=', 'other', 'value', ',' ...]
|
||||
into a corresponding dict
|
||||
{ 'var1': ['value'],
|
||||
'var2': ['other', 'value'], ... }'''
|
||||
|
||||
result = {}
|
||||
while args:
|
||||
try:
|
||||
i = args.index(',')
|
||||
l = args[:i]
|
||||
args[:i + 1] = []
|
||||
except:
|
||||
l = args
|
||||
args = []
|
||||
if l[1] != '=':
|
||||
raise RuntimeError('Expected "var = value" format')
|
||||
result[l[0]] = l[2:]
|
||||
return result
|
||||
|
||||
if __name__ == '__main__':
|
||||
for key, value in split_args(sys.argv[1:]).iteritems():
|
||||
expanded = ExpandLibsDeps(value)
|
||||
if os.sep == '\\':
|
||||
expanded = [o.replace(os.sep, '/') for o in expanded]
|
||||
print "%s = %s" % (key, " ".join(expanded))
|
@ -23,7 +23,7 @@ symbols appear in the resulting binary. Only works for ELF targets.
|
||||
from __future__ import with_statement
|
||||
import sys
|
||||
import os
|
||||
from expandlibs import ExpandArgs, relativize, isObject
|
||||
from expandlibs import ExpandArgs, relativize, isObject, ensureParentDir, ExpandLibsDeps
|
||||
import expandlibs_config as conf
|
||||
from optparse import OptionParser
|
||||
import subprocess
|
||||
@ -269,6 +269,10 @@ class SectionFinder(object):
|
||||
|
||||
def main():
|
||||
parser = OptionParser()
|
||||
parser.add_option("--depend", dest="depend", metavar="FILE",
|
||||
help="generate dependencies for the given execution and store it in the given file")
|
||||
parser.add_option("--target", dest="target", metavar="FILE",
|
||||
help="designate the target for dependencies")
|
||||
parser.add_option("--extract", action="store_true", dest="extract",
|
||||
help="when a library has no descriptor file, extract it first, when possible")
|
||||
parser.add_option("--uselist", action="store_true", dest="uselist",
|
||||
@ -280,6 +284,15 @@ def main():
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if not options.target:
|
||||
options.depend = False
|
||||
if options.depend:
|
||||
deps = ExpandLibsDeps(args)
|
||||
# Filter out common command wrappers
|
||||
while os.path.basename(deps[0]) in ['ccache', 'distcc']:
|
||||
deps.pop(0)
|
||||
# Remove command
|
||||
deps.pop(0)
|
||||
with ExpandArgsMore(args) as args:
|
||||
if options.extract:
|
||||
args.extract()
|
||||
@ -295,7 +308,15 @@ def main():
|
||||
with open(tmp) as file:
|
||||
print >>sys.stderr, "".join([" " + l for l in file.readlines()])
|
||||
sys.stderr.flush()
|
||||
exit(subprocess.call(args))
|
||||
ret = subprocess.call(args)
|
||||
if ret:
|
||||
exit(ret)
|
||||
if not options.depend:
|
||||
return
|
||||
ensureParentDir(options.depend)
|
||||
with open(options.depend, 'w') as depfile:
|
||||
depfile.write("%s : %s\n" % (options.target, ' '.join(dep for dep in deps if os.path.isfile(dep) and dep != options.target)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
@ -5,10 +5,12 @@
|
||||
'''Given a list of object files and library names, prints a library
|
||||
descriptor to standard output'''
|
||||
|
||||
from __future__ import with_statement
|
||||
import sys
|
||||
import os
|
||||
import expandlibs_config as conf
|
||||
from expandlibs import LibDescriptor, isObject
|
||||
from expandlibs import LibDescriptor, isObject, ensureParentDir, ExpandLibsDeps
|
||||
from optparse import OptionParser
|
||||
|
||||
def generate(args):
|
||||
desc = LibDescriptor()
|
||||
@ -26,4 +28,20 @@ def generate(args):
|
||||
return desc
|
||||
|
||||
if __name__ == '__main__':
|
||||
print generate(sys.argv[1:])
|
||||
parser = OptionParser()
|
||||
parser.add_option("--depend", dest="depend", metavar="FILE",
|
||||
help="generate dependencies for the given execution and store it in the given file")
|
||||
parser.add_option("-o", dest="output", metavar="FILE",
|
||||
help="send output to the given file")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
if not options.output:
|
||||
raise Exception("Missing option: -o")
|
||||
|
||||
ensureParentDir(options.output)
|
||||
with open(options.output, 'w') as outfile:
|
||||
print >>outfile, generate(args)
|
||||
if options.depend:
|
||||
ensureParentDir(options.depend)
|
||||
with open(options.depend, 'w') as depfile:
|
||||
depfile.write("%s : %s\n" % (options.output, ' '.join(ExpandLibsDeps(args))))
|
||||
|
@ -643,23 +643,6 @@ ifneq (,$(filter-out %.$(LIB_SUFFIX),$(SHARED_LIBRARY_LIBS)))
|
||||
$(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only)
|
||||
endif
|
||||
|
||||
# Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries
|
||||
ifneq (,$(strip $(filter %.$(LIB_SUFFIX),$(LIBS) $(EXTRA_DSO_LDOPTS)) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LIBS)))
|
||||
$(MDDEPDIR)/libs: Makefile.in
|
||||
@mkdir -p $(MDDEPDIR)
|
||||
@$(EXPAND_LIBS_DEPS) LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(LIBS)) , \
|
||||
SHARED_LIBRARY_LIBS_DEPS = $(SHARED_LIBRARY_LIBS) , \
|
||||
DSO_LDOPTS_DEPS = $(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS)) > $@
|
||||
|
||||
ifneq (,$(wildcard $(MDDEPDIR)/libs))
|
||||
include $(MDDEPDIR)/libs
|
||||
endif
|
||||
|
||||
$(MDDEPDIR)/libs: $(wildcard $(filter %.$(LIBS_DESC_SUFFIX),$(LIBS_DEPS) $(SHARED_LIBRARY_LIBS_DEPS) $(DSO_LDOPTS_DEPS)))
|
||||
|
||||
EXTRA_DEPS += $(MDDEPDIR)/libs
|
||||
endif
|
||||
|
||||
HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS))
|
||||
|
||||
# Dependencies which, if modified, should cause everything to rebuild
|
||||
@ -752,7 +735,7 @@ alltags:
|
||||
# PROGRAM = Foo
|
||||
# creates OBJS, links with LIBS to create Foo
|
||||
#
|
||||
$(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
|
||||
$(PROGRAM): $(PROGOBJS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
|
||||
@$(RM) $@.manifest
|
||||
ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
|
||||
$(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
|
||||
@ -820,7 +803,7 @@ endif
|
||||
# SIMPLE_PROGRAMS = Foo Bar
|
||||
# creates Foo.o Bar.o, links with LIBS to create Foo, Bar.
|
||||
#
|
||||
$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
|
||||
$(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
|
||||
ifdef MSMANIFEST_TOOL
|
||||
@ -857,15 +840,15 @@ EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
|
||||
OBJS += $(DTRACE_PROBE_OBJ)
|
||||
endif
|
||||
|
||||
$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(LOBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(RM) $(LIBRARY)
|
||||
$(EXPAND_AR) $(AR_FLAGS) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS)
|
||||
$(RANLIB) $@
|
||||
|
||||
$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(LOBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
# When we only build a library descriptor, blow out any existing library
|
||||
$(if $(filter %.$(LIB_SUFFIX),$(LIBRARY)),,$(RM) $(REAL_LIBRARY) $(EXPORT_LIBRARY:%=%/$(REAL_LIBRARY)))
|
||||
$(EXPAND_LIBS_GEN) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS) > $@
|
||||
$(EXPAND_LIBS_GEN) -o $@ $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS)
|
||||
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
|
||||
@ -910,7 +893,7 @@ endif
|
||||
# symlinks back to the originals. The symlinks are a no-op for stabs debugging,
|
||||
# so no need to conditionalize on OS version or debugging format.
|
||||
|
||||
$(SHARED_LIBRARY): $(OBJS) $(LOBJS) $(DEF_FILE) $(RESFILE) $(SHARED_LIBRARY_LIBS_DEPS) $(LIBRARY) $(EXTRA_DEPS) $(DSO_LDOPTS_DEPS) $(GLOBAL_DEPS)
|
||||
$(SHARED_LIBRARY): $(OBJS) $(LOBJS) $(DEF_FILE) $(RESFILE) $(LIBRARY) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
ifndef INCREMENTAL_LINKER
|
||||
$(RM) $@
|
||||
endif
|
||||
|
@ -36,8 +36,7 @@ config_unix = {
|
||||
|
||||
config = sys.modules['expandlibs_config'] = imp.new_module('expandlibs_config')
|
||||
|
||||
from expandlibs import LibDescriptor, ExpandArgs, relativize
|
||||
from expandlibs_deps import ExpandLibsDeps, split_args
|
||||
from expandlibs import LibDescriptor, ExpandArgs, relativize, ExpandLibsDeps
|
||||
from expandlibs_gen import generate
|
||||
from expandlibs_exec import ExpandArgsMore, SectionFinder
|
||||
|
||||
@ -213,12 +212,6 @@ class TestExpandLibsDeps(TestExpandInit):
|
||||
args = self.arg_files + [self.tmpfile('liby', Lib('y'))]
|
||||
self.assertRelEqual(ExpandLibsDeps(args), ExpandArgs(args))
|
||||
|
||||
class TestSplitArgs(unittest.TestCase):
|
||||
def test_split_args(self):
|
||||
self.assertEqual(split_args(['a', '=', 'b', 'c']), {'a': ['b', 'c']})
|
||||
self.assertEqual(split_args(['a', '=', 'b', 'c', ',', 'd', '=', 'e', 'f', 'g', ',', 'h', '=', 'i']),
|
||||
{'a': ['b', 'c'], 'd': ['e', 'f', 'g'], 'h': ['i']})
|
||||
|
||||
class TestExpandArgsMore(TestExpandInit):
|
||||
def test_makelist(self):
|
||||
'''Test grouping object files in lists'''
|
||||
|
@ -731,9 +731,8 @@ OPTIMIZE_JARS_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/optimizeja
|
||||
|
||||
CREATE_PRECOMPLETE_CMD = $(PYTHON) $(call core_abspath,$(topsrcdir)/config/createprecomplete.py)
|
||||
|
||||
EXPAND_LIBS_DEPS = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_deps.py
|
||||
EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_exec.py
|
||||
EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_gen.py
|
||||
EXPAND_LIBS_EXEC = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_exec.py $(if $@,--depend $(MDDEPDIR)/$(basename $(@F)).pp --target $@)
|
||||
EXPAND_LIBS_GEN = $(PYTHON) $(topsrcdir)/config/pythonpath.py -I$(DEPTH)/config $(topsrcdir)/config/expandlibs_gen.py $(if $@,--depend $(MDDEPDIR)/$(basename $(@F)).pp)
|
||||
EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR)
|
||||
EXPAND_CC = $(EXPAND_LIBS_EXEC) --uselist -- $(CC)
|
||||
EXPAND_CCC = $(EXPAND_LIBS_EXEC) --uselist -- $(CCC)
|
||||
|
@ -27,9 +27,19 @@ ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} following these rules:
|
||||
rules.
|
||||
'''
|
||||
from __future__ import with_statement
|
||||
import sys, os
|
||||
import sys, os, errno
|
||||
import expandlibs_config as conf
|
||||
|
||||
def ensureParentDir(file):
|
||||
'''Ensures the directory parent to the given file exists'''
|
||||
dir = os.path.dirname(file)
|
||||
if dir and not os.path.exists(dir):
|
||||
try:
|
||||
os.makedirs(dir)
|
||||
except OSError, error:
|
||||
if error.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
def relativize(path):
|
||||
'''Returns a path relative to the current working directory, if it is
|
||||
shorter than the given path'''
|
||||
@ -116,5 +126,13 @@ class ExpandArgs(list):
|
||||
return objs
|
||||
return [arg]
|
||||
|
||||
class ExpandLibsDeps(ExpandArgs):
|
||||
'''Same as ExpandArgs, but also adds the library descriptor to the list'''
|
||||
def _expand_desc(self, arg):
|
||||
objs = super(ExpandLibsDeps, self)._expand_desc(arg)
|
||||
if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
|
||||
objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)]
|
||||
return objs
|
||||
|
||||
if __name__ == '__main__':
|
||||
print " ".join(ExpandArgs(sys.argv[1:]))
|
||||
|
@ -1,50 +0,0 @@
|
||||
# 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/.
|
||||
|
||||
'''expandlibs_deps.py takes a list of key/value pairs and prints, for each
|
||||
key, a list of all dependencies corresponding to the corresponding value.
|
||||
Libraries are thus expanded, and their descriptor is also made part of this
|
||||
list.
|
||||
The list of key/value is passed on the command line in the form
|
||||
"var1 = value , var2 = value ..."
|
||||
'''
|
||||
import sys
|
||||
import os
|
||||
from expandlibs import ExpandArgs, relativize
|
||||
import expandlibs_config as conf
|
||||
|
||||
class ExpandLibsDeps(ExpandArgs):
|
||||
def _expand_desc(self, arg):
|
||||
objs = super(ExpandLibsDeps, self)._expand_desc(arg)
|
||||
if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
|
||||
objs += [relativize(arg + conf.LIBS_DESC_SUFFIX)]
|
||||
return objs
|
||||
|
||||
def split_args(args):
|
||||
'''Transforms a list in the form
|
||||
['var1', '=', 'value', ',', 'var2', '=', 'other', 'value', ',' ...]
|
||||
into a corresponding dict
|
||||
{ 'var1': ['value'],
|
||||
'var2': ['other', 'value'], ... }'''
|
||||
|
||||
result = {}
|
||||
while args:
|
||||
try:
|
||||
i = args.index(',')
|
||||
l = args[:i]
|
||||
args[:i + 1] = []
|
||||
except:
|
||||
l = args
|
||||
args = []
|
||||
if l[1] != '=':
|
||||
raise RuntimeError('Expected "var = value" format')
|
||||
result[l[0]] = l[2:]
|
||||
return result
|
||||
|
||||
if __name__ == '__main__':
|
||||
for key, value in split_args(sys.argv[1:]).iteritems():
|
||||
expanded = ExpandLibsDeps(value)
|
||||
if os.sep == '\\':
|
||||
expanded = [o.replace(os.sep, '/') for o in expanded]
|
||||
print "%s = %s" % (key, " ".join(expanded))
|
@ -23,7 +23,7 @@ symbols appear in the resulting binary. Only works for ELF targets.
|
||||
from __future__ import with_statement
|
||||
import sys
|
||||
import os
|
||||
from expandlibs import ExpandArgs, relativize, isObject
|
||||
from expandlibs import ExpandArgs, relativize, isObject, ensureParentDir, ExpandLibsDeps
|
||||
import expandlibs_config as conf
|
||||
from optparse import OptionParser
|
||||
import subprocess
|
||||
@ -269,6 +269,10 @@ class SectionFinder(object):
|
||||
|
||||
def main():
|
||||
parser = OptionParser()
|
||||
parser.add_option("--depend", dest="depend", metavar="FILE",
|
||||
help="generate dependencies for the given execution and store it in the given file")
|
||||
parser.add_option("--target", dest="target", metavar="FILE",
|
||||
help="designate the target for dependencies")
|
||||
parser.add_option("--extract", action="store_true", dest="extract",
|
||||
help="when a library has no descriptor file, extract it first, when possible")
|
||||
parser.add_option("--uselist", action="store_true", dest="uselist",
|
||||
@ -280,6 +284,15 @@ def main():
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if not options.target:
|
||||
options.depend = False
|
||||
if options.depend:
|
||||
deps = ExpandLibsDeps(args)
|
||||
# Filter out common command wrappers
|
||||
while os.path.basename(deps[0]) in ['ccache', 'distcc']:
|
||||
deps.pop(0)
|
||||
# Remove command
|
||||
deps.pop(0)
|
||||
with ExpandArgsMore(args) as args:
|
||||
if options.extract:
|
||||
args.extract()
|
||||
@ -295,7 +308,15 @@ def main():
|
||||
with open(tmp) as file:
|
||||
print >>sys.stderr, "".join([" " + l for l in file.readlines()])
|
||||
sys.stderr.flush()
|
||||
exit(subprocess.call(args))
|
||||
ret = subprocess.call(args)
|
||||
if ret:
|
||||
exit(ret)
|
||||
if not options.depend:
|
||||
return
|
||||
ensureParentDir(options.depend)
|
||||
with open(options.depend, 'w') as depfile:
|
||||
depfile.write("%s : %s\n" % (options.target, ' '.join(dep for dep in deps if os.path.isfile(dep) and dep != options.target)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
@ -5,10 +5,12 @@
|
||||
'''Given a list of object files and library names, prints a library
|
||||
descriptor to standard output'''
|
||||
|
||||
from __future__ import with_statement
|
||||
import sys
|
||||
import os
|
||||
import expandlibs_config as conf
|
||||
from expandlibs import LibDescriptor, isObject
|
||||
from expandlibs import LibDescriptor, isObject, ensureParentDir, ExpandLibsDeps
|
||||
from optparse import OptionParser
|
||||
|
||||
def generate(args):
|
||||
desc = LibDescriptor()
|
||||
@ -26,4 +28,20 @@ def generate(args):
|
||||
return desc
|
||||
|
||||
if __name__ == '__main__':
|
||||
print generate(sys.argv[1:])
|
||||
parser = OptionParser()
|
||||
parser.add_option("--depend", dest="depend", metavar="FILE",
|
||||
help="generate dependencies for the given execution and store it in the given file")
|
||||
parser.add_option("-o", dest="output", metavar="FILE",
|
||||
help="send output to the given file")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
if not options.output:
|
||||
raise Exception("Missing option: -o")
|
||||
|
||||
ensureParentDir(options.output)
|
||||
with open(options.output, 'w') as outfile:
|
||||
print >>outfile, generate(args)
|
||||
if options.depend:
|
||||
ensureParentDir(options.depend)
|
||||
with open(options.depend, 'w') as depfile:
|
||||
depfile.write("%s : %s\n" % (options.output, ' '.join(ExpandLibsDeps(args))))
|
||||
|
@ -643,23 +643,6 @@ ifneq (,$(filter-out %.$(LIB_SUFFIX),$(SHARED_LIBRARY_LIBS)))
|
||||
$(error SHARED_LIBRARY_LIBS must contain .$(LIB_SUFFIX) files only)
|
||||
endif
|
||||
|
||||
# Create dependencies on static (and shared EXTRA_DSO_LIBS) libraries
|
||||
ifneq (,$(strip $(filter %.$(LIB_SUFFIX),$(LIBS) $(EXTRA_DSO_LDOPTS)) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LIBS)))
|
||||
$(MDDEPDIR)/libs: Makefile.in
|
||||
@mkdir -p $(MDDEPDIR)
|
||||
@$(EXPAND_LIBS_DEPS) LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(LIBS)) , \
|
||||
SHARED_LIBRARY_LIBS_DEPS = $(SHARED_LIBRARY_LIBS) , \
|
||||
DSO_LDOPTS_DEPS = $(EXTRA_DSO_LIBS) $(filter %.$(LIB_SUFFIX), $(EXTRA_DSO_LDOPTS)) > $@
|
||||
|
||||
ifneq (,$(wildcard $(MDDEPDIR)/libs))
|
||||
include $(MDDEPDIR)/libs
|
||||
endif
|
||||
|
||||
$(MDDEPDIR)/libs: $(wildcard $(filter %.$(LIBS_DESC_SUFFIX),$(LIBS_DEPS) $(SHARED_LIBRARY_LIBS_DEPS) $(DSO_LDOPTS_DEPS)))
|
||||
|
||||
EXTRA_DEPS += $(MDDEPDIR)/libs
|
||||
endif
|
||||
|
||||
HOST_LIBS_DEPS = $(filter %.$(LIB_SUFFIX),$(HOST_LIBS))
|
||||
|
||||
# Dependencies which, if modified, should cause everything to rebuild
|
||||
@ -752,7 +735,7 @@ alltags:
|
||||
# PROGRAM = Foo
|
||||
# creates OBJS, links with LIBS to create Foo
|
||||
#
|
||||
$(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
|
||||
$(PROGRAM): $(PROGOBJS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
|
||||
@$(RM) $@.manifest
|
||||
ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
|
||||
$(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
|
||||
@ -820,7 +803,7 @@ endif
|
||||
# SIMPLE_PROGRAMS = Foo Bar
|
||||
# creates Foo.o Bar.o, links with LIBS to create Foo, Bar.
|
||||
#
|
||||
$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
|
||||
$(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_GLUE_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
|
||||
ifdef MSMANIFEST_TOOL
|
||||
@ -857,15 +840,15 @@ EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
|
||||
OBJS += $(DTRACE_PROBE_OBJ)
|
||||
endif
|
||||
|
||||
$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(LOBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(RM) $(LIBRARY)
|
||||
$(EXPAND_AR) $(AR_FLAGS) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS)
|
||||
$(RANLIB) $@
|
||||
|
||||
$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(LOBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
# When we only build a library descriptor, blow out any existing library
|
||||
$(if $(filter %.$(LIB_SUFFIX),$(LIBRARY)),,$(RM) $(REAL_LIBRARY) $(EXPORT_LIBRARY:%=%/$(REAL_LIBRARY)))
|
||||
$(EXPAND_LIBS_GEN) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS) > $@
|
||||
$(EXPAND_LIBS_GEN) -o $@ $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS)
|
||||
|
||||
ifeq ($(OS_ARCH),WINNT)
|
||||
$(IMPORT_LIBRARY): $(SHARED_LIBRARY)
|
||||
@ -910,7 +893,7 @@ endif
|
||||
# symlinks back to the originals. The symlinks are a no-op for stabs debugging,
|
||||
# so no need to conditionalize on OS version or debugging format.
|
||||
|
||||
$(SHARED_LIBRARY): $(OBJS) $(LOBJS) $(DEF_FILE) $(RESFILE) $(SHARED_LIBRARY_LIBS_DEPS) $(LIBRARY) $(EXTRA_DEPS) $(DSO_LDOPTS_DEPS) $(GLOBAL_DEPS)
|
||||
$(SHARED_LIBRARY): $(OBJS) $(LOBJS) $(DEF_FILE) $(RESFILE) $(LIBRARY) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
ifndef INCREMENTAL_LINKER
|
||||
$(RM) $@
|
||||
endif
|
||||
|
Loading…
Reference in New Issue
Block a user