Skip to content

Commit

Permalink
custom targets: Don't replace \\ with /
Browse files Browse the repository at this point in the history
This is no longer required since we always use `/` as the path
separator for file arguments on Windows now. The only effect this
now has is to mangle the string args people pass to custom targets.

Closes #1564
  • Loading branch information
nirbheek committed Apr 13, 2018
1 parent cb597ad commit ce9b13a
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 24 deletions.
19 changes: 0 additions & 19 deletions mesonbuild/backend/backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -839,25 +839,6 @@ def eval_custom_target_command(self, target, absolute_outputs=False):
# Substitute the rest of the template strings
values = mesonlib.get_filenames_templates_dict(inputs, outputs)
cmd = mesonlib.substitute_values(cmd, values)
# This should not be necessary but removing it breaks
# building GStreamer on Windows. The underlying issue
# is problems with quoting backslashes on Windows
# which is the seventh circle of hell. The downside is
# that this breaks custom targets whose command lines
# have backslashes. If you try to fix this be sure to
# check that it does not break GST.
#
# The bug causes file paths such as c:\foo to get escaped
# into c:\\foo.
#
# Unfortunately we have not been able to come up with an
# isolated test case for this so unless you manage to come up
# with one, the only way is to test the building with Gst's
# setup. Note this in your MR or ping us and we will get it
# fixed.
#
# https://github.com/mesonbuild/meson/pull/737
cmd = [i.replace('\\', '/') for i in cmd]
return inputs, outputs, cmd

def run_postconf_scripts(self):
Expand Down
14 changes: 14 additions & 0 deletions test cases/common/48 test args/copyfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,18 @@
import sys
import shutil

# If either of these use `\` as the path separator, it will cause problems with
# MSYS, MSYS2, and Cygwin tools that expect the path separator to always be
# `/`. All Native-Windows tools also accept `/` as the path separator, so
# it's fine to always use that for arguments.
# See: https://github.com/mesonbuild/meson/issues/1564
#
# Note that this applies to both MinGW and MSVC toolchains since people use
# MSYS tools with both, or use a mixed toolchain environment.
if '\\' in sys.argv[1]:
raise RuntimeError('Found \\ in source arg {!r}'.format(sys.argv[1]))

if '\\' in sys.argv[2]:
raise RuntimeError('Found \\ in dest arg {!r}'.format(sys.argv[2]))

shutil.copyfile(sys.argv[1], sys.argv[2])
6 changes: 1 addition & 5 deletions test cases/common/48 test args/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,5 @@ test('file arg', testerpy, args : testfile, env : env_array)

copy = find_program('copyfile.py')
tester = executable('tester', 'tester.c')
testfilect = custom_target('testfile',
input : testfile,
output : 'outfile.txt',
build_by_default : true,
command : [copy, '@INPUT@', '@OUTPUT@'])
subdir('sub1')
test('custom target arg', tester, args : testfilect, env : env_array)
7 changes: 7 additions & 0 deletions test cases/common/48 test args/sub1/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Needs to be in a subdir so the @OUTPUT@ contains a path seperator since it is
# relative to the build root.
testfilect = custom_target('testfile',
input : testfile,
output : 'outfile.txt',
build_by_default : true,
command : [copy, '@INPUT@', '@OUTPUT@'])

0 comments on commit ce9b13a

Please sign in to comment.