瀏覽代碼

pystub should be a static library for better portability, especially for dynamic loaders that aren't so awesome.

David Rose 13 年之前
父節點
當前提交
97f805b24a

+ 6 - 0
dtool/src/dtoolbase/dtoolsymbols.h

@@ -109,4 +109,10 @@
 
 #endif  /* WIN32_VC */
 
+/* These two are always defined empty, because pystub is statically
+   built.  But we leave the symbol around in case we change our minds
+   to make pystub once again be a dynamic library. */
+#define EXPCL_PYSTUB
+#define EXPTP_PYSTUB
+
 #endif

+ 1 - 0
dtool/src/interrogate/interrogate.cxx

@@ -20,6 +20,7 @@
 #include "pnotify.h"
 #include "panda_getopt_long.h"
 #include "preprocess_argv.h"
+#include "pystub.h"
 #include <time.h>
 
 CPPParser parser;

+ 3 - 3
dtool/src/pystub/Sources.pp

@@ -1,7 +1,7 @@
-#define BUILDING_DLL BUILDING_DTOOLCONFIG
+//#define BUILDING_DLL BUILDING_PYSTUB
 #define LOCAL_LIBS p3dtoolbase
 
-#begin lib_target
+#begin static_lib_target
   #define TARGET p3pystub
   
   #define SOURCES \
@@ -10,4 +10,4 @@
   #define INSTALL_HEADERS \
     pystub.h
 
-#end lib_target
+#end static_lib_target

+ 135 - 135
dtool/src/pystub/pystub.cxx

