Fix build process so that subdir failures cause actual failure, even when CFLAGS...
[sxemacs] / PROBLEMS
1                                                   -*- mode:outline -*-
2
3 At the time of this release (SXEmacs 22.1.15), SXEmacs has the
4 following idiosyncrasies: 
5
6 * File Locations
7 ================
8
9 ** User init file (C-h v user-init-file)
10
11 SXEmacs searches for its init file in `~/.sxemacs/init.el'.
12 Symlinking your old ~/.xemacs directory should be enough to get you up
13 and running.
14
15     $ ln -s ~/.xemacs ~/.sxemacs RET
16
17 BTW, unlike XEmacs, SXEmacs doesn't attempt to "migrate" your old init
18 file or Gnu/Emacs .emacs file.
19
20 ** Packages Hierarchy
21
22 The default location that SXEmacs searches for packages is
23 `$prefix/share/sxemacs/'.  The same as for the user-init-file, a
24 symlink is all you need to get up and running.
25
26     $ ln -s /usr/local/lib/xemacs /usr/local/share/sxemacs RET
27
28
29 * Build Quirks
30 ==============
31
32 ** FFI
33
34 *** FFI is not included with your distro
35
36 Sadly, some Linux distributions (hello Fedora) don't ship a libffi
37 package, and their GCC does NOT include libffi or FFI headers either.
38 In this instance you have 2 options...
39
40   1) Get the standalone package of libffi at
41      <http://sourceware.org/libffi/>.
42
43   2) Compile your own GCC from source, making sure you enable the java
44      compiler.  Enabling java in your GCC build is the only way to get
45      libffi built.
46
47 Obviously, option #1 there is the easiest and quickest path to
48 FFI-enabled SXEmacsen, and it is the option that we recommend.
49
50 Oh, and please nag your distro to have FFI included by default.
51
52 *** FFI is included in your GCC but you see missing header errors
53
54 Often libffi headers aren't completely installed.  If you are getting
55 errors in effi.c that seem to be hinged from something like...
56
57   /usr/include/ffi.h:63:23: ffitarget.h: No such file or directory
58
59 You need to find `ffitarget.h' and put it in the same directory as
60 your `ffi.h'.  Your libffi came with GCC, so you'll find it within
61 your GCC directories:
62
63   $ dirname $(gcc -print-libgcc-file-name)
64 /usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.1
65
66 Using that example, ffitarget.h would be in...
67
68   /usr/lib/gcc-lib/i586-pc-linux-gnu/3.3.1/libffi/
69
70 Just copy or symlink the ffitarget.h there to /usr/include
71
72 *** FFI on SELinux enabled machines
73
74 If you are running with SELinux enabled and configure fails with
75 messages like the following in `config.log'...
76
77   error while loading shared libraries: /usr/local/lib/libffi.so.1:
78   cannot restore segment prot after reloc: Permission denied
79
80 You need to correct the default security context for `libffi.so'.
81
82   $ chcon -t textrel_shlib_t /usr/local/lib/libffi.so
83
84 ** PostgreSQL
85
86 The autoconf tests for PostgreSQL support have changed.  SXEmacs'
87 configure script now uses `pg_config' to determine whether or not to
88 enable PostgreSQL.  Because of this you may have to set you $PATH
89 environment to include the pgsql bin directory.  It is normally
90 `/usr/local/pgsql/bin/'.  Another popular directory on Solaris 9 is
91 `/opt/crw/postgresql/bin/'.  Check with your site administrator.
92
93 Bash users can do it like this...
94
95   export PATH=/usr/local/pgsql/bin:$PATH
96
97 *** Solaris 9 with 64-bit PostgreSQL
98
99 There has also been a report that on Solaris 9 you may also need to
100 configure with `--with-cflags='-mcpu=ultrasparc -m64''.  Apparently
101 GCC on Solaris 9 defaults to building 32-bit, so you lose if you have
102 64-bit PostgreSQL.
103
104 ** 64-bit test suite failure
105
106 We have had a couple of reports of the test suite failing on 64-bit
107 systems.  The error is like this (or similar)...
108
109 Testing /usr/src/sxemacs/modules/ase/ase-heap-tests.el...
110 Loading ase_heap v0.0.0 (SXEmacs module: ase-heap)
111 Loaded module ase_heap v0.0.0 (SXEmacs module: ase-heap)Fatal error: assertion failed, file alloc.c, line 298, block != (void*)0xCAFEBABEDEADBEEF
112 make[3]: *** [check-am] Aborted
113
114 At this point we are not too sure exactly what the issue is.  It looks
115 like it might be a bug in the malloc or free code of the libc.  We do
116 know that not all 64-bit systems are affected, so far, only Fedora
117 Core 7, and Gentoo on x86_64.
118
119 One user has reported that using `-O1' in CFLAGS prevents it.
120
121 But even with this test failure, SXEmacs still runs and operates
122 without incident.  In fact, the failure can't be reproduced when
123 running the test suite interactively.  With that in mind, it should be
124 safe to install if you see this failure.
125
126 We'll endeavour to get to the bottom of this one ASAP, if you think
127 you can help, let us know.
128
129 ** m4, libtool, autoconf, automake, and whatnot
130
131 SXEmacs tries to cope with any combination of versions of the above
132 programs.  However, there is one lower bound, autoconf 2.60, and
133 unfortunately this has an impact on the other parts of the build
134 tools.
135
136 To cut it really short, here is the minimum known-to-work combination:
137 - autoconf 2.62, automake 1.9.6, libtool 1.5.22, m4 1.4.6
138
139 In general we support (as of April, 2010):
140 - autoconf >= 2.62, including current git versions
141 - automake 1.9.6, 1.10, 1.10a, 1.11.1, and current git versions
142 - libtool 1.5.N with N >= 22, libtool >= 2.1a (current CVS version)
143 - m4 1.4.M with M >= 6 plus current git versions
144
145 Note that many libtool packages shipped with the distros (OpenSuSE,
146 Debian, just to name two) are _broken_.  Make sure you compile
147 your own libtool in case you want to rerun autogen.sh or bootstrap
148 the build chain, and double check that you use --enable-ltdl-install
149 when doing so.
150
151 If you are on a platform that has its own _non_gnu libtool (like OS/X
152 Leopard) add --program-prefix=g to your gnu libtool configure so it
153 installs as glibtool and doesn't clobber your other one.
154
155 Sometimes it helps just to copy over the libtool script manually:
156 cp -a $(type -p libtool) ${top_builddir}
157
158 *** ylwrap fails with sed errors
159
160 Some versions of the ylwrap script provided by autotools uses commas
161 as separators in sed commands. As such if your build path uses commas
162 the ylwrap will fail. 
163
164 Sample message (where the build path was /Users/njsf/Projects/SXEmacs/nsx-up/,,mac):
165
166 /Users/njsf/Projects/SXEmacs/nsx-up/,,mac/lib-src/make-docfile --modname cl-loop -E cl-loop.doc.c ../../../modules/cl/cl-loop.c
167 /bin/sh ../../../ylwrap ../../../modules/cl/cl-loop-parser.y y.tab.c cl-loop-parser.c y.tab.h cl-loop-parser.h y.output
168 cl-loop-parser.output -- bison -y  -d
169 sed: 1: "s,/Users/njsf/Projects/ ...": bad flag in substitute command: 'm'
170 sed: 1: "s,/Users/njsf/Projects/ ...": bad flag in substitute command: 'm'
171
172 The workaround is to use a path without commas in it.
173
174
175 *** Missing libltdl.la (Solaris 2.8)
176
177 We've had a report that missing libtool on Solaris 2.8 isn't detected
178 and so the included libtool still isn't used.  If you see an error
179 about a missing libltdl.la all you need to do is configure SXEmacs
180 with... 
181
182   --with-included-ltdl
183
184 ** configure
185
186 *** configure on FreeBSD, NetBSD, OpenBSD, etc.
187
188 Building SXEmacs on *BSD as far as we know requires the GNU Bourne
189 Again SHell (bash) versions 3 or 4.
190
191 bash is available for all tier 1 architectures as a binary package and 
192 and for tier 2/3 as a port.
193
194 To run configure successfully...
195
196     CONFIG_SHELL=/path/to/bash $CONFIG_SHELL configure [option, ...]
197
198 *** configure on FreeBSD
199
200 Turning on the use of libssp and -fstack-protector from configure
201 ( --with-error-checking=stack ) will result in a broken build. 
202
203 Do not, under any circumstances, add -fstack-protector to CFLAGS, even 
204 independently of the stack error checking option. 
205
206 ** bdwgc and gcc and code optimisation
207
208 There are some weird optimisation issues with the Boehm-Demers-Weiser
209 garbage collector (hereafter BDWGC) and the GCC C compilers of the 2 and
210 3 series.  The build will crash like this:
211
212   Loading build-autoloads.el...
213   Loading loadup-el.el...
214   Loading loadup.el...make[3]: *** [auto-autoloads.el] Segmentation fault
215   (core dumped)
216   make[3]: Leaving directory
217
218 The C backtrace will look like:
219
220   #0  0xbff9a2f0 in ?? ()
221   #1  0xb7eaf7d6 in GC_invoke_finalizers () at finalize.c:787
222   #2  0xb7eaf8ed in GC_notify_or_invoke_finalizers () at finalize.c:844
223   #3  0xb7eb2c8c in GC_generic_malloc (lb=32, k=0) at malloc.c:190
224
225 If this is true for you, you may want to try another optimisation level:
226
227   ./configure CFLAGS="-g -O2"
228
229 If this still does not work out either dispense with BDWGC support or
230 use a recent C compiler.  ATTOW, all GCC 4.x compilers (including SVN)
231 should work.
232
233 ** ENT
234
235 ENT is basically a conglomerate of internally and externally implemented
236 arithmetics.  Hence it supports a number of libraries, some of which
237 overlap in their functionality, some others do not but then break at the
238 compatibility layer.
239
240 One of the most likely problems is the GMP vs. MPFR issue.  In past
241 times, mpfr (a multiprecision library for floats with exact rounding
242 facilities) has been a part of the GMP distribution.  Later on, mpfr got
243 separated from it and has been developed independently while the version
244 of mpfr which ships with GMP stayed the same.  Now that scenario is
245 exactly the problem.
246
247 Inattentive distributions (like Fedora) still deliver packages of GMP
248 with the old'n'incompatible mpfr library.  SXEmacs will disable the MPFR
249 support on such systems by default (at configure time).  However, if you
250 install a supported version of mpfr in parallel to the packaged ones on
251 such a system SXEmacs autodetection correctly reports that a sane
252 version of mpfr is available and enables it.  Nonetheless, the according
253 build may fail (or the build may even succeed but calling the binary may
254 fail), like this:
255
256 number-mpfr.o: In function `ent_lt_BIGFR_T':
257 /home/martin/src/edit/sxemacs-main/src/number-mpfr.c:661: undefined
258 reference to `mpfr_less_p'
259 number-mpfr.o: In function `ent_gt_BIGFR_T':
260 /home/martin/src/edit/sxemacs-main/src/number-mpfr.c:671: undefined
261 reference to `mpfr_greater_p'
262 ...
263
264 Especially note that we _only_ support the standalone version of MPFR,
265 and not the one distributed with GMP.
266
267 Solution:
268 ---------
269 Either:
270    Badger your distributor and demand separate packages for GMP and
271    MPFR.
272 Or:
273    Remove the GMP package and install your own build -- available at
274    http://swox.com/gmp -- afterwards install your own build of mpfr (the
275    one from http://www.mpfr.org)
276
277 Reconfigure and rebuild SXEmacs afterwards.
278
279
280 ** Build fails because of missing makeinfo
281
282 Install the GNU texinfo package on your system. You'll need at least
283 version 4.8.
284
285
286 ** MacOS X warns of a crash during configure
287
288 This is normal, as one of the tests made during configure (for the
289 realpath call correctness) induces as crash.
290
291 If you are developing SXEmacs and will do lots of runs of configure
292 and that dialog annoys you, consider issuing:
293
294     # Disable crash reporting
295     sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
296     # Redo last configure
297     ./config.status --recheck 
298     # Enable crash reporting
299     sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
300
301 Another alternative (not recommended) is to launch
302
303         /Developer/Applications/Utilities/CrashReporterPrefs
304
305 and configure the mode to server, but you will loose notifications of
306 crashes on all applications.
307
308 In order to give SXEmacs developers with good diagnosis information it
309 is recommended the mode be Developer.
310
311 ** OpenIndiana
312
313 SXEmacs does build and run on OpenIndiana (151a) but you will need to
314 install a few files/packages beforehand.  Namely...
315
316     Common Name             OpenIndiana Package Name
317
318         GCC                     gcc-3
319         GNU M4                  gnu-m4
320         automake                automake-110
321         autoconf                autoconf
322         libtool                 libtool (also install libltdl)
323         pkg-config              gettext
324         math.h                  header-math
325         bison                   bison
326         gmp                     gmp
327         mpfr                    mpfr
328
329 Yes, you read that right... to get pkg-config you must install the
330 "gettext" package. :-)
331
332 In that list, `bison', `gmp', and `mpfr' are not critical, but you
333 will get extra functionality in your SXEmacs if you have them.
334
335 *** automake additional instructions for OpenIndiana
336
337 When you install the automake-110 OpenIndiana package it won't set up
338 the symlinks to /usr/bin/automake or /usr/bin/aclocal.  Fix that
339 with...
340
341         sudo ln -sv automake-1.10 /usr/bin/automake
342         sudo ln -sv aclocal-1.10 /usr/bin/aclocal
343
344 *** Running SXEmacs configure on OpenIndiana
345
346 There's one more quirk with OpenIndiana when you try to run SXEmacs'
347 configure... you MUST set $CONFIG_SHELL
348
349              CONFIG_SHELL=/bin/bash ../configure [opts]
350
351
352 ** make does not stop on subdirectory build failure
353
354 Due to a bug in the make argument parsing in code generated by
355 autoconf it is possible for make not to stop when a subdirectory fails.
356
357 This failure occurs for instance when the make command line has a variable
358 assignment which has a value with a - and k. Example:
359
360 make CFLAGS="-Wall -fpacked -fpedantic" build-report
361
362
363 * XEmacs Packages
364 =================
365
366 We have identified 2 packages so far that don't work "out of the box"
367 with SXEmacs.  In both of these the problem is with parsing version
368 information.  Patches have been sent to the appropriate maintainer to
369 fix the problem and are included here in case the packages haven't
370 been updated by the time you install SXEmacs.
371
372 Update:  The EFS, and Dired XEmacs packages that are currently
373 available from the "Pre-Releases" area of XEmacs package mirrors are
374 both now compatible with SXEmacs and do not need the patches mentioned
375 here.
376
377 * Problems with running SXEmacs
378 ===============================
379
380 ** FFI Related
381
382 *** ffi-wand.el refuses to load.
383
384 Can't load library `libMagickWand': libgomp.so.1: shared object cannot be
385 dlopen()ed
386
387 If you get that error when trying to load ffi-wand, it is because you
388 have a ImageMagick that is using OpenMP (currently only svn HEAD).  To
389 fix this you will need to rebuild ImageMagick, making sure that you
390 configure it using --disable-openmp.
391
392 See: <http://issues.sxemacs.org/show_bug.cgi?id=104>
393
394 ** Multimedia Goodness
395
396 *** SXEmacs hangs or crashes during (init-asynchronousity).
397
398 This is most likely a known effect (we do not want to call it bug,
399 since there is no definite location) with certain (g)libc and kernel
400 combinations under Linux.  If it crashes analyse the core file, it
401 should look like this:
402
403 #0  0x4014ebc4 in __sigsuspend (set=0xbffffbb4) at 
404 ../sysdeps/unix/sysv/linux/sigsuspend.c:48
405 #1  0x40101b34 in __pthread_wait_for_restart_signal (self=0x401116e0) at 
406 pthread.c:786
407 #2  0x40101138 in __pthread_create_2_1 (thread=0x206f8dc, attr=0xbffffc58, 
408 start_routine=0x20043ac <console>, arg=0xbffffd88) at restart.h:26
409
410 A definite fault-prone setup is using kernel 2.6.x in conjunction with
411 glibc-2.1.1.
412
413 *** SXEmacs hangs or crashes before it ought to playback sound.
414
415 As before, this is most likely a suspicious (g)libc/kernel
416 combination.
417
418 *** SXEmacs dumps core when using the ALSA audio device
419
420 This has been reported to happen with old ALSA libraries (1.0.3 to be
421 precise).  At the moment it is uncertain at which version these
422 problems disappear (no developer wants to downgrade to a non-working
423 ALSA :D).  We highly suggest to use the version 1.0.10 and above, or
424 not use ALSA at all.
425
426 *** SXEmacs in async mode does not play simultaneous sounds with ALSA
427
428 This is due to missing (hardware-)mixing capabilities of your
429 soundcard.  There is a user-space plugin called dmix, which can
430 effectively circumvent this issue.
431
432 *** SXEmacs crashes when using state sentinels with asynchronous sounds
433
434 This is a known bug (#13 in our bug database).  At the moment the only
435 advise we can give is: do not use sentinels before 22.1.7.
436 Also see our bug database at http://issues.sxemacs.org
437
438 *** make-media-stream seems to recognise any file as valid audio
439
440 This is a known issue with fully-featured ffmpeg builds.  The current
441 code in SXEmacs blindly relies on FFmpeg when it reports a file or
442 string as valid audio.  There is no way to double-check that at the
443 moment.  However, you can perform the additional check yourself if
444 you have taglib installed.  Use the included ffi-taglib.el.
445
446
447 * Original XEmacs PROBLEMS File
448 ===============================
449
450 The original XEmacs PROBLEMS file may be found in the SXEmacs 
451 source distribution as PROBLEMS.XEmacs - while many issues mentioned
452 have since been fixed, it is preserved for posterity.