Apple's X11 1.0 shipped with Panther has two major problems. Problem 1. X_LOCALE
Panther has locale support but Apple left X_LOCALE enabled. It broke many programs' i18n support. Problem 2. #pragma GCC Cpp of Apple's gcc3.3 puts "#pragma GCC" at the top of preprocessed file. X uses cpp widely and therefore X is suffered many problems. For example: #pragma GCC set_debug_pwd "..." #!/bin/sh I made a workaround package named "fix-apple-x11". Solution 1. Compile Xlib without X_LOCALE and install it at /sw/fix-apple-x11/lib. Then override original libX11.6.dylib by DYLD_LIBRARY_PATH magic. For binary compatibility I added stub _Xsetlocale. To prevent newly built programs depend on fix-apple-x11, you must not add -L/sw/fix-apple-x11/lib to LDFLAGS unless you link libX11.a statically. I removed libX11.dylib to avoid the mistake. Solution 2. #define CppCmd /usr/bin/cpp3 as XFree86 4.4.0 does. Then install properly generated files in /sw/fix-apple/x11/{bin,lib}. In addition install sane imake config files for non-X programs which depend on imake. Please try attached package. Any comment is welcome. Section: x11-system Target OS: 10.3
Package: fix-apple-x11 Version: 1.0 Revision: 2 Depends: system-xfree86 (>= 2:4.3-2) Conflicts: system-xfree86 (>= 2:4.3.99), xfree86-shlibs, xfree86-rootless, xfree86-rootless-threaded, xfree86 Source: http://www.opensource.apple.com/darwinsource/tarballs/other/X11ForMacOSXSource-%v.tar.gz Source-MD5: 9e4b2a221e2df1b30a0bf1f92df49613 SourceDirectory: X11ForMacOSXSource-%v/xc PatchScript: sed 's|@PREFIX@|%p|g' <%a/%n.patch | patch -p2 CompileScript: make World InstallScript: << make install DESTDIR=%d ( cd %i/fix-apple-x11 && xargs rm ) < files-to-remove install -c -m 755 prepend-path %i/fix-apple-x11/bin install -d -m 755 %i/etc/profile.d install -c -m 755 fix-apple-x11.sh fix-apple-x11.csh %i/etc/profile.d << # Description: Kit to fix problems of Apple's X11 1.0 DescDetail: << Apple's X11 1.0 shipped with Panther has two major problems; X_LOCALE and #prama GCC. This kit implements workaround for these problems by some magic. << License: BSD Homepage: http://www.xfree86.org/ Maintainer: Univ. of Tokyo Educational Computing System Tutors <[EMAIL PROTECTED]>
diff -Nru X11ForMacOSXSource-1.0.orig/xc/config/cf/Imakefile X11ForMacOSXSource-1.0/xc/config/cf/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/config/cf/Imakefile Fri Mar 14 08:56:16 2003 +++ X11ForMacOSXSource-1.0/xc/config/cf/Imakefile Fri Feb 27 02:39:42 2004 @@ -133,7 +133,7 @@ all:: -#if BuildLibraries +#if BuildLibraries || ForceInstallConfigFiles InstallMultipleDestFlags(install,$(INSTFILES),$(CONFIGDIR),$(INSTDATFLAGS)) #endif diff -Nru X11ForMacOSXSource-1.0.orig/xc/config/cf/X11.tmpl X11ForMacOSXSource-1.0/xc/config/cf/X11.tmpl --- X11ForMacOSXSource-1.0.orig/xc/config/cf/X11.tmpl Sat Mar 15 06:32:13 2003 +++ X11ForMacOSXSource-1.0/xc/config/cf/X11.tmpl Fri Feb 27 02:39:42 2004 @@ -2181,14 +2181,14 @@ #define GLwUseXmStubs NO /* create stub (weak) Motif symbols */ #endif #else -#undef SharedLibGlw -#define SharedLibGlw NO -#undef NormalLibGlw -#define NormalLibGlw NO -#undef DebugLibGlw -#define DebugLibGlw NO -#undef ProfileLibGlw -#define ProfileLibGlw NO +#undef SharedLibGLw +#define SharedLibGLw NO +#undef NormalLibGLw +#define NormalLibGLw NO +#undef DebugLibGLw +#define DebugLibGLw NO +#undef ProfileLibGLw +#define ProfileLibGLw NO #endif #ifndef SharedLibXext diff -Nru X11ForMacOSXSource-1.0.orig/xc/config/cf/darwin.cf X11ForMacOSXSource-1.0/xc/config/cf/darwin.cf --- X11ForMacOSXSource-1.0.orig/xc/config/cf/darwin.cf Sat Mar 15 06:32:13 2003 +++ X11ForMacOSXSource-1.0/xc/config/cf/darwin.cf Fri Feb 27 02:39:42 2004 @@ -121,8 +121,17 @@ #define MkdirHierCmd mkdir -p -/* our cpp isn't in /lib/cpp and early versions don't like -undef */ -#define CppCmd /usr/bin/cpp +/* + * Our cpp isn't in /lib/cpp and early versions don't like -undef. + * The default cpp-3.3 that ships with Panther inserts spurious #pragmas, + * so we use the 3.1-based version. + */ +#if OSMajorVersion >= 7 +# define CppCmd /usr/bin/cpp3 +# define StandardCppOptions -traditional -D__GNUC__ +#else +# define CppCmd /usr/bin/cpp +#endif #if HasGcc3 # define RawCppCmd CppCmd -undef #else @@ -157,16 +166,22 @@ #define OptimizedCDebugFlags -g -Os #define ByteOrder UNKNOWN_BYTE_ORDER +#if OSMajorVersion < 7 +# define DarwinLocaleDefines -DX_LOCALE +#else +# define DarwinLocaleDefines /**/ +/* we use installed Apple's Xaw */ +/* # define XawI18nDefines -DHAS_WCHAR_H -DHAS_WCTYPE_H -DNO_WIDEC_H */ +#endif + /* * __DARWIN__ will be used for platform specific #ifdefs that can't * be handled by existing X defines. * * Darwin's alloca() seg faults (rather than returning NULL) on failed * allocations, so we can't use it. - * - * Darwin's setlocale() doesn't work properly, so use X11's instead. */ -#define StandardDefines -D__DARWIN__ -DNO_ALLOCA -DX_LOCALE -DCSRG_BASED +#define StandardDefines -D__DARWIN__ -DNO_ALLOCA -DCSRG_BASED DarwinLocaleDefines /* * Set this to NO to just build the client libs, which should work without diff -Nru X11ForMacOSXSource-1.0.orig/xc/config/cf/host.def X11ForMacOSXSource-1.0/xc/config/cf/host.def --- X11ForMacOSXSource-1.0.orig/xc/config/cf/host.def Thu Jan 1 09:00:00 1970 +++ X11ForMacOSXSource-1.0/xc/config/cf/host.def Fri Feb 27 02:49:52 2004 @@ -0,0 +1,32 @@ +#ifdef BeforeVendorCF + +#define BuildServersOnly YES /* fake */ +#define BuildServer NO +#define XAppleServer NO +#define NormalX11Lib YES +#define BuildX11Lib YES +#define LinkGLToUsrInclude NO +#define BuildGlxExt NO +#define InstallEmptyHostDef +#define NothingOutsideProjectRoot YES + +#define ProjectRoot @PREFIX@/fix-apple-x11 +#define XLocaleDir OriginalLibDir/locale +#define X11perfcompLib OriginalLibDir/x11perfcomp + +/* our local facility */ +#define BuildCppScripts YES +#define BuildCppScriptsOnly YES +#define OriginalLibDir /usr/X11R6/lib/X11 +#define RstartLibDir OriginalLibDir/rstart +#define DontBuildFontLib YES +#define ForceInstallConfigFiles YES + +#endif /* BeforeVendorCF */ + +#ifdef AfterVendorCF + +#undef BuildXInputLib +#define BuildXInputLib NO + +#endif /* BeforeVendorCF */ diff -Nru X11ForMacOSXSource-1.0.orig/xc/files-to-remove X11ForMacOSXSource-1.0/xc/files-to-remove --- X11ForMacOSXSource-1.0.orig/xc/files-to-remove Thu Jan 1 09:00:00 1970 +++ X11ForMacOSXSource-1.0/xc/files-to-remove Fri Feb 27 02:39:42 2004 @@ -0,0 +1,11 @@ +bin/lndir +bin/cleanlinks +bin/imake +bin/makedepend +bin/makeg +bin/makestrs +bin/mkdirhier +bin/mkhtmlindex +bin/revpath +bin/rman +lib/libX11.dylib diff -Nru X11ForMacOSXSource-1.0.orig/xc/fix-apple-x11.csh X11ForMacOSXSource-1.0/xc/fix-apple-x11.csh --- X11ForMacOSXSource-1.0.orig/xc/fix-apple-x11.csh Thu Jan 1 09:00:00 1970 +++ X11ForMacOSXSource-1.0/xc/fix-apple-x11.csh Fri Feb 27 02:39:42 2004 @@ -0,0 +1,5 @@ +set [EMAIL PROTECTED]@/fix-apple-x11/bin +set [EMAIL PROTECTED]@/fix-apple-x11/lib +setenv PATH `$bindir/prepend-path "$PATH" $bindir` +setenv DYLD_LIBRARY_PATH `$bindir/prepend-path "$DYLD_LIBRARY_PATH" $libdir` +unset bindir libdir diff -Nru X11ForMacOSXSource-1.0.orig/xc/fix-apple-x11.sh X11ForMacOSXSource-1.0/xc/fix-apple-x11.sh --- X11ForMacOSXSource-1.0.orig/xc/fix-apple-x11.sh Thu Jan 1 09:00:00 1970 +++ X11ForMacOSXSource-1.0/xc/fix-apple-x11.sh Fri Feb 27 02:39:42 2004 @@ -0,0 +1,6 @@ [EMAIL PROTECTED]@/fix-apple-x11/bin [EMAIL PROTECTED]@/fix-apple-x11/lib +PATH=`$bindir/prepend-path "$PATH" $bindir` +DYLD_LIBRARY_PATH=`$bindir/prepend-path "$DYLD_LIBRARY_PATH" $libdir` +unset bindir libdir +export PATH DYLD_LIBRARY_PATH diff -Nru X11ForMacOSXSource-1.0.orig/xc/lib/Imakefile X11ForMacOSXSource-1.0/xc/lib/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/lib/Imakefile Fri Mar 14 08:58:19 2003 +++ X11ForMacOSXSource-1.0/xc/lib/Imakefile Fri Feb 27 02:39:42 2004 @@ -164,7 +164,9 @@ FONTCACHELIBDIR = Xfontcache #endif +#if !DontBuildFontLib FONTSUBDIR = font +#endif #if BuildFontEncLib FONTENCSUBDIR = fontenc diff -Nru X11ForMacOSXSource-1.0.orig/xc/lib/X11/Imakefile X11ForMacOSXSource-1.0/xc/lib/X11/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/lib/X11/Imakefile Fri Mar 14 08:58:32 2003 +++ X11ForMacOSXSource-1.0/xc/lib/X11/Imakefile Sun Apr 4 04:17:15 2004 @@ -84,9 +84,15 @@ XF86BIGFONT_DEFINES = XF86BigfontExtensionDefines +#ifdef OriginalLibDir + EDB_DEFINES = -DERRORDB=\"OriginalLibDir/XErrorDB\" + KDB_DEFINES = -DKEYSYMDB=\"OriginalLibDir/XKeysymDB\" + CMS_DEFINES = -DXCMSDB=\"OriginalLibDir/Xcms.txt\" +#else EDB_DEFINES = -DERRORDB=\"$(LIBDIR)/XErrorDB\" KDB_DEFINES = -DKEYSYMDB=\"$(LIBDIR)/XKeysymDB\" CMS_DEFINES = -DXCMSDB=\"$(LIBDIR)/Xcms.txt\" +#endif #if HasSnprintf MISC_DEFINES = -DHAS_SNPRINTF -DLIBX11 #endif @@ -128,9 +134,12 @@ AUTHSRCS = AuDispose.c AuGetBest.c AuFileName.c AuRead.c SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(EXTRASRCS) /* try *.c if you have trouble */ HEADERS = Xlib.h Xresource.h Xutil.h cursorfont.h Xlibint.h \ - Xcms.h Xlocale.h XKBlib.h + Xcms.h Xlocale.h XKBlib.h $(AUTHHEADERS) LINTLIBS = +#if !BuildXauLib +AUTHHEADERS = Xauth.h +#endif #if BuildLoadableXlibI18n && DoSharedLib EXTRASHAREDSRC = $(SHAREDLCSRCS) #endif @@ -1028,11 +1037,13 @@ SpecialCLibObjectRuleSeparateOpts(PutImage,$(ICONFIGFILES),$(_NOOP_),$(XCURSOR_DEFINES)) #endif +#ifndef OriginalLibDir #if InstallXcmsTxt InstallNonExecFile(Xcms.txt,$(LIBDIR)) #endif InstallNonExecFile(XErrorDB,$(LIBDIR)) InstallNonExecFile(XKeysymDB,$(LIBDIR)) +#endif InstallLintLibrary(X11,$(LINTLIBDIR)) @@ -1040,6 +1051,9 @@ LinkSourceFile(AuGetBest.c,$(XAUTHSRC)) LinkSourceFile(AuFileName.c,$(XAUTHSRC)) LinkSourceFile(AuRead.c,$(XAUTHSRC)) +#if !BuildXauLib +LinkSourceFile(Xauth.h,$(XAUTHSRC)) +#endif #if HasKrb5 LinkSourceFile(k5encode.c,$(XAUTHSRC)) #endif diff -Nru X11ForMacOSXSource-1.0.orig/xc/lib/X11/SetLocale.c X11ForMacOSXSource-1.0/xc/lib/X11/SetLocale.c --- X11ForMacOSXSource-1.0.orig/xc/lib/X11/SetLocale.c Fri Mar 14 08:58:34 2003 +++ X11ForMacOSXSource-1.0/xc/lib/X11/SetLocale.c Fri Feb 27 02:39:43 2004 @@ -123,6 +123,17 @@ #else /* X_LOCALE */ +#ifdef __DARWIN__ +char * +_Xsetlocale( + int category, + _Xconst char *name +) +{ + return setlocale(category, name); +} +#endif /* __DARWIN__ */ + /* * _XlcMapOSLocaleName is an implementation dependent routine that derives * the LC_CTYPE locale name as used in the sample implementation from that diff -Nru X11ForMacOSXSource-1.0.orig/xc/prepend-path X11ForMacOSXSource-1.0/xc/prepend-path --- X11ForMacOSXSource-1.0.orig/xc/prepend-path Thu Jan 1 09:00:00 1970 +++ X11ForMacOSXSource-1.0/xc/prepend-path Fri Feb 27 02:39:43 2004 @@ -0,0 +1,37 @@ +#!/bin/sh +old="$1" +list="$2" +oldIFS="$IFS" + +IFS=":" +set x $list +shift +IFS="$oldIFS" + +rlist= +case "$#" in + 0) + rlist= + ;; + *) + rlist="$1" + shift + for p in "$@"; do + rlist="$p:$rlist" + done +esac + +IFS=":" +set x $rlist +shift +IFS="$oldIFS" + +new="$old" +for p in "$@"; do + case "$new" in + "") new="$p" ;; + "$p"|"$p":*|*:"$p"|*:"$p":*) ;; + *) new="$p:$new" ;; + esac +done +echo "$new" diff -Nru X11ForMacOSXSource-1.0.orig/xc/programs/Imakefile X11ForMacOSXSource-1.0/xc/programs/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/programs/Imakefile Sat Mar 15 06:35:03 2003 +++ X11ForMacOSXSource-1.0/xc/programs/Imakefile Fri Feb 27 02:39:43 2004 @@ -108,8 +108,12 @@ XCURSORGENDIR = xcursorgen #endif +#if BuildCppScripts +CPPSCRIPTDIR = rstart x11perf xinit +#endif + #if BuildServersOnly || !BuildClients -SUBDIRS = $(XSSRCDIR) +SUBDIRS = $(XSSRCDIR) $(CPPSCRIPTDIR) #else SUBDIRS = \ appres bdftopcf bitmap \ diff -Nru X11ForMacOSXSource-1.0.orig/xc/programs/rstart/Imakefile X11ForMacOSXSource-1.0/xc/programs/rstart/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/programs/rstart/Imakefile Fri Mar 14 08:58:47 2003 +++ X11ForMacOSXSource-1.0/xc/programs/rstart/Imakefile Fri Feb 27 02:39:43 2004 @@ -37,7 +37,10 @@ OS= CLIENTNAME=rstart -MYLIBDIR=$(LIBDIR)/rstart +#ifndef RstartLibDir +# define RstartLibDir $(LIBDIR)/rstart +#endif +MYLIBDIR=RstartLibDir ENVPREFIX=RSTART PACKAGEname=rstart @@ -65,11 +68,13 @@ PEDEFS = -DNOPUTENV #endif +#if !BuildCppScriptsOnly AllTarget(ProgramTargetName($(RSERVERNAME))) NormalProgramTarget($(RSERVERNAME), $(OBJS),NullParameter,NullParameter,NullParameter) InstallProgram($(RSERVERNAME),$(MYLIBDIR)) SpecialCObjectRule(server,NullParameter,$(SRVDEFS) $(PEDEFS)) +#endif AllTarget($(SSERVERNAME)) CppScriptTarget($(SSERVERNAME),$(SSERVERSRC),$(OS) -DLIBDIR=$(MYLIBDIR) -DSERVERNAME=$(SERVERNAME),NullParameter) @@ -79,6 +84,7 @@ CppScriptTarget($(CLIENTNAME),client.cpp,-DRSHCMD=$(RSHCMD) -DSERVERNAME=$(SERVERNAME),NullParameter) InstallNamedProg($(CLIENTNAME),$(CLIENTNAME),$(BINDIR)) +#if !BuildCppScriptsOnly AllTarget(config) CppFileTarget(config,config.cpp,-DBINDIR=$(BINDIR) -DLIBDIR=$(MYLIBDIR) -DPACKAGEname=$(PACKAGEname) -DENVPREFIX=$(ENVPREFIX),NullParameter) InstallNonExecFile(config,$(MYLIBDIR)) @@ -146,6 +152,7 @@ Recurse(commands,$(MYLIBDIR),FilterCommand) Recurse(contexts,$(MYLIBDIR),FilterContext) InstallAliases() +#endif /* !BuildCppScriptsOnly */ InstallManPage(rstart,$(MANDIR)) InstallManPage(rstartd,$(MANDIR)) @@ -155,5 +162,7 @@ XCOMM # DNS.) XCOMM #CFLAGS=-DODT1_DISPLAY_HACK +#if !BuildCppScriptsOnly LinkConfDirectory(rstart,.,rstart,.) +#endif diff -Nru X11ForMacOSXSource-1.0.orig/xc/programs/x11perf/Imakefile X11ForMacOSXSource-1.0/xc/programs/x11perf/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/programs/x11perf/Imakefile Fri Mar 14 08:58:49 2003 +++ X11ForMacOSXSource-1.0/xc/programs/x11perf/Imakefile Fri Feb 27 02:39:43 2004 @@ -50,16 +50,20 @@ #endif #endif +#if !BuildCppScriptsOnly ComplexProgramTarget(x11perf) +#endif all:: x11perfcomp CppScriptTarget(x11perfcomp,x11pcomp.cpp,-DLIBPATH=$(PERFLIB),$(ICONFIGFILE)) InstallNamedProg(x11perfcomp,x11perfcomp,$(BINDIR)) +#if !BuildCppScriptsOnly InstallNamedProg(fillblnk.sh,fillblnk,$(PERFLIB)) InstallNamedProg(perfboth.sh,perfboth,$(PERFLIB)) InstallNamedProg(perfratio.sh,perfratio,$(PERFLIB)) InstallNamedProg(Xmark.sh,Xmark,$(BINDIR)) InstallManPage(Xmark,$(MANDIR)) InstallManPageLong(x11pcomp,$(MANDIR),x11perfcomp) +#endif diff -Nru X11ForMacOSXSource-1.0.orig/xc/programs/xinit/Imakefile X11ForMacOSXSource-1.0/xc/programs/xinit/Imakefile --- X11ForMacOSXSource-1.0.orig/xc/programs/xinit/Imakefile Fri Mar 14 08:58:59 2003 +++ X11ForMacOSXSource-1.0/xc/programs/xinit/Imakefile Fri Feb 27 02:39:43 2004 @@ -26,9 +26,13 @@ COOKIEDEFS = -DHAS_COOKIE_MAKER -DMK_COOKIE=MkCookieCmd #endif +#if BuildCppScriptsOnly +all:: $(SAMPLECONFIG) +#else all:: startx $(SAMPLECONFIG) ComplexProgramTarget_1(xinit,$(LOCAL_LIBRARIES),$(DEFFILE)) +#endif MakeScriptFromCpp(xinitrc, -DXINITDIR=$(XINITDIR))