@@ -15,143 +15,143 @@
 #include "pystub.h"
 
 extern "C" {
-  EXPCL_DTOOLCONFIG int PyArg_Parse(...);
-  EXPCL_DTOOLCONFIG int PyArg_ParseTuple(...);
-  EXPCL_DTOOLCONFIG int PyArg_ParseTupleAndKeywords(...);
-  EXPCL_DTOOLCONFIG int PyBool_FromLong(...);
-  EXPCL_DTOOLCONFIG int PyCFunction_New(...);
-  EXPCL_DTOOLCONFIG int PyCFunction_NewEx(...);
-  EXPCL_DTOOLCONFIG int PyCallable_Check(...);
-  EXPCL_DTOOLCONFIG int PyDict_DelItemString(...);
-  EXPCL_DTOOLCONFIG int PyDict_GetItem(...);
-  EXPCL_DTOOLCONFIG int PyDict_GetItemString(...);
-  EXPCL_DTOOLCONFIG int PyDict_New(...);
-  EXPCL_DTOOLCONFIG int PyDict_SetItem(...);
-  EXPCL_DTOOLCONFIG int PyDict_SetItemString(...);
-  EXPCL_DTOOLCONFIG int PyDict_Size(...);
-  EXPCL_DTOOLCONFIG int PyDict_Type(...);
-  EXPCL_DTOOLCONFIG int PyErr_Clear(...);
-  EXPCL_DTOOLCONFIG int PyErr_ExceptionMatches(...);
-  EXPCL_DTOOLCONFIG int PyErr_Fetch(...);
-  EXPCL_DTOOLCONFIG int PyErr_Format(...);
-  EXPCL_DTOOLCONFIG int PyErr_Occurred(...);
-  EXPCL_DTOOLCONFIG int PyErr_Print(...);
-  EXPCL_DTOOLCONFIG int PyErr_Restore(...);
-  EXPCL_DTOOLCONFIG int PyErr_SetString(...);
-  EXPCL_DTOOLCONFIG int PyErr_Warn(...);
-  EXPCL_DTOOLCONFIG int PyErr_WarnEx(...);
-  EXPCL_DTOOLCONFIG int PyEval_CallFunction(...);
-  EXPCL_DTOOLCONFIG int PyEval_CallObjectWithKeywords(...);
-  EXPCL_DTOOLCONFIG int PyEval_InitThreads(...);
-  EXPCL_DTOOLCONFIG int PyEval_RestoreThread(...);
-  EXPCL_DTOOLCONFIG int PyEval_SaveThread(...);
-  EXPCL_DTOOLCONFIG int PyFloat_AsDouble(...);
-  EXPCL_DTOOLCONFIG int PyFloat_FromDouble(...);
-  EXPCL_DTOOLCONFIG int PyFloat_Type(...);
-  EXPCL_DTOOLCONFIG int PyGen_Check(...);
-  EXPCL_DTOOLCONFIG int PyGen_Type(...);
-  EXPCL_DTOOLCONFIG int PyGILState_Ensure(...);
-  EXPCL_DTOOLCONFIG int PyGILState_Release(...);
-  EXPCL_DTOOLCONFIG int PyImport_GetModuleDict(...);
-  EXPCL_DTOOLCONFIG int PyInt_AsLong(...);
-  EXPCL_DTOOLCONFIG int PyInt_AsSsize_t(...);
-  EXPCL_DTOOLCONFIG int PyInt_FromLong(...);
-  EXPCL_DTOOLCONFIG int PyInt_Type(...);
-  EXPCL_DTOOLCONFIG int PyList_Append(...);
-  EXPCL_DTOOLCONFIG int PyList_AsTuple(...);
-  EXPCL_DTOOLCONFIG int PyList_GetItem(...);
-  EXPCL_DTOOLCONFIG int PyList_New(...);
-  EXPCL_DTOOLCONFIG int PyList_SetItem(...);
-  EXPCL_DTOOLCONFIG int PyList_Type(...);
-  EXPCL_DTOOLCONFIG int PyLong_AsLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_AsLongLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_AsUnsignedLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_AsUnsignedLongLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_FromLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_FromLongLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_FromUnsignedLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_FromUnsignedLongLong(...);
-  EXPCL_DTOOLCONFIG int PyLong_Type(...);
-  EXPCL_DTOOLCONFIG int PyMapping_GetItemString(...);
-  EXPCL_DTOOLCONFIG int PyModule_AddIntConstant(...);
-  EXPCL_DTOOLCONFIG int PyModule_AddObject(...);
-  EXPCL_DTOOLCONFIG int PyModule_AddStringConstant(...);
-  EXPCL_DTOOLCONFIG int PyNumber_Float(...);
-  EXPCL_DTOOLCONFIG int PyNumber_Long(...);
-  EXPCL_DTOOLCONFIG int PyObject_Call(...);
-  EXPCL_DTOOLCONFIG int PyObject_CallFunction(...);
-  EXPCL_DTOOLCONFIG int PyObject_CallMethod(...);
-  EXPCL_DTOOLCONFIG int PyObject_CallMethodObjArgs(...);
-  EXPCL_DTOOLCONFIG int PyObject_CallObject(...);
-  EXPCL_DTOOLCONFIG int PyObject_Cmp(...);
-  EXPCL_DTOOLCONFIG int PyObject_Compare(...);
-  EXPCL_DTOOLCONFIG int PyObject_Free(...);
-  EXPCL_DTOOLCONFIG int PyObject_GenericGetAttr(...);
-  EXPCL_DTOOLCONFIG int PyObject_GenericSetAttr(...);
-  EXPCL_DTOOLCONFIG int PyObject_GetAttrString(...);
-  EXPCL_DTOOLCONFIG int PyObject_HasAttrString(...);
-  EXPCL_DTOOLCONFIG int PyObject_IsInstance(...);
-  EXPCL_DTOOLCONFIG int PyObject_IsTrue(...);
-  EXPCL_DTOOLCONFIG int PyObject_Repr(...);
-  EXPCL_DTOOLCONFIG int PyObject_SetAttrString(...);
-  EXPCL_DTOOLCONFIG int PyObject_Str(...);
-  EXPCL_DTOOLCONFIG int PyObject_Type(...);
-  EXPCL_DTOOLCONFIG int PySequence_Check(...);
-  EXPCL_DTOOLCONFIG int PySequence_Fast(...);
-  EXPCL_DTOOLCONFIG int PySequence_GetItem(...);
-  EXPCL_DTOOLCONFIG int PySequence_Size(...);
-  EXPCL_DTOOLCONFIG int PySequence_Tuple(...);
-  EXPCL_DTOOLCONFIG int PyString_AsString(...);
-  EXPCL_DTOOLCONFIG int PyString_AsStringAndSize(...);
-  EXPCL_DTOOLCONFIG int PyString_FromString(...);
-  EXPCL_DTOOLCONFIG int PyString_FromStringAndSize(...);
-  EXPCL_DTOOLCONFIG int PyString_Size(...);
-  EXPCL_DTOOLCONFIG int PyString_Type(...);
-  EXPCL_DTOOLCONFIG int PySys_GetObject(...);
-  EXPCL_DTOOLCONFIG int PyThreadState_Clear(...);
-  EXPCL_DTOOLCONFIG int PyThreadState_Delete(...);
-  EXPCL_DTOOLCONFIG int PyThreadState_Get(...);
-  EXPCL_DTOOLCONFIG int PyThreadState_New(...);
-  EXPCL_DTOOLCONFIG int PyThreadState_Swap(...);
-  EXPCL_DTOOLCONFIG int PyTuple_GetItem(...);
-  EXPCL_DTOOLCONFIG int PyTuple_New(...);
-  EXPCL_DTOOLCONFIG int PyTuple_Pack(...);
-  EXPCL_DTOOLCONFIG int PyTuple_Size(...);
-  EXPCL_DTOOLCONFIG int PyTuple_Type(...);
-  EXPCL_DTOOLCONFIG int PyType_GenericAlloc(...);
-  EXPCL_DTOOLCONFIG int PyType_IsSubtype(...);
-  EXPCL_DTOOLCONFIG int PyType_Ready(...);
-  EXPCL_DTOOLCONFIG int PyUnicodeUCS2_FromWideChar(...);
-  EXPCL_DTOOLCONFIG int PyUnicodeUCS2_AsWideChar(...);
-  EXPCL_DTOOLCONFIG int PyUnicodeUCS2_GetSize(...);
-  EXPCL_DTOOLCONFIG int PyUnicodeUCS4_FromWideChar(...);
-  EXPCL_DTOOLCONFIG int PyUnicodeUCS4_AsWideChar(...);
-  EXPCL_DTOOLCONFIG int PyUnicodeUCS4_GetSize(...);
-  EXPCL_DTOOLCONFIG int PyUnicode_Type(...);
-  EXPCL_DTOOLCONFIG int Py_BuildValue(...);
-  EXPCL_DTOOLCONFIG int Py_InitModule4(...);
-  EXPCL_DTOOLCONFIG int Py_InitModule4_64(...);
-  EXPCL_DTOOLCONFIG int Py_InitModule4TraceRefs(...);
-  EXPCL_DTOOLCONFIG int _PyObject_DebugFree(...);
-  EXPCL_DTOOLCONFIG int _PyObject_Del(...);
-  EXPCL_DTOOLCONFIG int _Py_Dealloc(...);
-  EXPCL_DTOOLCONFIG int _Py_NegativeRefcount(...);
-  EXPCL_DTOOLCONFIG int _Py_RefTotal(...);
+  EXPCL_PYSTUB int PyArg_Parse(...);
+  EXPCL_PYSTUB int PyArg_ParseTuple(...);
+  EXPCL_PYSTUB int PyArg_ParseTupleAndKeywords(...);
+  EXPCL_PYSTUB int PyBool_FromLong(...);
+  EXPCL_PYSTUB int PyCFunction_New(...);
+  EXPCL_PYSTUB int PyCFunction_NewEx(...);
+  EXPCL_PYSTUB int PyCallable_Check(...);
+  EXPCL_PYSTUB int PyDict_DelItemString(...);
+  EXPCL_PYSTUB int PyDict_GetItem(...);
+  EXPCL_PYSTUB int PyDict_GetItemString(...);
+  EXPCL_PYSTUB int PyDict_New(...);
+  EXPCL_PYSTUB int PyDict_SetItem(...);
+  EXPCL_PYSTUB int PyDict_SetItemString(...);
+  EXPCL_PYSTUB int PyDict_Size(...);
+  EXPCL_PYSTUB int PyDict_Type(...);
+  EXPCL_PYSTUB int PyErr_Clear(...);
+  EXPCL_PYSTUB int PyErr_ExceptionMatches(...);
+  EXPCL_PYSTUB int PyErr_Fetch(...);
+  EXPCL_PYSTUB int PyErr_Format(...);
+  EXPCL_PYSTUB int PyErr_Occurred(...);
+  EXPCL_PYSTUB int PyErr_Print(...);
+  EXPCL_PYSTUB int PyErr_Restore(...);
+  EXPCL_PYSTUB int PyErr_SetString(...);
+  EXPCL_PYSTUB int PyErr_Warn(...);
+  EXPCL_PYSTUB int PyErr_WarnEx(...);
+  EXPCL_PYSTUB int PyEval_CallFunction(...);
+  EXPCL_PYSTUB int PyEval_CallObjectWithKeywords(...);
+  EXPCL_PYSTUB int PyEval_InitThreads(...);
+  EXPCL_PYSTUB int PyEval_RestoreThread(...);
+  EXPCL_PYSTUB int PyEval_SaveThread(...);
+  EXPCL_PYSTUB int PyFloat_AsDouble(...);
+  EXPCL_PYSTUB int PyFloat_FromDouble(...);
+  EXPCL_PYSTUB int PyFloat_Type(...);
+  EXPCL_PYSTUB int PyGen_Check(...);
+  EXPCL_PYSTUB int PyGen_Type(...);
+  EXPCL_PYSTUB int PyGILState_Ensure(...);
+  EXPCL_PYSTUB int PyGILState_Release(...);
+  EXPCL_PYSTUB int PyImport_GetModuleDict(...);
+  EXPCL_PYSTUB int PyInt_AsLong(...);
+  EXPCL_PYSTUB int PyInt_AsSsize_t(...);
+  EXPCL_PYSTUB int PyInt_FromLong(...);
+  EXPCL_PYSTUB int PyInt_Type(...);
+  EXPCL_PYSTUB int PyList_Append(...);
+  EXPCL_PYSTUB int PyList_AsTuple(...);
+  EXPCL_PYSTUB int PyList_GetItem(...);
+  EXPCL_PYSTUB int PyList_New(...);
+  EXPCL_PYSTUB int PyList_SetItem(...);
+  EXPCL_PYSTUB int PyList_Type(...);
+  EXPCL_PYSTUB int PyLong_AsLong(...);
+  EXPCL_PYSTUB int PyLong_AsLongLong(...);
+  EXPCL_PYSTUB int PyLong_AsUnsignedLong(...);
+  EXPCL_PYSTUB int PyLong_AsUnsignedLongLong(...);
+  EXPCL_PYSTUB int PyLong_FromLong(...);
+  EXPCL_PYSTUB int PyLong_FromLongLong(...);
+  EXPCL_PYSTUB int PyLong_FromUnsignedLong(...);
+  EXPCL_PYSTUB int PyLong_FromUnsignedLongLong(...);
+  EXPCL_PYSTUB int PyLong_Type(...);
+  EXPCL_PYSTUB int PyMapping_GetItemString(...);
+  EXPCL_PYSTUB int PyModule_AddIntConstant(...);
+  EXPCL_PYSTUB int PyModule_AddObject(...);
+  EXPCL_PYSTUB int PyModule_AddStringConstant(...);
+  EXPCL_PYSTUB int PyNumber_Float(...);
+  EXPCL_PYSTUB int PyNumber_Long(...);
+  EXPCL_PYSTUB int PyObject_Call(...);
+  EXPCL_PYSTUB int PyObject_CallFunction(...);
+  EXPCL_PYSTUB int PyObject_CallMethod(...);
+  EXPCL_PYSTUB int PyObject_CallMethodObjArgs(...);
+  EXPCL_PYSTUB int PyObject_CallObject(...);
+  EXPCL_PYSTUB int PyObject_Cmp(...);
+  EXPCL_PYSTUB int PyObject_Compare(...);
+  EXPCL_PYSTUB int PyObject_Free(...);
+  EXPCL_PYSTUB int PyObject_GenericGetAttr(...);
+  EXPCL_PYSTUB int PyObject_GenericSetAttr(...);
+  EXPCL_PYSTUB int PyObject_GetAttrString(...);
+  EXPCL_PYSTUB int PyObject_HasAttrString(...);
+  EXPCL_PYSTUB int PyObject_IsInstance(...);
+  EXPCL_PYSTUB int PyObject_IsTrue(...);
+  EXPCL_PYSTUB int PyObject_Repr(...);
+  EXPCL_PYSTUB int PyObject_SetAttrString(...);
+  EXPCL_PYSTUB int PyObject_Str(...);
+  EXPCL_PYSTUB int PyObject_Type(...);
+  EXPCL_PYSTUB int PySequence_Check(...);
+  EXPCL_PYSTUB int PySequence_Fast(...);
+  EXPCL_PYSTUB int PySequence_GetItem(...);
+  EXPCL_PYSTUB int PySequence_Size(...);
+  EXPCL_PYSTUB int PySequence_Tuple(...);
+  EXPCL_PYSTUB int PyString_AsString(...);
+  EXPCL_PYSTUB int PyString_AsStringAndSize(...);
+  EXPCL_PYSTUB int PyString_FromString(...);
+  EXPCL_PYSTUB int PyString_FromStringAndSize(...);
+  EXPCL_PYSTUB int PyString_Size(...);
+  EXPCL_PYSTUB int PyString_Type(...);
+  EXPCL_PYSTUB int PySys_GetObject(...);
+  EXPCL_PYSTUB int PyThreadState_Clear(...);
+  EXPCL_PYSTUB int PyThreadState_Delete(...);
+  EXPCL_PYSTUB int PyThreadState_Get(...);
+  EXPCL_PYSTUB int PyThreadState_New(...);
+  EXPCL_PYSTUB int PyThreadState_Swap(...);
+  EXPCL_PYSTUB int PyTuple_GetItem(...);
+  EXPCL_PYSTUB int PyTuple_New(...);
+  EXPCL_PYSTUB int PyTuple_Pack(...);
+  EXPCL_PYSTUB int PyTuple_Size(...);
+  EXPCL_PYSTUB int PyTuple_Type(...);
+  EXPCL_PYSTUB int PyType_GenericAlloc(...);
+  EXPCL_PYSTUB int PyType_IsSubtype(...);
+  EXPCL_PYSTUB int PyType_Ready(...);
+  EXPCL_PYSTUB int PyUnicodeUCS2_FromWideChar(...);
+  EXPCL_PYSTUB int PyUnicodeUCS2_AsWideChar(...);
+  EXPCL_PYSTUB int PyUnicodeUCS2_GetSize(...);
+  EXPCL_PYSTUB int PyUnicodeUCS4_FromWideChar(...);
+  EXPCL_PYSTUB int PyUnicodeUCS4_AsWideChar(...);
+  EXPCL_PYSTUB int PyUnicodeUCS4_GetSize(...);
+  EXPCL_PYSTUB int PyUnicode_Type(...);
+  EXPCL_PYSTUB int Py_BuildValue(...);
+  EXPCL_PYSTUB int Py_InitModule4(...);
+  EXPCL_PYSTUB int Py_InitModule4_64(...);
+  EXPCL_PYSTUB int Py_InitModule4TraceRefs(...);
+  EXPCL_PYSTUB int _PyObject_DebugFree(...);
+  EXPCL_PYSTUB int _PyObject_Del(...);
+  EXPCL_PYSTUB int _Py_Dealloc(...);
+  EXPCL_PYSTUB int _Py_NegativeRefcount(...);
+  EXPCL_PYSTUB int _Py_RefTotal(...);
 
-  EXPCL_DTOOLCONFIG int Py_IsInitialized();
+  EXPCL_PYSTUB int Py_IsInitialized();
 
-  EXPCL_DTOOLCONFIG extern void *PyExc_AssertionError;
-  EXPCL_DTOOLCONFIG extern void *PyExc_AttributeError;
-  EXPCL_DTOOLCONFIG extern void *PyExc_FutureWarning;
-  EXPCL_DTOOLCONFIG extern void *PyExc_IndexError;
-  EXPCL_DTOOLCONFIG extern void *PyExc_RuntimeError;
-  EXPCL_DTOOLCONFIG extern void *PyExc_StandardError;
-  EXPCL_DTOOLCONFIG extern void *PyExc_StopIteration;
-  EXPCL_DTOOLCONFIG extern void *PyExc_SystemExit;
-  EXPCL_DTOOLCONFIG extern void *PyExc_TypeError;
-  EXPCL_DTOOLCONFIG extern void *PyExc_ValueError;
-  EXPCL_DTOOLCONFIG extern void *_Py_NoneStruct;
-  EXPCL_DTOOLCONFIG extern void *_Py_NotImplementedStruct;
+  EXPCL_PYSTUB extern void *PyExc_AssertionError;
+  EXPCL_PYSTUB extern void *PyExc_AttributeError;
+  EXPCL_PYSTUB extern void *PyExc_FutureWarning;
+  EXPCL_PYSTUB extern void *PyExc_IndexError;
+  EXPCL_PYSTUB extern void *PyExc_RuntimeError;
+  EXPCL_PYSTUB extern void *PyExc_StandardError;
+  EXPCL_PYSTUB extern void *PyExc_StopIteration;
+  EXPCL_PYSTUB extern void *PyExc_SystemExit;
+  EXPCL_PYSTUB extern void *PyExc_TypeError;
+  EXPCL_PYSTUB extern void *PyExc_ValueError;
+  EXPCL_PYSTUB extern void *_Py_NoneStruct;
+  EXPCL_PYSTUB extern void *_Py_NotImplementedStruct;
 };
 
 

