restore tools/argdumper/CMakeLists.txt

http://reviews.llvm.org/D7550

Files:
  scripts/Python/finish-swig-Python-LLDB.sh
  scripts/Python/finishSwigPythonLLDB.py
  test/functionalities/launch_with_glob/TestLaunchWithGlob.py
  tools/CMakeLists.txt
  tools/argdumper/CMakeLists.txt

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: scripts/Python/finish-swig-Python-LLDB.sh
===================================================================
--- scripts/Python/finish-swig-Python-LLDB.sh
+++ scripts/Python/finish-swig-Python-LLDB.sh
@@ -167,6 +167,7 @@
     fi
 fi
 
+# Make symlink for darwin-debug on Darwin
 if [ ${OS_NAME} = "Darwin" ] && [ $MakefileCalled -ne 0 ]
 then
     # We are being built by CMake on Darwin
@@ -187,6 +188,27 @@
     fi
 fi
 
+# Make symlink for argdumper on any platform
+if [ $MakefileCalled -ne 0 ]
+then
+    # We are being built by CMake
+
+    if [ ! -L "${framework_python_dir}/argdumper" ]
+    then
+        if [ $Debug -eq 1 ]
+        then
+            echo "Creating symlink for argdumper"
+        fi
+        cd "${framework_python_dir}"
+        ln -s "../../../../bin/argdumper" argdumper
+    else
+        if [ $Debug -eq 1 ]
+        then
+            echo "${framework_python_dir}/argdumper already exists."
+        fi
+    fi
+fi
+
 create_python_package () {
     package_dir="${framework_python_dir}$1"
     package_files="$2"
Index: scripts/Python/finishSwigPythonLLDB.py
===================================================================
--- scripts/Python/finishSwigPythonLLDB.py
+++ scripts/Python/finishSwigPythonLLDB.py
@@ -70,8 +70,8 @@
 strMsgFrameWkPyExists = "Python output folder '%s' already exists";
 strMsgFrameWkPyMkDir = "Python output folder '%s' will be created";
 strErrMsgCreateFrmWkPyDirFailed = "Unable to create directory '%s' error: %s";
-strMsglldbsoExists = "Symlink '%s' already exists";
-strMsglldbsoMk = "Creating symlink for _lldb.so  (%s -> %s)";
+strMsgSymlinkExists = "Symlink for '%s' already exists";
+strMsgSymlinkMk = "Creating symlink for %s  (%s -> %s)";
 strErrMsgCpLldbpy = "copying lldb to lldb package directory";
 strErrMsgCreatePyPkgMissingSlash = "Parameter 3 fn create_py_pkg() missing slash"; 
 strErrMsgMkLinkExecute = "Command mklink failed: %s";
@@ -218,163 +218,212 @@
 		strMsg = strErrMsgUnexpected % sys.exec_info()[ 0 ];
 	
 	return (bOk, strMsg);
+	
+#++---------------------------------------------------------------------------
+# Details:	Make the symbolic link on a Windows platform.
+# Args:		vstrSrcFile				- (R) Source file name.
+#			vstrTargetFile			- (R) Destination file name.
+# Returns:	Bool - True = function success, False = failure.
+#			Str - Error description on task failure.
+# Throws:	None.
+#--
+def make_symlink_windows( vstrSrcPath, vstrTargetPath ):
+	print "Making symlink from %s to %s" % (vstrSrcPath, vstrTargetPath);
+	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_windows()" );
+	bOk = True;
+	strErrMsg = "";
+
+	try:
+		csl = ctypes.windll.kernel32.CreateHardLinkW
+		csl.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_uint32)
+		csl.restype = ctypes.c_ubyte
+		if csl(vstrTargetPath, vstrSrcPath, 0) == 0:
+			raise ctypes.WinError()
+	except Exception as e:
+		if e.errno != 17:
+			bOk = False;
+			strErrMsg = "WinError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink);
+			strErrMsg += " Src:'%s' Target:'%s'" % (vstrSrcPath, vstrTargetPath);
+
+	return (bOk, strErrMsg);
 
 #++---------------------------------------------------------------------------
