From c591b4f7d4943153c36e617035b146e7c1f7a244 Mon Sep 17 00:00:00 2001 From: Randell Jesup Date: Fri, 13 Jul 2012 15:48:07 -0400 Subject: [PATCH] Bug 773423: use absolute paths for windows, different for make vs pymake r=ted --- configure.in | 21 ++++++++++++++-- .../trunk/tools/gyp/pylib/gyp/generator/mozmake.py | 28 ++++++++++------------ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/configure.in b/configure.in index 89030ece19fb..6d249c8b5d54 100644 --- a/configure.in +++ b/configure.in @@ -981,6 +981,17 @@ if test -n "$MAKE"; then fi fi +MOZ_TOPSRCDIR=$_topsrcdir +if test -z "$NOT_PYMAKE"; then + case "$host" in + *mingw*) + MOZ_TOPSRCDIR=`cd $_topsrcdir && pwd -W` + ;; + esac +fi +# MOZ_TOPSRCDIR is an absolute path, in the correct form +# for "topsrcdir=" and "srcdir=" in Makefiles + case "$host_os" in mingw*) MOZ_PATH_PROGS(GMAKE, $GMAKE $NOT_PYMAKE make gmake, :) @@ -8681,8 +8692,14 @@ fi if test -n "$MOZ_WEBRTC"; then AC_MSG_RESULT("generating WebRTC Makefiles...") - - GYP_WEBRTC_OPTIONS="--format=mozmake -D build_with_mozilla=1 -D enable_protobuf=0 -D include_internal_video_render=0 ${EXTRA_GYP_DEFINES} --depth=${srcdir}/media/webrtc/trunk --toplevel-dir=${srcdir} -G OBJDIR=${_objdir}" + # msys (on windows) does EVIL things to parameters to python it thinks are msys paths. + # Since we already have the path in the format we want (c:/foo for pymake, + # /c/foo for make), we just want to stop msys from mucking with the string. + # The underscores will be removed in mozmake.py. We need the correct form of + # absolute path for building topsrcdir= in Makefiles. + MOZ_TOPSRCDIR="_${MOZ_TOPSRCDIR:0:2}_${MOZ_TOPSRCDIR:2}" + + GYP_WEBRTC_OPTIONS="--format=mozmake -D build_with_mozilla=1 -D enable_protobuf=0 -D include_internal_video_render=0 ${EXTRA_GYP_DEFINES} --depth=${srcdir}/media/webrtc/trunk --toplevel-dir=${srcdir} -G OBJDIR=${_objdir} -G TOPSRCDIR=${MOZ_TOPSRCDIR}" $PYTHON ${srcdir}/media/webrtc/trunk/build/gyp_chromium \ $GYP_WEBRTC_OPTIONS \ diff --git a/media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py b/media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py index 3ed8d5621957..639eca681fbd 100644 --- a/media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py +++ b/media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py @@ -198,7 +198,7 @@ def Compilable(filename): return os.path.splitext(filename)[1] in COMPILABLE_EXTENSIONS class MakefileGenerator(object): - def __init__(self, target_dicts, data, options, depth, topsrcdir, relative_topsrcdir, relative_srcdir, output_dir, flavor): + def __init__(self, target_dicts, data, options, depth, topsrcdir, relative_topsrcdir, relative_srcdir, output_dir, topsrcdir_header): self.target_dicts = target_dicts self.data = data self.options = options @@ -208,7 +208,7 @@ class MakefileGenerator(object): self.relative_topsrcdir = swapslashes(relative_topsrcdir) self.srcdir = swapslashes(os.path.join(topsrcdir, relative_srcdir)) self.output_dir = output_dir - self.flavor = flavor + self.topsrcdir_header = topsrcdir_header # Directories to be built in order. self.dirs = [] # Directories that can be built in any order, but before |dirs|. @@ -369,10 +369,7 @@ class MakefileGenerator(object): else: # Maybe nothing? return False - if self.flavor == 'win': - top = self.relative_topsrcdir - else: - top = self.topsrcdir + top = self.topsrcdir_header WriteMakefile(output_file, data, build_file, depth, top, # we set srcdir up one directory, since the subdir # doesn't actually exist in the source directory @@ -390,6 +387,11 @@ def GenerateOutput(target_list, target_dicts, data, params): topsrcdir = os.path.abspath(options.toplevel_dir) # The object directory (root of the build). objdir = os.path.abspath(generator_flags['OBJDIR'] if 'OBJDIR' in generator_flags else '.') + # The topsrcdir in correct format for the header (which changes from make to pymake on windows!) + # This is already in absolute format (not relative), with '/'s, with a leading '_' and a + # second after two characters to avoid msys modifying it on Windows(!) + topsrcdir_header = generator_flags['TOPSRCDIR'] if 'TOPSRCDIR' in generator_flags else topsrcdir + topsrcdir_header = topsrcdir_header[1:3] + topsrcdir_header[4:] # A relative path from the objdir to the topsrcdir relative_topsrcdir = gyp.common.RelativePath(topsrcdir, objdir) # The directory containing the gyp file on which gyp was invoked. @@ -399,7 +401,7 @@ def GenerateOutput(target_list, target_dicts, data, params): # The relative path from objdir to gyp_file_dir srcdir = gyp.common.RelativePath(gyp_file_dir, objdir) # The absolute path to the source dir - abs_srcdir = topsrcdir + "/" + relative_srcdir + abs_srcdir = topsrcdir_header + "/" + relative_srcdir # The path to get up to the root of the objdir from the output dir. depth = getdepth(relative_srcdir) # The output directory. @@ -422,23 +424,17 @@ def GenerateOutput(target_list, target_dicts, data, params): build_file_, _, _ = gyp.common.ParseQualifiedTarget(target) build_files.add(topsrcdir_path(build_file_)) - generator = MakefileGenerator(target_dicts, data, options, depth, topsrcdir, relative_topsrcdir, relative_srcdir, output_dir, flavor) + generator = MakefileGenerator(target_dicts, data, options, depth, topsrcdir, relative_topsrcdir, relative_srcdir, output_dir, topsrcdir_header) generator.ProcessTargets(needed_targets) # Write the top-level makefile, which simply calls the other makefiles topdata = {'DIRS': generator.dirs} if generator.parallel_dirs: topdata['PARALLEL_DIRS'] = generator.parallel_dirs - if flavor == 'win': - top = relative_topsrcdir - src = srcdir - else: - top = topsrcdir - src = abs_srcdir WriteMakefile(makefile_path, topdata, params['build_files'][0], depth, - swapslashes(top), - swapslashes(src), + swapslashes(topsrcdir_header), + swapslashes(abs_srcdir), swapslashes(relative_srcdir)) scriptname = topsrcdir_path(__file__) # Reassemble a commandline from parts so that all the paths are correct -- 2.11.4.GIT