[Lldb-commits] [lldb] r263844 - Fix a build issue where the python module could become stale.

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Fri Mar 18 15:33:59 PDT 2016


Author: zturner
Date: Fri Mar 18 17:33:59 2016
New Revision: 263844

URL: http://llvm.org/viewvc/llvm-project?rev=263844&view=rev
Log:
Fix a build issue where the python module could become stale.

We are using hardlinks instead of symlinks, and we attempted to
have some logic where we don't re-create the link if the target
file already exists.  This logic is faulty, however, when you
manually delete the source file (e.g. liblldb.dll) and then rebuild
lldb so that a brand new liblldb.dll gets written.  Now the two files
have different inodes, but the target exists, so we would not remake
the link and the target would become stale.

We fix this by only doing the optimization if they are really the
exact same file (by comparing inode numbers), and if they are not
the same file but the target exists, we delete it and re-create
the link.

Modified:
    lldb/trunk/scripts/Python/finishSwigPythonLLDB.py

Modified: lldb/trunk/scripts/Python/finishSwigPythonLLDB.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/finishSwigPythonLLDB.py?rev=263844&r1=263843&r2=263844&view=diff
==============================================================================
--- lldb/trunk/scripts/Python/finishSwigPythonLLDB.py (original)
+++ lldb/trunk/scripts/Python/finishSwigPythonLLDB.py Fri Mar 18 17:33:59 2016
@@ -229,6 +229,23 @@ def make_symlink_windows(vstrSrcPath, vs
     dbg = utilsDebug.CDebugFnVerbose("Python script make_symlink_windows()")
     bOk = True
     strErrMsg = ""
+    # If the src file doesn't exist, this is an error and we should throw.
+    src_stat = os.stat(vstrSrcPath)
+
+    try:
+        target_stat = os.stat(vstrTargetPath)
+        # If the target file exists but refers to a different file, delete it so that we can
+        # re-create the link.  This can happen if you run this script once (creating a link)
+        # and then delete the source file (so that a brand new file gets created the next time
+        # you compile and link), and then re-run this script, so that both the target hardlink
+        # and the source file exist, but the target refers to an old copy of the source.
+        if (target_stat.st_ino == src_stat.st_ino) and (target_stat.st_dev == src_stat.st_dev):
+            return (bOk, strErrMsg)
+
+        os.remove(vstrTargetPath)
+    except:
+        # If the target file don't exist, ignore this exception, we will link it shortly.
+        pass
 
     try:
         csl = ctypes.windll.kernel32.CreateHardLinkW
@@ -280,10 +297,6 @@ def make_symlink_native(vDictArgs, strSr
         bOk = False
         strErrMsg = strErrMsgOsTypeUnknown
     elif eOSType == utilsOsType.EnumOsType.Windows:
-        if os.path.isfile(strTarget):
-            if bDbg:
-                print((strMsgSymlinkExists % target_filename))
-            return (bOk, strErrMsg)
         if bDbg:
             print((strMsgSymlinkMk % (target_filename, strSrc, strTarget)))
         bOk, strErrMsg = make_symlink_windows(strSrc,




More information about the lldb-commits mailing list