-# Details:	Make the symbolic that the script bridge for Python will need in 
-# 			the Python framework directory. Code for specific to Windows.
+# Details:	Make the symbolic link on a UNIX style platform.
+# Args:		vstrSrcFile				- (R) Source file name.
+#			vstrTargetFile			- (R) Destination file name.
+# Returns:	Bool - True = function success, False = failure.
+#			Str - Error description on task failure.
+# Throws:	None.
+#--
+def make_symlink_other_platforms( vstrSrcPath, vstrTargetPath ):
+	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_other_platforms()" );
+	bOk = True;
+	strErrMsg = "";
+
+	try:
+		os.symlink( vstrSrcPath, vstrTargetPath );
+	except OSError as e:
+		bOk = False;
+		strErrMsg = "OSError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink);
+		strErrMsg += " Src:'%s' Target:'%s'" % (vstrSrcPath, vstrTargetPath);
+	except:
+		bOk = False;
+		strErrMsg = strErrMsgUnexpected % sys.exec_info()[ 0 ];
+
+	return (bOk, strErrMsg);
+
+#++---------------------------------------------------------------------------
+# Details:	Make the symbolic link.
 # Args:		vDictArgs				- (R) Program input parameters.
 #			vstrFrameworkPythonDir	- (R) Python framework directory.
-#			vstrDllName				- (R) File name for _lldb.dll.
+#			vstrSrcFile				- (R) Source file name.
+#			vstrTargetFile			- (R) Destination file name.
 # Returns:	Bool - True = function success, False = failure.
 #			Str - Error description on task failure.
 # Throws:	None.
 #--
-def make_symlink_windows( vDictArgs, vstrFrameworkPythonDir, vstrDllName ):
-	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_windows()" );
+def make_symlink( vDictArgs, vstrFrameworkPythonDir, vstrSrcFile, vstrTargetFile ):
+	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink()" );
 	bOk = True;
-	strMsg = "";
-
+	strErrMsg = "";
 	bDbg = vDictArgs.has_key( "-d" );
-	strTarget = vstrDllName;
-	# When importing an extension module using a debug version of python, you
-	# write, for example, "import foo", but the interpreter searches for
-	# "foo_d.pyd"
-	if vDictArgs["--buildConfig"].lower() == "debug":
-		strTarget += "_d";
-	strTarget += ".pyd";
-	strDLLPath = "%s\\%s" % (vstrFrameworkPythonDir, strTarget);
-	strTarget = os.path.normcase( strDLLPath );
+	strTarget = "%s/%s" % (vstrFrameworkPythonDir, vstrTargetFile);
+	strTarget = os.path.normcase( strTarget );
 	strSrc = "";
 
 	os.chdir( vstrFrameworkPythonDir );
 	bMakeFileCalled = vDictArgs.has_key( "-m" );
+	eOSType = utilsOsType.determine_os_type();
 	if not bMakeFileCalled:
-		strSrc = os.path.normcase( "../../../LLDB" );
+		return (bOk, strErrMsg);
 	else:
-		strLibFileExtn = ".dll";
-		strSrc = os.path.normcase( "../../../bin/liblldb%s" % strLibFileExtn );
+		strSrc = os.path.normcase( "../../../%s" % vstrSrcFile );
 
-	if os.path.isfile( strTarget ):
+	if eOSType == utilsOsType.EnumOsType.Unknown:
+		bOk = False;
+		strErrMsg = strErrMsgOsTypeUnknown;
+	elif eOSType == utilsOsType.EnumOsType.Windows:
+		if os.path.isfile( strTarget ):
+			if bDbg:
+				print strMsgSymlinkExists % vstrTargetFile;
 		if bDbg:
-			print strMsglldbsoExists % strTarget;
-		return (bOk, strMsg);
+			print strMsgSymlinkMk % (vstrTargetFile, strSrc, strTarget);
+		bOk, strErrMsg = make_symlink_windows( strSrc,
+                                               strTarget );
+	else:
+		if os.path.islink( strTarget ):
+			if bDbg:
+				print strMsgSymlinkExists % vstrTargetFile;
+		if bDbg:
+			print strMsgSymlinkMk % (vstrTargetFile, strSrc, strTarget);
+		return (bOk, strErrMsg);
+		bOk, strErrMsg = make_symlink_other_platforms( strSrc,
+													   strTarget );		
 
