Skip to content

Commit 666b1e7

Browse files
committed
Link the core with CoreServices, not with Carbon, and don't use any Carbon
routines. As of 10.1 using Carbon will crash Python if no window server is available (ssh connection, console mode, MacOSX Server). This fixes bug #466907. A result of this mod is that the default 8bit encoding on OSX is now ASCII, for the time being. Also, the extension modules that need the Carbon framework now explicitly include it in setup.py.
1 parent d17f4bd commit 666b1e7

File tree

4 files changed

+137
-31
lines changed

4 files changed

+137
-31
lines changed

Python/mactoolboxglue.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3737
*/
3838
char *PyMac_getscript()
3939
{
40+
#if TARGET_API_MAC_OSX
41+
/* We cannot use GetSysFont because it requires the window manager
42+
** There are other APIs to query the default 8 bit encoding, but
43+
** I don't know about them (yet).
44+
*/
45+
return "ascii";
46+
#else
4047
int font, script, lang;
4148
font = 0;
4249
font = GetSysFont();
@@ -65,6 +72,7 @@ char *PyMac_getscript()
6572
default:
6673
return "ascii"; /* better than nothing */
6774
}
75+
#endif /* TARGET_API_MAC_OSX */
6876
}
6977

7078
/* Like strerror() but for Mac OS error numbers */

configure

Lines changed: 83 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#! /bin/sh
22

3-
# From configure.in Revision: 1.276
3+
# From configure.in Revision: 1.278
44

55
# Guess values for system-dependent variables and create Makefiles.
66
# Generated automatically using autoconf version 2.13
@@ -3027,7 +3027,7 @@ then
30273027
fi
30283028
case "$enable_toolbox_glue" in
30293029
yes)
3030-
extra_frameworks="-framework Carbon -framework Foundation"
3030+
extra_frameworks="-framework CoreServices -framework Foundation"
30313031
extra_machdep_objs="Python/mactoolboxglue.o"
30323032
extra_undefs="-u __dummy -u _PyMac_Error"
30333033
cat >> confdefs.h <<\EOF
@@ -7379,6 +7379,84 @@ EOF
73797379

73807380
fi
73817381

