mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
BSD portability fixes from Taylor Campbell
This commit is contained in:
parent
b5331233cb
commit
5bbef040c5
6 changed files with 48 additions and 30 deletions
30
Makefile
30
Makefile
|
@ -20,8 +20,6 @@ CHIBI_DEPENDENCIES = ./chibi-scheme$(EXE)
|
|||
|
||||
SNOW_CHIBI ?= tools/snow-chibi
|
||||
|
||||
TEMPFILE := $(shell mktemp -t chibi.XXXXXX)
|
||||
|
||||
########################################################################
|
||||
|
||||
# Choose compiled library on MSYS
|
||||
|
@ -125,9 +123,10 @@ chibi-scheme-static.bc:
|
|||
chibi-scheme-emscripten: VERSION
|
||||
$(MAKE) dist-clean
|
||||
$(MAKE) chibi-scheme-static PLATFORM=emscripten SEXP_USE_DL=0
|
||||
mv chibi-scheme-static$(EXE) $(TEMPFILE)
|
||||
$(MAKE) dist-clean
|
||||
mv $(TEMPFILE) chibi-scheme-emscripten
|
||||
(tempfile="`mktemp -t chibi.XXXXXX`" && \
|
||||
mv chibi-scheme-static$(EXE) "$$tempfile" && \
|
||||
$(MAKE) dist-clean; \
|
||||
mv "$$tempfile" chibi-scheme-emscripten)
|
||||
|
||||
include/chibi/install.h: Makefile
|
||||
echo '#define sexp_so_extension "'$(SO)'"' > $@
|
||||
|
@ -168,7 +167,7 @@ libchibi-scheme.a: $(SEXP_OBJS) $(EVAL_OBJS)
|
|||
$(AR) rcs $@ $^
|
||||
|
||||
chibi-scheme$(EXE): main.o libchibi-scheme$(SO)
|
||||
$(CC) $(XCPPFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ $< -L. -lchibi-scheme
|
||||
$(CC) $(XCPPFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ $< -L. $(RLDFLAGS) -lchibi-scheme
|
||||
|
||||
chibi-scheme-static$(EXE): main.o $(SEXP_OBJS) $(EVAL_OBJS)
|
||||
$(CC) $(XCFLAGS) $(STATICFLAGS) -o $@ $^ $(LDFLAGS) $(GCLDFLAGS) -lm
|
||||
|
@ -192,7 +191,14 @@ chibi-scheme.pc: chibi-scheme.pc.in
|
|||
# A special case, this needs to be linked with the LDFLAGS in case
|
||||
# we're using Boehm.
|
||||
lib/chibi/ast$(SO): lib/chibi/ast.c $(INCLUDES) libchibi-scheme$(SO)
|
||||
-$(CC) $(CLIBFLAGS) $(CLINKFLAGS) $(XCPPFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ $< $(GCLDFLAGS) -L. -lchibi-scheme
|
||||
-$(CC) $(CLIBFLAGS) $(CLINKFLAGS) $(XCPPFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ $< $(GCLDFLAGS) -L. $(RLDFLAGS) -lchibi-scheme
|
||||
|
||||
lib/chibi/crypto/crypto.c: lib/chibi/crypto/sha2.c
|
||||
lib/chibi/filesystem.c: lib/chibi/filesystem_win32_shim.c
|
||||
lib/chibi/io/io.c: lib/chibi/io/port.c
|
||||
lib/chibi/net.c: lib/chibi/accept.c
|
||||
lib/chibi/process.c: lib/chibi/signal.c
|
||||
lib/srfi/144/math.c: lib/srfi/144/lgamma_r.c
|
||||
|
||||
lib/chibi.img: $(CHIBI_DEPENDENCIES) all-libs
|
||||
$(CHIBI) -d $@
|
||||
|
@ -208,7 +214,7 @@ doc: doc/chibi.html doc-libs
|
|||
%.html: %.scrbl $(CHIBI_DOC_DEPENDENCIES)
|
||||
$(CHIBI_DOC) --html $< > $@
|
||||
|
||||
lib/.%.meta: lib/%/ tools/generate-install-meta.scm
|
||||
lib/.%.meta: lib/%/ tools/generate-install-meta.scm $(CHIBI_DEPENDENCIES)
|
||||
-$(FIND) $< -name \*.sld | \
|
||||
$(CHIBI) tools/generate-install-meta.scm $(VERSION) > $@
|
||||
|
||||
|
@ -301,6 +307,8 @@ clean: clean-libs
|
|||
cleaner: clean
|
||||
-$(RM) chibi-scheme$(EXE) chibi-scheme-static$(EXE) chibi-scheme-ulimit$(EXE) \
|
||||
$(IMAGE_FILES) libchibi-scheme*$(SO) *.a *.pc \
|
||||
libchibi-scheme$(SO_VERSIONED_SUFFIX) \
|
||||
libchibi-scheme$(SO_MAJOR_VERSIONED_SUFFIX) \
|
||||
include/chibi/install.h lib/.*.meta \
|
||||
chibi-scheme-emscripten \
|
||||
js/chibi.* \
|
||||
|
@ -400,9 +408,9 @@ install-base: all
|
|||
install: install-base
|
||||
ifneq "$(IMAGE_FILES)" ""
|
||||
echo "Generating images"
|
||||
-cd / && LD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) -d $(DESTDIR)$(MODDIR)/chibi.img
|
||||
-cd / && LD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) -xscheme.red -d $(DESTDIR)$(MODDIR)/red.img
|
||||
-cd / && LD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) -mchibi.snow.commands -mchibi.snow.interface -mchibi.snow.package -mchibi.snow.utils -d $(DESTDIR)$(MODDIR)/snow.img
|
||||
cd / && LD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" CHIBI_MODULE_PATH="$(DESTDIR)$(MODDIR):$(DESTDIR)$(BINMODDIR)" $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) -d $(DESTDIR)$(MODDIR)/chibi.img
|
||||
cd / && LD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" CHIBI_MODULE_PATH="$(DESTDIR)$(MODDIR):$(DESTDIR)$(BINMODDIR)" $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) -xscheme.red -d $(DESTDIR)$(MODDIR)/red.img
|
||||
cd / && LD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(LD_LIBRARY_PATH)" DYLD_LIBRARY_PATH="$(DESTDIR)$(SOLIBDIR):$(DYLD_LIBRARY_PATH)" CHIBI_MODULE_PATH="$(DESTDIR)$(MODDIR):$(DESTDIR)$(BINMODDIR)" $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) -mchibi.snow.commands -mchibi.snow.interface -mchibi.snow.package -mchibi.snow.utils -d $(DESTDIR)$(MODDIR)/snow.img
|
||||
endif
|
||||
|
||||
uninstall:
|
||||
|
|
|
@ -70,6 +70,7 @@ EXE =
|
|||
CLIBFLAGS = -fPIC
|
||||
CLINKFLAGS = -shared
|
||||
LIBDL =
|
||||
RLDFLAGS=-Wl,-R$(LIBDIR)
|
||||
else
|
||||
ifeq ($(PLATFORM),windows)
|
||||
SO = .dll
|
||||
|
@ -106,10 +107,6 @@ CLIBFLAGS = -fPIC
|
|||
CLINKFLAGS = -shared
|
||||
STATICFLAGS = -static -DSEXP_USE_DL=0
|
||||
LIBCHIBI_FLAGS = -Wl,-soname,libchibi-scheme$(SO).$(SOVERSION_MAJOR)
|
||||
ifeq ($(PLATFORM),BSD)
|
||||
LIBDL=
|
||||
RLDFLAGS=-Wl,-R$(DESTDIR)$(LIBDIR)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
@ -118,7 +115,7 @@ endif
|
|||
|
||||
ifeq ($(PLATFORM),unix)
|
||||
#RLDFLAGS=-rpath $(LIBDIR)
|
||||
RLDFLAGS=-Wl,-R$(DESTDIR)$(LIBDIR)
|
||||
RLDFLAGS=-Wl,-R$(LIBDIR)
|
||||
endif
|
||||
|
||||
########################################################################
|
||||
|
|
|
@ -52,7 +52,7 @@ lib/%.c: lib/%.stub $(CHIBI_FFI_DEPENDENCIES)
|
|||
$(CHIBI_FFI) $<
|
||||
|
||||
lib/%$(SO): lib/%.c $(INCLUDES) libchibi-scheme$(SO)
|
||||
$(CC) $(CLIBFLAGS) $(CLINKFLAGS) $(XCPPFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ $< -L. $(XLIBS) -lchibi-scheme
|
||||
$(CC) $(CLIBFLAGS) $(CLINKFLAGS) $(XCPPFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ $< -L. $(RLDFLAGS) $(XLIBS) -lchibi-scheme
|
||||
|
||||
doc-libs: $(HTML_LIBS)
|
||||
|
||||
|
|
|
@ -67,16 +67,28 @@ static sexp sexp_set_signal_action (sexp ctx, sexp self, sexp signum, sexp newac
|
|||
#include <sys/proc.h>
|
||||
#endif
|
||||
#include <sys/sysctl.h>
|
||||
#ifndef __NetBSD__
|
||||
#include <sys/user.h>
|
||||
#endif
|
||||
|
||||
static sexp sexp_pid_cmdline (sexp ctx, int pid) {
|
||||
size_t reslen = sizeof(struct kinfo_proc);
|
||||
#ifdef __NetBSD__
|
||||
/*
|
||||
* Newer version with defined interface that doesn't expose kernel
|
||||
* guts and works with 64-bit kernel, 32-bit userland.
|
||||
*/
|
||||
struct kinfo_proc2 res;
|
||||
int id = KERN_PROC2;
|
||||
#else
|
||||
struct kinfo_proc res;
|
||||
int name[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
|
||||
int id = KERN_PROC;
|
||||
#endif
|
||||
size_t reslen = sizeof(res);
|
||||
int name[4] = {CTL_KERN, id, KERN_PROC_PID, pid};
|
||||
if (sysctl(name, 4, &res, &reslen, NULL, 0) >= 0) {
|
||||
#if defined(__APPLE__) || defined(__NetBSD__)
|
||||
#if defined(__APPLE__)
|
||||
return sexp_c_string(ctx, res.kp_proc.p_comm, -1);
|
||||
#elif __OpenBSD__
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
return sexp_c_string(ctx, res.p_comm, -1);
|
||||
#elif __DragonFly__
|
||||
return sexp_c_string(ctx, res.kp_comm, -1);
|
||||
|
|
|
@ -34,7 +34,7 @@ sexp sexp_string_hash (sexp ctx, sexp self, sexp_sint_t n, sexp str, sexp bound)
|
|||
|
||||
static sexp_uint_t string_ci_hash (char *str, sexp_uint_t bound) {
|
||||
sexp_uint_t acc = FNV_OFFSET_BASIS;
|
||||
while (*str) {acc *= FNV_PRIME; acc ^= sexp_tolower(*str++);}
|
||||
while (*str) {acc *= FNV_PRIME; acc ^= sexp_tolower((unsigned char)*str++);}
|
||||
return acc % bound;
|
||||
}
|
||||
|
||||
|
|
17
sexp.c
17
sexp.c
|
@ -1272,7 +1272,7 @@ sexp sexp_intern(sexp ctx, const char *str, sexp_sint_t len) {
|
|||
#if SEXP_USE_HUFF_SYMS
|
||||
res = 0;
|
||||
space = SEXP_IMMEDIATE_BITS;
|
||||
if (len == 0 || sexp_isdigit(p[0])
|
||||
if (len == 0 || sexp_isdigit((unsigned char)p[0])
|
||||
|| ((p[0] == '+' || p[0] == '-') && len > 1))
|
||||
goto normal_intern;
|
||||
for ( ; i<len; i++, p++) {
|
||||
|
@ -2012,14 +2012,15 @@ sexp sexp_write_one (sexp ctx, sexp obj, sexp out) {
|
|||
str = sexp_lsymbol_data(obj);
|
||||
c = (sexp_lsymbol_length(obj) == 0 ||
|
||||
(sexp_lsymbol_length(obj) == 1 && str[0] == '.') ||
|
||||
sexp_isdigit(str[0]) ||
|
||||
sexp_isdigit((unsigned char)str[0]) ||
|
||||
(sexp_lsymbol_length(obj) > 1 &&
|
||||
((str[0] == '+' || str[0] == '-')
|
||||
&& (sexp_isdigit(str[1]) || str[1] == '.' || str[1] == 'i' ||
|
||||
&& (sexp_isdigit((unsigned char)str[1]) ||
|
||||
str[1] == '.' || str[1] == 'i' ||
|
||||
((sexp_lsymbol_length(obj) > 3) &&
|
||||
sexp_tolower(str[1]) == 'n' &&
|
||||
sexp_tolower(str[2]) == 'a' &&
|
||||
sexp_tolower(str[3]) == 'n')))))
|
||||
sexp_tolower((unsigned char)str[1]) == 'n' &&
|
||||
sexp_tolower((unsigned char)str[2]) == 'a' &&
|
||||
sexp_tolower((unsigned char)str[3]) == 'n')))))
|
||||
? '|' : EOF;
|
||||
for (i=sexp_lsymbol_length(obj)-1; i>=0; i--)
|
||||
if (str[i] <= ' ' || str[i] == '\\' || str[i] == '#' || sexp_is_separator(str[i]))
|
||||
|
@ -3363,8 +3364,8 @@ sexp sexp_string_to_number_op (sexp ctx, sexp self, sexp_sint_t n, sexp str, sex
|
|||
sexp_read_char(ctx, in);
|
||||
}
|
||||
in = ((sexp_string_data(str)[0] == '#' &&
|
||||
sexp_tolower(sexp_string_data(str)[1]) != 'e' &&
|
||||
sexp_tolower(sexp_string_data(str)[1]) != 'i')
|
||||
sexp_tolower((unsigned char)sexp_string_data(str)[1]) != 'e' &&
|
||||
sexp_tolower((unsigned char)sexp_string_data(str)[1]) != 'i')
|
||||
|| base == 10 ? sexp_read(ctx, in) :
|
||||
sexp_read_number(ctx, in, base, 0));
|
||||
sexp_gc_release1(ctx);
|
||||
|
|
Loading…
Add table
Reference in a new issue