+ 1 - 1
dtool/src/pystub/pystub.h

@@ -35,7 +35,7 @@
 // force the .so to be linked in--some OS'es try to be smart about not
 // pulling in shared libraries whose symbols aren't referenced
 // anywhere.
-EXPCL_DTOOLCONFIG void pystub();
+EXPCL_PYSTUB void pystub();
 
 
 #endif

+ 22 - 22
makepanda/makepanda.py

@@ -2461,9 +2461,9 @@ COMMON_EGG2X_LIBS=[
     'libpandaegg.dll',
 ] + COMMON_PANDA_LIBS
 
-COMMON_DTOOL_LIBS_PYSTUB = COMMON_DTOOL_LIBS + ['libp3pystub.dll']
-COMMON_PANDA_LIBS_PYSTUB = COMMON_PANDA_LIBS + ['libp3pystub.dll']
-COMMON_EGG2X_LIBS_PYSTUB = COMMON_EGG2X_LIBS + ['libp3pystub.dll']
+COMMON_DTOOL_LIBS_PYSTUB = COMMON_DTOOL_LIBS + ['libp3pystub.lib']
+COMMON_PANDA_LIBS_PYSTUB = COMMON_PANDA_LIBS + ['libp3pystub.lib']
+COMMON_EGG2X_LIBS_PYSTUB = COMMON_EGG2X_LIBS + ['libp3pystub.lib']
 
 ########################################################################
 #