-	if bDbg:
-		print strMsglldbsoMk % (os.path.abspath(strSrc), os.path.abspath(strTarget));
-		
-	try:
-		csl = ctypes.windll.kernel32.CreateHardLinkW
-		csl.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_uint32)
-		csl.restype = ctypes.c_ubyte
-		if csl(strTarget, strSrc, 0) == 0:
-			raise ctypes.WinError()
-	except Exception as e:
-		bOk = False;
-		strMsg = "WinError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink);
-		strMsg += " Src:'%s' Target:'%s'" % (strSrc, strTarget);
+	return (bOk, strErrMsg);
 
-	return (bOk, strMsg);
-	
 #++---------------------------------------------------------------------------
-# Details:	Make the symbolic link that the script bridge for Python will need in 
-# 			the Python framework directory. Code for all platforms apart from
-#			Windows.
+# Details:	Make the symbolic that the script bridge for Python will need in 
+# 			the Python framework directory.
 # Args:		vDictArgs				- (R) Program input parameters.
 #			vstrFrameworkPythonDir	- (R) Python framework directory.
-#			vstrSoName				- (R) File name for _lldb.so.
+#			vstrLiblldbName			- (R) File name for _lldb library.
 # Returns:	Bool - True = function success, False = failure.
 #			Str - Error description on task failure.
 # Throws:	None.
 #--
-def make_symlink_other_platforms( vDictArgs, vstrFrameworkPythonDir, vstrSoPath ):
-	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_other_platforms()" );
+def make_symlink_liblldb( vDictArgs, vstrFrameworkPythonDir, vstrLiblldbFileName ):
+	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_liblldb()" );
 	bOk = True;
-	strMsg = "";
-	bDbg = vDictArgs.has_key( "-d" );
-	strTarget = vstrSoPath + ".so";
-	strSoPath = "%s/%s" % (vstrFrameworkPythonDir, strTarget);
-	strTarget = os.path.normcase( strSoPath );
+	strErrMsg = "";
+	strTarget = vstrLiblldbFileName
 	strSrc = "";
-			
-	os.chdir( vstrFrameworkPythonDir );
+
+	eOSType = utilsOsType.determine_os_type();
+	if eOSType == utilsOsType.EnumOsType.Windows:
+		# When importing an extension module using a debug version of python, you
+		# write, for example, "import foo", but the interpreter searches for
+		# "foo_d.pyd"
+		if vDictArgs["--buildConfig"].lower() == "debug":
+			strTarget += "_d";
+		strTarget += ".pyd";
+	else:
+		strTarget += ".so";
+
 	bMakeFileCalled = vDictArgs.has_key( "-m" );
 	if not bMakeFileCalled:
-		strSrc = os.path.normcase( "../../../LLDB" );
+		strSrc = "lib/LLDB";
 	else:
 		strLibFileExtn = "";
-		eOSType = utilsOsType.determine_os_type();
-		if eOSType == utilsOsType.EnumOsType.Linux:
-			strLibFileExtn = ".so";
-		elif eOSType == utilsOsType.EnumOsType.Darwin:
-			strLibFileExtn = ".dylib";
-		strSrc = os.path.normcase( "../../../liblldb%s" % strLibFileExtn );
+		if eOSType == utilsOsType.EnumOsType.Windows:
+			strLibFileExtn = ".dll";
+			strSrc = "bin/liblldb%s" % strLibFileExtn;
+		else:
+			if eOSType == utilsOsType.EnumOsType.Linux:
+			    strLibFileExtn = ".so";
+			elif eOSType == utilsOsType.EnumOsType.Darwin:
+			    strLibFileExtn = ".dylib";
+			strSrc = "lib/liblldb%s" % strLibFileExtn;
+
+	bOk, strErrMsg = make_symlink( vDictArgs, vstrFrameworkPythonDir, strSrc, strTarget );
+
+	return (bOk, strErrMsg);
 
