mx icon indicating copy to clipboard operation
mx copied to clipboard

mx.py uses os.symlink, which is not supported on Windows

Open JornVernee opened this issue 7 years ago • 0 comments

For instance, when running mx build in the graal/vm suite (and after working around https://github.com/oracle/graal/issues/795) I get the error:

Traceback (most recent call last):
  File "J:\Projects\mx\mx.py", line 18829, in <module>
    main()
  File "J:\Projects\mx\mx.py", line 18810, in main
    retcode = c(command_args)
  File "J:\Projects\mx\mx_commands.py", line 132, in __call__
    return self.command_function(*args, **kwargs)
  File "J:\Projects\mx\mx.py", line 12626, in build
    t.execute()
  File "J:\Projects\mx\mx.py", line 905, in execute
    self.build()
  File "J:\Projects\graal\vm\mx.vm\mx_vm.py", line 437, in build
    super(GraalVmLayoutDistributionTask, self).build()
  File "J:\Projects\mx\mx.py", line 1897, in build
    self.subject.make_archive()
  File "J:\Projects\mx\mx.py", line 2561, in make_archive
    self._install_source(source, output, destination, arc)
  File "J:\Projects\mx\mx.py", line 2514, in _install_source
    add_symlink(destination, link_target, absolute_destination, clean_destination)
  File "J:\Projects\mx\mx.py", line 2317, in add_symlink
    os.symlink(src, abs_dest)
AttributeError: 'module' object has no attribute 'symlink'
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:210)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:161)
        at java.io.BufferedReader.readLine(BufferedReader.java:324)
        at java.io.BufferedReader.readLine(BufferedReader.java:389)
        at com.oracle.mxtool.compilerserver.CompilerDaemon$Connection.run(CompilerDaemon.java:137)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Which is originating from mx.py.

The problem seems to be that os.symlink is not supported on Windows, at least not before python 3.2 it seems.

Stack Overflow offers some workarounds [1], which I've tested and they seem to work, but later cause problems when trying to use os.unlink on the created links.

[1] : https://stackoverflow.com/a/15043806

JornVernee avatar Nov 09 '18 14:11 JornVernee