@@ -2584,11 +2584,11 @@ TargetAdd('libp3dtoolconfig.dll', opts=['ADVAPI',  'OPENSSL'])
 # DIRECTORY: dtool/src/pystub/
 #
 
-OPTS=['DIR:dtool/src/pystub', 'BUILDING:DTOOLCONFIG']
+OPTS=['DIR:dtool/src/pystub']
 TargetAdd('p3pystub_pystub.obj', opts=OPTS, input='pystub.cxx')
-TargetAdd('libp3pystub.dll', input='p3pystub_pystub.obj')
-TargetAdd('libp3pystub.dll', input='libp3dtool.dll')
-TargetAdd('libp3pystub.dll', opts=['ADVAPI'])
+TargetAdd('libp3pystub.lib', input='p3pystub_pystub.obj')
+#TargetAdd('libp3pystub.lib', input='libp3dtool.dll')
+TargetAdd('libp3pystub.lib', opts=['ADVAPI'])
 
 #
 # DIRECTORY: dtool/src/interrogate/
@@ -4317,7 +4317,7 @@ if (RUNTIME):
   TargetAdd('panda3d.exe', input='libpandaexpress.dll')
   TargetAdd('panda3d.exe', input='libp3dtoolconfig.dll')
   TargetAdd('panda3d.exe', input='libp3dtool.dll')