7382+
# On HP/UX 11.0, mvwdelch is a block with a return statement
7383+
echo $ac_n "checking whether mvwdelch is an expression""... $ac_c" 1>&6
7384+
echo "configure:7385: checking whether mvwdelch is an expression" >&5
7385+
if eval "test \"`echo '$''{'ac_cv_mvwdelch_is_expression'+set}'`\" = set"; then
7386+
echo $ac_n "(cached) $ac_c" 1>&6
7387+
else
7388+
cat > conftest.$ac_ext <<EOF
7389+
#line 7390 "configure"
7390+
#include "confdefs.h"
7391+
#include <curses.h>
7392+
int main() {
7393+
7394+
int rtn;
7395+
rtn = mvwdelch(0,0,0);
7396+
7397+
; return 0; }
7398+
EOF
7399+
if { (eval echo configure:7400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
7400+
rm -rf conftest*
7401+
ac_cv_mvwdelch_is_expression=yes
7402+
else
7403+
echo "configure: failed program was:" >&5
7404+
cat conftest.$ac_ext >&5
7405+
rm -rf conftest*
7406+
ac_cv_mvwdelch_is_expression=no
7407+
fi
7408+
rm -f conftest*
7409+
fi
7410+
7411+
echo "$ac_t""$ac_cv_mvwdelch_is_expression" 1>&6
7412+
7413+
if test "$ac_cv_mvwdelch_is_expression" = yes
7414+
then
7415+
cat >> confdefs.h <<\EOF
7416+
#define MVWDELCH_IS_EXPRESSION 1
7417+
EOF
7418+
7419+
fi
7420+
7421+
echo $ac_n "checking whether WINDOW has _flags""... $ac_c" 1>&6
7422+
echo "configure:7423: checking whether WINDOW has _flags" >&5
7423+
if eval "test \"`echo '$''{'ac_cv_window_has_flags'+set}'`\" = set"; then
7424+
echo $ac_n "(cached) $ac_c" 1>&6
7425+
else
7426+
cat > conftest.$ac_ext <<EOF
7427+
#line 7428 "configure"
7428+
#include "confdefs.h"
7429+
#include <curses.h>
7430+
int main() {
7431+
7432+
WINDOW *w;
7433+
w->_flags = 0;
7434+
7435+
; return 0; }
7436+
EOF
7437+
if { (eval echo configure:7438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
7438+
rm -rf conftest*
7439+
ac_cv_window_has_flags=yes
7440+
else
7441+
echo "configure: failed program was:" >&5
7442+
cat conftest.$ac_ext >&5
7443+
rm -rf conftest*
7444+
ac_cv_window_has_flags=no
7445+
fi
7446+
rm -f conftest*
7447+
fi
7448+
7449+
echo "$ac_t""$ac_cv_window_has_flags" 1>&6
7450+
7451+
7452+
if test "$ac_cv_window_has_flags" = yes
7453+
then
7454+
cat >> confdefs.h <<\EOF
7455+
#define WINDOW_HAS_FLAGS 1
7456+
EOF
7457+
7458+
fi
7459+
73827460
# THIS MUST BE LAST, IT CAN BREAK OTHER TESTS!
73837461
# Add sys/socket.h to confdefs.h
73847462
cat >> confdefs.h <<\EOF
@@ -7387,12 +7465,12 @@ cat >> confdefs.h <<\EOF
73877465
#endif
73887466
EOF
73897467
echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
7390-
echo "configure:7391: checking for socklen_t" >&5
7468+
echo "configure:7469: checking for socklen_t" >&5
73917469
if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then
73927470
echo $ac_n "(cached) $ac_c" 1>&6
73937471
else
73947472
cat > conftest.$ac_ext <<EOF
7395-
#line 7396 "configure"
7473+
#line 7474 "configure"
73967474
#include "confdefs.h"
73977475
#include <sys/types.h>
73987476
#if STDC_HEADERS
@@ -7441,7 +7519,7 @@ done
74417519

74427520
SRCDIRS="Parser Grammar Objects Python Modules"
74437521
echo $ac_n "checking for build directories""... $ac_c" 1>&6
7444-
echo "configure:7445: checking for build directories" >&5
7522+
echo "configure:7523: checking for build directories" >&5
74457523
for dir in $SRCDIRS; do
74467524
if test ! -d $dir; then
74477525
mkdir $dir

configure.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ then
655655
fi
656656
case "$enable_toolbox_glue" in
657657
yes)
658-
extra_frameworks="-framework Carbon -framework Foundation"
658+
extra_frameworks="-framework CoreServices -framework Foundation"
659659
extra_machdep_objs="Python/mactoolboxglue.o"
660660
extra_undefs="-u __dummy -u _PyMac_Error"
661661
AC_DEFINE(USE_TOOLBOX_OBJECT_GLUE)

setup.py

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -565,35 +565,55 @@ def detect_modules(self):
565565
# procedure triggers on.
566566
frameworkdir = sysconfig.get_config_var('PYTHONFRAMEWORKDIR')
567567
exts.append( Extension('gestalt', ['gestaltmodule.c']) )
568-
exts.append( Extension('MacOS', ['macosmodule.c']) )
569-
exts.append( Extension('icglue', ['icgluemodule.c']) )
570-
exts.append( Extension('macfs', ['macfsmodule.c', '../Python/getapplbycreator.c']) )
571-
exts.append( Extension('_CF', ['cf/_CFmodule.c'],
572-
extra_link_args=['-framework', 'CoreFoundation']) )
573-
exts.append( Extension('_Res', ['res/_Resmodule.c'] ) )
574-
exts.append( Extension('_Snd', ['snd/_Sndmodule.c']) )
568+
exts.append( Extension('MacOS', ['macosmodule.c'],
569+
extra_link_args=['-framework', 'Carbon']) )
570+
exts.append( Extension('icglue', ['icgluemodule.c'],
571+
extra_link_args=['-framework', 'Carbon']) )
572+
exts.append( Extension('macfs', ['macfsmodule.c', '../Python/getapplbycreator.c'],
573+
extra_link_args=['-framework', 'Carbon']) )
574+
exts.append( Extension('_CF', ['cf/_CFmodule.c']) )
575+
exts.append( Extension('_Res', ['res/_Resmodule.c']) )
576+
exts.append( Extension('_Snd', ['snd/_Sndmodule.c'],
577+
extra_link_args=['-framework', 'Carbon']) )
575578
if frameworkdir:
576-
exts.append( Extension('Nav', ['Nav.c']) )
577-
exts.append( Extension('_AE', ['ae/_AEmodule.c']) )
578-
exts.append( Extension('_App', ['app/_Appmodule.c']) )
579-
exts.append( Extension('_Cm', ['cm/_Cmmodule.c']) )
580-
exts.append( Extension('_Ctl', ['ctl/_Ctlmodule.c']) )
581-
exts.append( Extension('_Dlg', ['dlg/_Dlgmodule.c']) )
582-
exts.append( Extension('_Drag', ['drag/_Dragmodule.c']) )
583-
exts.append( Extension('_Evt', ['evt/_Evtmodule.c']) )
584-
exts.append( Extension('_Fm', ['fm/_Fmmodule.c']) )
585-
exts.append( Extension('_Icn', ['icn/_Icnmodule.c']) )
586-
exts.append( Extension('_List', ['list/_Listmodule.c']) )
587-
exts.append( Extension('_Menu', ['menu/_Menumodule.c']) )
588-
exts.append( Extension('_Mlte', ['mlte/_Mltemodule.c']) )
589-
exts.append( Extension('_Qd', ['qd/_Qdmodule.c']) )
590-
exts.append( Extension('_Qdoffs', ['qdoffs/_Qdoffsmodule.c']) )
579+
exts.append( Extension('Nav', ['Nav.c'],
580+
extra_link_args=['-framework', 'Carbon']) )
581+
exts.append( Extension('_AE', ['ae/_AEmodule.c'],
582+
extra_link_args=['-framework', 'Carbon']) )
583+
exts.append( Extension('_App', ['app/_Appmodule.c'],
584+
extra_link_args=['-framework', 'Carbon']) )
585+
exts.append( Extension('_Cm', ['cm/_Cmmodule.c'],
586+
extra_link_args=['-framework', 'Carbon']) )
587+
exts.append( Extension('_Ctl', ['ctl/_Ctlmodule.c'],
588+
extra_link_args=['-framework', 'Carbon']) )
589+
exts.append( Extension('_Dlg', ['dlg/_Dlgmodule.c'],
590+
extra_link_args=['-framework', 'Carbon']) )
591+
exts.append( Extension('_Drag', ['drag/_Dragmodule.c'],
592+
extra_link_args=['-framework', 'Carbon']) )
593+
exts.append( Extension('_Evt', ['evt/_Evtmodule.c'],
594+
extra_link_args=['-framework', 'Carbon']) )
595+
exts.append( Extension('_Fm', ['fm/_Fmmodule.c'],
596+
extra_link_args=['-framework', 'Carbon']) )
597+
exts.append( Extension('_Icn', ['icn/_Icnmodule.c'],
598+
extra_link_args=['-framework', 'Carbon']) )
599+
exts.append( Extension('_List', ['list/_Listmodule.c'],
600+
extra_link_args=['-framework', 'Carbon']) )
601+
exts.append( Extension('_Menu', ['menu/_Menumodule.c'],
602+
extra_link_args=['-framework', 'Carbon']) )
603+
exts.append( Extension('_Mlte', ['mlte/_Mltemodule.c'],
604+
extra_link_args=['-framework', 'Carbon']) )
605+
exts.append( Extension('_Qd', ['qd/_Qdmodule.c'],
606+
extra_link_args=['-framework', 'Carbon']) )
607+
exts.append( Extension('_Qdoffs', ['qdoffs/_Qdoffsmodule.c'],
608+
extra_link_args=['-framework', 'Carbon']) )
591609
exts.append( Extension('_Qt', ['qt/_Qtmodule.c'],
592-
extra_link_args=['-framework', 'QuickTime']) )
610+
extra_link_args=['-framework', 'QuickTime', '-framework', 'Carbon']) )
593611
## exts.append( Extension('_Scrap', ['scrap/_Scrapmodule.c']) )
594-
exts.append( Extension('_TE', ['te/_TEmodule.c']) )
612+
exts.append( Extension('_TE', ['te/_TEmodule.c'],
613+
extra_link_args=['-framework', 'Carbon']) )
595614
## exts.append( Extension('waste', ['waste/wastemodule.c']) )
596-
exts.append( Extension('_Win', ['win/_Winmodule.c']) )
615+
exts.append( Extension('_Win', ['win/_Winmodule.c'],
616+
extra_link_args=['-framework', 'Carbon']) )
597617

598618
self.extensions.extend(exts)
599619

0 commit comments

Comments
 (0)