+2013-07-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ Simplify buildobj processing.
+ * Makefile.in (buildobj.h): Make it a sequence of strings each
+ followed by comma, rather than a single string. Put it into a
+ .tmp file in case there's an error while generating it.
+ (gl-stamp): Use .tmp for temp files.
+ (mostlyclean): Clean .tmp files.
+ * doc.c (buildobj): Move to just the routine that needs it.
+ It's now an array of strings, so processing is simpler.
+
2013-07-01 Paul Eggert <eggert@cs.ucla.edu>
Fix bug re noninteractive multithreaded memory allocation (Bug#14569).
cd $(libsrc); $(MAKE) $(MFLAGS) make-docfile$(EXEEXT)
buildobj.h: Makefile
- echo "#define BUILDOBJ \"$(ALLOBJS) " "\"" >$@
+ for i in $(ALLOBJS); do \
+ echo "$$i" | sed 's,.*/,,; s/\.obj$$/\.o/; s/^/"/; s/$$/",/' \
+ || exit; \
+ done >$@.tmp
+ mv $@.tmp $@
globals.h: gl-stamp; @true
GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m)
gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
- @rm -f gl-tmp
- $(libsrc)/make-docfile -d $(srcdir) -g $(obj) > gl-tmp
- $(srcdir)/../build-aux/move-if-change gl-tmp globals.h
+ $(libsrc)/make-docfile -d $(srcdir) -g $(obj) > gl.tmp
+ $(srcdir)/../build-aux/move-if-change gl.tmp globals.h
echo timestamp > $@
$(ALLOBJS): globals.h
rm -f bootstrap-emacs$(EXEEXT) emacs-$(version)$(EXEEXT)
rm -f buildobj.h
rm -f globals.h gl-stamp
- rm -f *.res
+ rm -f *.res *.tmp
clean: mostlyclean
rm -f emacs-*.*.*$(EXEEXT) emacs$(EXEEXT)
-rm -rf $(DEPDIR)
#include "buffer.h"
#include "keyboard.h"
#include "keymap.h"
-#include "buildobj.h"
Lisp_Object Qfunction_documentation;
}
}
-static const char buildobj[] = BUILDOBJ;
DEFUN ("Snarf-documentation", Fsnarf_documentation, Ssnarf_documentation,
1, 1, 0,
/* Vbuild_files is nil when temacs is run, and non-nil after that. */
if (NILP (Vbuild_files))
- {
- const char *beg, *end;
-
- for (beg = buildobj; *beg; beg = end)
- {
- ptrdiff_t len;
-
- while (*beg && c_isspace (*beg)) ++beg;
-
- for (end = beg; *end && ! c_isspace (*end); ++end)
- if (*end == '/') beg = end + 1; /* Skip directory part. */
-
- len = end - beg;
- if (len > 4 && end[-4] == '.' && end[-3] == 'o')
- len -= 2; /* Just take .o if it ends in .obj */
-
- if (len > 0)
- Vbuild_files = Fcons (make_string (beg, len), Vbuild_files);
- }
- Vbuild_files = Fpurecopy (Vbuild_files);
- }
+ {
+ static char const *const buildobj[] =
+ {
+ #include "buildobj.h"
+ };
+ int i = sizeof buildobj / sizeof *buildobj;
+ while (0 <= --i)
+ Vbuild_files = Fcons (build_string (buildobj[i]), Vbuild_files);
+ Vbuild_files = Fpurecopy (Vbuild_files);
+ }
fd = emacs_open (name, O_RDONLY, 0);
if (fd < 0)