-  TargetAdd('panda3d.exe', input='libp3pystub.dll')
+  TargetAdd('panda3d.exe', input='libp3pystub.lib')
   TargetAdd('panda3d.exe', input='libp3tinyxml.ilb')
   TargetAdd('panda3d.exe', opts=['NOICON', 'OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER', 'WINSHELL', 'ADVAPI', 'WINSOCK2', 'WINOLE', 'CARBON'])
 
@@ -4331,7 +4331,7 @@ if (RUNTIME):
     TargetAdd('Panda3D.app', input='libpandaexpress.dll')
     TargetAdd('Panda3D.app', input='libp3dtoolconfig.dll')
     TargetAdd('Panda3D.app', input='libp3dtool.dll')
-    TargetAdd('Panda3D.app', input='libp3pystub.dll')
+    TargetAdd('Panda3D.app', input='libp3pystub.lib')
     TargetAdd('Panda3D.app', input='libp3tinyxml.ilb')
     TargetAdd('Panda3D.app', input='panda3d_mac.plist', ipath=OPTS)
     TargetAdd('Panda3D.app', input='models/plugin_images/panda3d.icns')
@@ -4346,7 +4346,7 @@ if (RUNTIME):
     TargetAdd('panda3dw.exe', input='libpandaexpress.dll')
     TargetAdd('panda3dw.exe', input='libp3dtoolconfig.dll')
     TargetAdd('panda3dw.exe', input='libp3dtool.dll')
