mirror of https://github.com/python/cpython
Got rid of the python.rsrc resource file. The error message strings and
dialogs are now stored in Mac/Lib, and loaded on demand through macresource. Not only does this simplify a MacPython based on Apple's Python, but it also makes Mac error codes come out symbolically when running command line python (if you have Mac/Lib in your path). The resource files are copied from Mac/Resources. The old ones will disappear after the OS9 build procedure has been adjusted.
This commit is contained in:
parent
430b1563dd
commit
dde800ec4e
|
@ -27,6 +27,15 @@ import MacOS
|
|||
import string
|
||||
from Carbon.ControlAccessor import * # Also import Controls constants
|
||||
import macfs
|
||||
import macresource
|
||||
|
||||
_initialized = 0
|
||||
|
||||
def _initialize():
|
||||
global _initialized
|
||||
if _initialized: return
|
||||
macresource.need("DLOG", 260, "dialogs.rsrc", __name__)
|
||||
|
||||
|
||||
def cr2lf(text):
|
||||
if '\r' in text:
|
||||
|
@ -47,7 +56,7 @@ def Message(msg, id=260, ok=None):
|
|||
|
||||
The MESSAGE string can be at most 255 characters long.
|
||||
"""
|
||||
|
||||
_initialize()
|
||||
d = GetNewDialog(id, -1)
|
||||
if not d:
|
||||
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
|
||||
|
@ -79,6 +88,7 @@ def AskString(prompt, default = "", id=261, ok=None, cancel=None):
|
|||
can be at most 255 characters long.
|
||||
"""
|
||||
|
||||
_initialize()
|
||||
d = GetNewDialog(id, -1)
|
||||
if not d:
|
||||
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
|
||||
|
@ -119,6 +129,7 @@ def AskPassword(prompt, default='', id=264, ok=None, cancel=None):
|
|||
The PROMPT and DEFAULT strings, as well as the return value,
|
||||
can be at most 255 characters long.
|
||||
"""
|
||||
_initialize()
|
||||
d = GetNewDialog(id, -1)
|
||||
if not d:
|
||||
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
|
||||
|
@ -161,6 +172,7 @@ def AskYesNoCancel(question, default = 0, yes=None, no=None, cancel=None, id=262
|
|||
The QUESTION string can be at most 255 characters.
|
||||
"""
|
||||
|
||||
_initialize()
|
||||
d = GetNewDialog(id, -1)
|
||||
if not d:
|
||||
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
|
||||
|
@ -221,6 +233,7 @@ class ProgressBar:
|
|||
def __init__(self, title="Working...", maxval=0, label="", id=263):
|
||||
self.w = None
|
||||
self.d = None
|
||||
_initialize()
|
||||
self.d = GetNewDialog(id, -1)
|
||||
self.w = self.d.GetDialogWindow()
|
||||
self.label(label)
|
||||
|
@ -391,6 +404,7 @@ def _selectoption(d, optionlist, idx):
|
|||
|
||||
|
||||
def GetArgv(optionlist=None, commandlist=None, addoldfile=1, addnewfile=1, addfolder=1, id=ARGV_ID):
|
||||
_initialize()
|
||||
d = GetNewDialog(id, -1)
|
||||
if not d:
|
||||
print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
|
||||
|
|
|
@ -353,58 +353,31 @@ def process_common_macho(template, progress, code, rsrcname, destname, is_update
|
|||
ofp.close()
|
||||
|
||||
|
||||
if progress:
|
||||
progress.label("Copy resources...")
|
||||
progress.set(20)
|
||||
resfilename = 'python.rsrc' # XXXX later: '%s.rsrc' % shortname
|
||||
try:
|
||||
output = Res.FSOpenResourceFile(
|
||||
os.path.join(destname, 'Contents', 'Resources', resfilename),
|
||||
u'', WRITE)
|
||||
except MacOS.Error:
|
||||
fsr, dummy = Res.FSCreateResourceFile(
|
||||
os.path.join(destname, 'Contents', 'Resources'),
|
||||
unicode(resfilename), '')
|
||||
output = Res.FSOpenResourceFile(fsr, u'', WRITE)
|
||||
|
||||
# Copy the resources from the target specific resource template, if any
|
||||
typesfound, ownertype = [], None
|
||||
try:
|
||||
input = macresource.open_pathname(rsrcname)
|
||||
except (MacOS.Error, ValueError):
|
||||
pass
|
||||
if progress:
|
||||
progress.inc(50)
|
||||
else:
|
||||
if progress:
|
||||
progress.label("Copy resources...")
|
||||
progress.set(20)
|
||||
resfilename = 'python.rsrc' # XXXX later: '%s.rsrc' % shortname
|
||||
try:
|
||||
output = Res.FSOpenResourceFile(
|
||||
os.path.join(destname, 'Contents', 'Resources', resfilename),
|
||||
u'', WRITE)
|
||||
except MacOS.Error:
|
||||
fsr, dummy = Res.FSCreateResourceFile(
|
||||
os.path.join(destname, 'Contents', 'Resources'),
|
||||
unicode(resfilename), '')
|
||||
output = Res.FSOpenResourceFile(fsr, u'', WRITE)
|
||||
|
||||
typesfound, ownertype = copyres(input, output, [], 0, progress)
|
||||
Res.CloseResFile(input)
|
||||
|
||||
# Check which resource-types we should not copy from the template
|
||||
skiptypes = []
|
||||
## if 'vers' in typesfound: skiptypes.append('vers')
|
||||
## if 'SIZE' in typesfound: skiptypes.append('SIZE')
|
||||
## if 'BNDL' in typesfound: skiptypes = skiptypes + ['BNDL', 'FREF', 'icl4',
|
||||
## 'icl8', 'ics4', 'ics8', 'ICN#', 'ics#']
|
||||
## if not copy_codefragment:
|
||||
## skiptypes.append('cfrg')
|
||||
## skipowner = (ownertype <> None)
|
||||
|
||||
# Copy the resources from the template
|
||||
|
||||
input = Res.FSOpenResourceFile(
|
||||
os.path.join(template, 'Contents', 'Resources', 'python.rsrc'), u'', READ)
|
||||
if progress:
|
||||
progress.label("Copy standard resources...")
|
||||
progress.inc(0)
|
||||
## dummy, tmplowner = copyres(input, output, skiptypes, 1, progress)
|
||||
dummy, tmplowner = copyres(input, output, skiptypes, 1, None)
|
||||
|
||||
Res.CloseResFile(input)
|
||||
## if ownertype == None:
|
||||
## raise BuildError, "No owner resource found in either resource file or template"
|
||||
# Make sure we're manipulating the output resource file now
|
||||
|
||||
Res.CloseResFile(output)
|
||||
Res.CloseResFile(output)
|
||||
|
||||
if code:
|
||||
if raw:
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -95,6 +95,11 @@ def open_pathname(pathname, verbose=0):
|
|||
raise
|
||||
return refno
|
||||
|
||||
def open_error_resource():
|
||||
"""Open the resource file containing the error code to error message
|
||||
mapping."""
|
||||
need('Estr', 1, filename="errors.rsrc", modname=__name__)
|
||||
|
||||
def _decode(pathname, verbose=0):
|
||||
# Decode an AppleSingle resource file, return the new pathname.
|
||||
newpathname = pathname + '.df.rsrc'
|
||||
|
|
|
@ -37,16 +37,11 @@ LDFLAGS=-F$(builddir) -framework System -framework Python -framework Carbon \
|
|||
-framework Foundation
|
||||
CC=cc
|
||||
LD=cc
|
||||
REZ=/Developer/Tools/Rez
|
||||
DEREZ=/Developer/Tools/DeRez
|
||||
CPMAC=/Developer/Tools/CpMac
|
||||
|
||||
PYTHON=$(builddir)/python.exe
|
||||
APPTEMPLATE=$(srcdir)/Mac/OSXResources/app
|
||||
APPSUBDIRS=MacOS Resources Resources/English.lproj
|
||||
RESOURCEDIR=$(srcdir)/Mac/Resources
|
||||
RESOURCEFILE=python.rsrc
|
||||
RFCONVERTER=$(srcdir)/Mac/Lib/applesingle.py
|
||||
CACHERSRC=$(srcdir)/Mac/scripts/cachersrc.py
|
||||
|
||||
installapps: install_PythonLauncher install_Python install_BuildApplet install_IDE install_IDLE
|
||||
|
@ -94,29 +89,6 @@ install_Python: $(PYTHON)
|
|||
done; \
|
||||
done
|
||||
$(INSTALL_PROGRAM) $(STRIPFLAG) $(PYTHON) $(APPINSTALLDIR)/Contents/MacOS/python
|
||||
# Create a temporary version of the resources here
|
||||
# Note that the resource files can either be real 2-fork resource files
|
||||
# or AppleSingle encoded files.
|
||||
@if test -s $(RESOURCEDIR)/dialogs.rsrc; then \
|
||||
echo $(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/dialogs.rsrc dialogs.rsrc ;\
|
||||
$(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/dialogs.rsrc dialogs.rsrc ; \
|
||||
echo $(DEREZ) -useDF -skip ckid dialogs.rsrc > dialogs.r ; \
|
||||
$(DEREZ) -useDF -skip ckid dialogs.rsrc > dialogs.r ; \
|
||||
else \
|
||||
echo $(DEREZ) -skip ckid $(RESOURCEDIR)/dialogs.rsrc > dialogs.r ; \
|
||||
$(DEREZ) -skip ckid $(RESOURCEDIR)/dialogs.rsrc > dialogs.r ; \
|
||||
fi
|
||||
@if test -s $(RESOURCEDIR)/errors.rsrc; then \
|
||||
echo $(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/errors.rsrc errors.rsrc ;\
|
||||
$(PYTHON) $(RFCONVERTER) -r $(RESOURCEDIR)/errors.rsrc errors.rsrc ; \
|
||||
echo $(DEREZ) -useDF -skip ckid errors.rsrc > errors.r ; \
|
||||
$(DEREZ) -useDF -skip ckid errors.rsrc > errors.r ; \
|
||||
else \
|
||||
echo $(DEREZ) -skip ckid $(RESOURCEDIR)/errors.rsrc > errors.r ; \
|
||||
$(DEREZ) -skip ckid $(RESOURCEDIR)/errors.rsrc > errors.r ; \
|
||||
fi
|
||||
$(REZ) -useDF -o $(RESOURCEFILE) dialogs.r errors.r
|
||||
$(INSTALL_DATA) $(RESOURCEFILE) $(APPINSTALLDIR)/Contents/Resources/$(RESOURCEFILE)
|
||||
# Finally create the documentation symlink
|
||||
$(LN) -fsn ../../../../English.lproj/Documentation $(APPINSTALLDIR)/Contents/Resources/English.lproj/Documentation
|
||||
|
||||
|
@ -205,11 +177,11 @@ installmacsubtree:
|
|||
echo $(INSTALL_DATA) $$i $(MACLIBDEST); \
|
||||
fi; \
|
||||
done
|
||||
## @for i in $(MACLIBSRC)/*.rsrc; \
|
||||
## do \
|
||||
## echo $(CPMAC) $$i $$b ; \
|
||||
## $(CPMAC) $$i $$b ; \
|
||||
## done
|
||||
@for i in $(MACLIBSRC)/*.rsrc; \
|
||||
do \
|
||||
echo $(CPMAC) $$i $(MACLIBDEST) ; \
|
||||
$(CPMAC) $$i $(MACLIBDEST) ; \
|
||||
done
|
||||
@for d in $(MACLIBSUBDIRS); \
|
||||
do \
|
||||
a=$(MACLIBSRC)/$$d; \
|
||||
|
|
|
@ -81,8 +81,42 @@ char *PyMac_StrError(int err)
|
|||
static char buf[256];
|
||||
Handle h;
|
||||
char *str;
|
||||
static int errors_loaded;
|
||||
|
||||
h = GetResource('Estr', err);
|
||||
if (!h && !errors_loaded) {
|
||||
/*
|
||||
** Attempt to open the resource file containing the
|
||||
** Estr resources. We ignore all errors. We also try
|
||||
** this only once.
|
||||
*/
|
||||
errors_loaded = 1;
|
||||
PyObject *m, *rv;
|
||||
|
||||
m = PyImport_ImportModule("macresource");
|
||||
if (!m) {
|
||||
if (Py_VerboseFlag)
|
||||
PyErr_Print();
|
||||
PyErr_Clear();
|
||||
} else {
|
||||
rv = PyObject_CallMethod(m, "open_error_resource", "");
|
||||
if (!rv) {
|
||||
if (Py_VerboseFlag)
|
||||
PyErr_Print();
|
||||
PyErr_Clear();
|
||||
} else {
|
||||
Py_DECREF(rv);
|
||||
/* And try again... */
|
||||
h = GetResource('Estr', err);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
** Whether the code above succeeded or not, we won't try
|
||||
** again.
|
||||
*/
|
||||
errors_loaded = 1;
|
||||
|
||||
if ( h ) {
|
||||
HLock(h);
|
||||
str = (char *)*h;
|
||||
|
|
Loading…
Reference in New Issue