-	if os.path.islink( strTarget ):
-		if bDbg:
-			print strMsglldbsoExists % strTarget;
-		return (bOk, strMsg);
-	
-	if bDbg:
-		print strMsglldbsoMk;
-		
-	try:
-		os.symlink( strSrc, strTarget );
-	except OSError as e:
-		bOk = False;
-		strMsg = "OSError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink);
-		strMsg += " Src:'%s' Target:'%s'" % (strSrc, strTarget);
-	except:
-		bOk = False;
-		strMsg = strErrMsgUnexpected % sys.exec_info()[ 0 ];
-	
-	return (bOk, strMsg);
-	
 #++---------------------------------------------------------------------------
-# Details:	Make the symbolic link to the darwin-debug. Code for all platforms
-#           apart from Windows.
+# Details:	Make the symbolic link to the darwin-debug.
 # Args:		vDictArgs				- (R) Program input parameters.
 #			vstrFrameworkPythonDir	- (R) Python framework directory.
 #			vstrDarwinDebugFileName	- (R) File name for darwin-debug.
 # Returns:	Bool - True = function success, False = failure.
 #			Str - Error description on task failure.
 # Throws:	None.
 #--
 def make_symlink_darwin_debug( vDictArgs, vstrFrameworkPythonDir, vstrDarwinDebugFileName ):
-	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_other_platforms()" );
+	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_darwin_debug()" );
 	bOk = True;
-	strMsg = "";
-	bDbg = vDictArgs.has_key( "-d" );
-	strTarget = vstrDarwinDebugFileName
-	strDarwinDebugPath = "%s/%s" % (vstrFrameworkPythonDir, strTarget);
-	strTarget = os.path.normcase( strDarwinDebugPath );
+	strErrMsg = "";
+	strTarget = vstrDarwinDebugFileName;
 	strSrc = "";
 			
-	os.chdir( vstrFrameworkPythonDir );
 	bMakeFileCalled = vDictArgs.has_key( "-m" );
 	if not bMakeFileCalled:
-	    return (bOk, strMsg);
+	    return (bOk, strErrMsg);
 	else:
-		strSrc = os.path.normcase( "../../../../bin/lldb-launcher" );
+		strSrc = "bin/lldb-launcher";
 
-	if os.path.islink( strTarget ):
-		if bDbg:
-			print strMsglldbsoExists % strTarget;
-		return (bOk, strMsg);
-	
-	if bDbg:
-		print strMsglldbsoMk;
-		
-	try:
-		os.symlink( strSrc, strTarget );
-	except OSError as e:
-		bOk = False;
-		strMsg = "OSError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink);
-		strMsg += " Src:'%s' Target:'%s'" % (strSrc, strTarget);
-	except:
-		bOk = False;
-		strMsg = strErrMsgUnexpected % sys.exec_info()[ 0 ];
-	
-	return (bOk, strMsg);
+	bOk, strErrMsg = make_symlink( strSrc, strTarget );
+
+	return (bOk, strErrMsg);
+
+#++---------------------------------------------------------------------------
+# Details:	Make the symbolic link to the argdumper.
+# Args:		vDictArgs				- (R) Program input parameters.
+#			vstrFrameworkPythonDir	- (R) Python framework directory.
+#			vstrArgdumperFileName	- (R) File name for argdumper.
+# Returns:	Bool - True = function success, False = failure.
+#			Str - Error description on task failure.
+# Throws:	None.
+#--
+def make_symlink_argdumper( vDictArgs, vstrFrameworkPythonDir, vstrArgdumperFileName ):
+	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_argdumper()" );
+	bOk = True;
+	strErrMsg = "";
+	strTarget = vstrArgdumperFileName;
+	strSrc = "";
+			
+	bMakeFileCalled = vDictArgs.has_key( "-m" );
+	if not bMakeFileCalled:
+	    return (bOk, strErrMsg);
+	else:
+		eOSType = utilsOsType.determine_os_type();
+		strSrc = "bin/argdumper";
+		if eOSType == utilsOsType.EnumOsType.Windows:
+			strSrc += ".exe"
+			strTarget += ".exe";
+
+	bOk, strErrMsg = make_symlink( vDictArgs, vstrFrameworkPythonDir, strSrc, strTarget );
+
+	return (bOk, strErrMsg);
 
 #++---------------------------------------------------------------------------
 # Details:	Make the symlink that the script bridge for Python will need in 