-    TargetAdd('panda3dw.exe', input='libp3pystub.dll')
+    TargetAdd('panda3dw.exe', input='libp3pystub.lib')
     TargetAdd('panda3dw.exe', input='libp3tinyxml.ilb')
     TargetAdd('panda3dw.exe', opts=['OPENSSL', 'ZLIB', 'WINGDI', 'WINUSER', 'WINSHELL', 'ADVAPI', 'WINSOCK2', 'WINOLE', 'CARBON'])
 
@@ -4803,7 +4803,7 @@ if (PkgSkip("PANDATOOL")==0):
   TargetAdd('image-info.exe', input='libp3pandatoolbase.lib')
   TargetAdd('image-info.exe', input='libpandaegg.dll')
   TargetAdd('image-info.exe', input=COMMON_PANDA_LIBS)
-  TargetAdd('image-info.exe', input='libp3pystub.dll')
+  TargetAdd('image-info.exe', input='libp3pystub.lib')
   TargetAdd('image-info.exe', opts=['ADVAPI'])
 
   TargetAdd('image-resize_imageResize.obj', opts=OPTS, input='imageResize.cxx')
@@ -4813,7 +4813,7 @@ if (PkgSkip("PANDATOOL")==0):
   TargetAdd('image-resize.exe', input='libp3pandatoolbase.lib')
   TargetAdd('image-resize.exe', input='libpandaegg.dll')
   TargetAdd('image-resize.exe', input=COMMON_PANDA_LIBS)