@@ -385,34 +434,34 @@
 #			strErrMsg - Error description on task failure.
 # Throws:	None.
 #--
-def make_symlink( vDictArgs, vstrFrameworkPythonDir ):
-	dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink()" );
+def create_symlinks( vDictArgs, vstrFrameworkPythonDir ):
+	dbg = utilsDebug.CDebugFnVerbose( "Python script create_symlinks()" );
 	bOk = True;
 	strWkDir = "";
 	strErrMsg = "";
 	eOSType = utilsOsType.determine_os_type();
 
-    # Make symlink for _lldb
+	# Make symlink for _lldb
 	strSoFileName = "_lldb";
-	if eOSType == utilsOsType.EnumOsType.Unknown:
-		bOk = False;
-		strErrMsg = strErrMsgOsTypeUnknown;
-	elif eOSType == utilsOsType.EnumOsType.Windows:
-		bOk, strErrMsg = make_symlink_windows( vDictArgs, 
+	if bOk:
+		bOk, strErrMsg = make_symlink_liblldb( vDictArgs,
 											   vstrFrameworkPythonDir,
 											   strSoFileName );
-	else:
-		bOk, strErrMsg = make_symlink_other_platforms( vDictArgs, 
-													   vstrFrameworkPythonDir,
-													   strSoFileName );		
 
-    # Make symlink for darwin-debug
+	# Make symlink for darwin-debug on Darwin
 	strDarwinDebugFileName = "darwin-debug"
 	if bOk and eOSType == utilsOsType.EnumOsType.Darwin:
 		bOk, strErrMsg = make_symlink_darwin_debug( vDictArgs,
 												    vstrFrameworkPythonDir,
 												    strDarwinDebugFileName );
 
+	# Make symlink for argdumper
+	strArgdumperFileName = "argdumper"
+	if bOk:
+		bOk, strErrMsg = make_symlink_argdumper( vDictArgs,
+												 vstrFrameworkPythonDir,
+												 strArgdumperFileName );
+
 	return (bOk, strErrMsg);
 
 #++---------------------------------------------------------------------------
@@ -631,7 +680,7 @@
 		bOk, strMsg = find_or_create_python_dir( vDictArgs, strFrameworkPythonDir );
 	
 	if bOk:
-		bOk, strMsg = make_symlink( vDictArgs, strFrameworkPythonDir );
+		bOk, strMsg = create_symlinks( vDictArgs, strFrameworkPythonDir );
 	
 	if bOk:
 		bOk, strMsg = copy_lldbpy_file_to_lldb_pkg_dir( vDictArgs,
Index: test/functionalities/launch_with_glob/TestLaunchWithGlob.py
===================================================================
--- test/functionalities/launch_with_glob/TestLaunchWithGlob.py
+++ test/functionalities/launch_with_glob/TestLaunchWithGlob.py
@@ -21,7 +21,6 @@
         self.do_test ()
 
 
-    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
     @dwarf_test
     def test_with_dwarf (self):
         self.buildDwarf()
Index: tools/CMakeLists.txt
===================================================================
--- tools/CMakeLists.txt
+++ tools/CMakeLists.txt
@@ -2,6 +2,7 @@
   add_subdirectory(darwin-debug)
   add_subdirectory(debugserver)
 endif()
+  add_subdirectory(argdumper)
   add_subdirectory(driver)
 if (NOT __ANDROID_NDK__)
   add_subdirectory(lldb-mi)
Index: tools/argdumper/CMakeLists.txt
===================================================================
--- /dev/null
+++ tools/argdumper/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_lldb_executable(argdumper
+  argdumper.cpp
+  )
+
+target_link_libraries(argdumper liblldb)
+
+install(TARGETS argdumper
+  RUNTIME DESTINATION bin)
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to