-  TargetAdd('image-resize.exe', input='libp3pystub.dll')
+  TargetAdd('image-resize.exe', input='libp3pystub.lib')
   TargetAdd('image-resize.exe', opts=['ADVAPI'])
 
   TargetAdd('image-trans_imageTrans.obj', opts=OPTS, input='imageTrans.cxx')
@@ -4823,7 +4823,7 @@ if (PkgSkip("PANDATOOL")==0):
   TargetAdd('image-trans.exe', input='libp3pandatoolbase.lib')
   TargetAdd('image-trans.exe', input='libpandaegg.dll')
   TargetAdd('image-trans.exe', input=COMMON_PANDA_LIBS)
-  TargetAdd('image-trans.exe', input='libp3pystub.dll')
+  TargetAdd('image-trans.exe', input='libp3pystub.lib')
   TargetAdd('image-trans.exe', opts=['ADVAPI'])
 
 #
@@ -4837,7 +4837,7 @@ if (PkgSkip("PANDATOOL")==0):
   TargetAdd('pfm-trans.exe', input='libp3progbase.lib')
   TargetAdd('pfm-trans.exe', input='libp3pandatoolbase.lib')
   TargetAdd('pfm-trans.exe', input=COMMON_PANDA_LIBS)
-  TargetAdd('pfm-trans.exe', input='libp3pystub.dll')
+  TargetAdd('pfm-trans.exe', input='libp3pystub.lib')
   TargetAdd('pfm-trans.exe', opts=['ADVAPI'])
 
 #
@@ -4871,7 +4871,7 @@ if (PkgSkip("PANDATOOL")==0):
   TargetAdd('lwo-scan.exe', input='libp3pandatoolbase.lib')
   TargetAdd('lwo-scan.exe', input='libpandaegg.dll')
   TargetAdd('lwo-scan.exe', input=COMMON_PANDA_LIBS)
-  TargetAdd('lwo-scan.exe', input='libp3pystub.dll')
+  TargetAdd('lwo-scan.exe', input='libp3pystub.lib')
   TargetAdd('lwo-scan.exe', opts=['ADVAPI'])
 
   TargetAdd('lwo2egg_lwoToEgg.obj', opts=OPTS, input='lwoToEgg.cxx')
@@ -5041,7 +5041,7 @@ if (PkgSkip("PANDATOOL")==0):
     TargetAdd('bin2c.exe', input='libp3progbase.lib')
     TargetAdd('bin2c.exe', input='libp3pandatoolbase.lib')
     TargetAdd('bin2c.exe', input=COMMON_PANDA_LIBS)
-    TargetAdd('bin2c.exe', input='libp3pystub.dll')
+    TargetAdd('bin2c.exe', input='libp3pystub.lib')
     TargetAdd('bin2c.exe', opts=['ADVAPI'])
 
 #
@@ -5067,7 +5067,7 @@ if (PkgSkip("PANDATOOL")==0):
     TargetAdd('softcvs.exe', input='libp3pandatoolbase.lib')
     TargetAdd('softcvs.exe', input='libpandaegg.dll')
     TargetAdd('softcvs.exe', input=COMMON_PANDA_LIBS)
-    TargetAdd('softcvs.exe', input='libp3pystub.dll')
+    TargetAdd('softcvs.exe', input='libp3pystub.lib')
     TargetAdd('softcvs.exe', opts=['ADVAPI'])
 
 #
@@ -5085,7 +5085,7 @@ if (PkgSkip("PANDATOOL")==0):
     TargetAdd('text-stats.exe', input='libp3pandatoolbase.lib')
     TargetAdd('text-stats.exe', input='libpandaegg.dll')
     TargetAdd('text-stats.exe', input=COMMON_PANDA_LIBS)
-    TargetAdd('text-stats.exe', input='libp3pystub.dll')
+    TargetAdd('text-stats.exe', input='libp3pystub.lib')
     TargetAdd('text-stats.exe', opts=['ADVAPI'])
 
 #
@@ -5100,7 +5100,7 @@ if (PkgSkip("PANDATOOL")==0):
     TargetAdd('vrml-trans.exe', input='libp3progbase.lib')
     TargetAdd('vrml-trans.exe', input='libp3pandatoolbase.lib')
     TargetAdd('vrml-trans.exe', input=COMMON_PANDA_LIBS)
-    TargetAdd('vrml-trans.exe', input='libp3pystub.dll')
+    TargetAdd('vrml-trans.exe', input='libp3pystub.lib')
     TargetAdd('vrml-trans.exe', opts=['ADVAPI'])
 
     TargetAdd('vrml2egg_vrmlToEgg.obj', opts=OPTS, input='vrmlToEgg.cxx')
@@ -5127,7 +5127,7 @@ if (PkgSkip("PANDATOOL")==0 and (sys.platform.startswith("win") or PkgSkip("GTK2
     TargetAdd('pstats.exe', input='libp3progbase.lib')
     TargetAdd('pstats.exe', input='libp3pandatoolbase.lib')
     TargetAdd('pstats.exe', input=COMMON_PANDA_LIBS)
-    TargetAdd('pstats.exe', input='libp3pystub.dll')
+    TargetAdd('pstats.exe', input='libp3pystub.lib')
     TargetAdd('pstats.exe', opts=['WINSOCK', 'WINIMM', 'WINGDI', 'WINKERNEL', 'WINOLDNAMES', 'WINUSER', 'WINMM', 'GTK2'])
 
 #
@@ -5149,7 +5149,7 @@ if (PkgSkip("PANDATOOL")==0):
     TargetAdd('x-trans.exe', input='libp3xfile.lib')
     TargetAdd('x-trans.exe', input='libp3pandatoolbase.lib')
     TargetAdd('x-trans.exe', input=COMMON_PANDA_LIBS)
-    TargetAdd('x-trans.exe', input='libp3pystub.dll')
+    TargetAdd('x-trans.exe', input='libp3pystub.lib')
     TargetAdd('x-trans.exe', opts=['ADVAPI'])
 
     TargetAdd('x2egg_xFileToEgg.obj', opts=OPTS, input='xFileToEgg.cxx')
@@ -5173,7 +5173,7 @@ for VER in MAYAVERSIONS:
     TargetAdd('mayaeggimport'+VNUM+'.mll', input='libpandaegg.dll')
     TargetAdd('mayaeggimport'+VNUM+'.mll', input=COMMON_PANDA_LIBS)
     if sys.platform.startswith("win32"):
-      TargetAdd('mayaeggimport'+VNUM+'.mll', input='libp3pystub.dll')
+      TargetAdd('mayaeggimport'+VNUM+'.mll', input='libp3pystub.lib')
     TargetAdd('mayaeggimport'+VNUM+'.mll', opts=['ADVAPI', VER])
 
     TargetAdd('mayaloader'+VNUM+'_config_mayaloader.obj', opts=OPTS, input='config_mayaloader.cxx')