diff --git a/Makefile.macosx b/Makefile.macosx index 67d4aa3..502fa10 100644 --- a/Makefile.macosx +++ b/Makefile.macosx @@ -1,4 +1,5 @@ -CC = gcc +CC ?= gcc +CARBON_HEADERS ?= "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/Developer/Headers" NAME = flisp SRCS = $(NAME).c builtins.c string.c equalhash.c table.c iostream.c @@ -9,7 +10,7 @@ LIBTARGET = lib$(NAME) LLTDIR = llt LLT = $(LLTDIR)/libllt.a -CONFIG = -DMACOSX -DARCH_X86_64 -DBITS64 -D__CPU__=686 +CONFIG = -DMACOSX -DARCH_X86_64 -DBITS64 -D__CPU__=686 -I$(CARBON_HEADERS) FLAGS = -falign-functions -Wall -Wno-strict-aliasing -I$(LLTDIR) $(CFLAGS) -DUSE_COMPUTED_GOTO $(CONFIG) LIBFILES = $(LLT) LIBS = $(LIBFILES) -lm -framework ApplicationServices diff --git a/flisp.c b/flisp.c index 3b73910..691e94b 100644 --- a/flisp.c +++ b/flisp.c @@ -2304,6 +2304,8 @@ static void lisp_init(size_t initial_heapsize) set(symbol("*os-name*"), symbol("win32")); #elif defined(MACOSX) set(symbol("*os-name*"), symbol("macos")); +#elif defined(OPENBSD) + set(symbol("*os-name*"), symbol("openbsd")); #else set(symbol("*os-name*"), symbol("unknown")); #endif diff --git a/flmain.c b/flmain.c index 79d83ae..50c650b 100644 --- a/flmain.c +++ b/flmain.c @@ -27,6 +27,9 @@ int main(int argc, char *argv[]) fl_init(512*1024); fname_buf[0] = '\0'; +#ifdef INITFILE + strcat(fname_buf, INITFILE); +#else value_t str = symbol_value(symbol("*install-dir*")); char *exedir = (str == UNBOUND ? NULL : cvalue_data(str)); if (exedir != NULL) { @@ -34,6 +37,7 @@ int main(int argc, char *argv[]) strcat(fname_buf, PATHSEPSTRING); } strcat(fname_buf, "flisp.boot"); +#endif value_t args[2]; fl_gc_handle(&args[0]); diff --git a/llt/dirpath.c b/llt/dirpath.c index f448ac0..b68b8ca 100644 --- a/llt/dirpath.c +++ b/llt/dirpath.c @@ -89,6 +89,12 @@ char *get_exename(char *buf, size_t size) return buf; } +#elif defined(OPENBSD) +char *get_exename(char *buf, size_t size) +{ + /* OpenBSD currently has no way of determining a processes pathname */ + return NULL; +} #elif defined(__FreeBSD__) #include #include @@ -113,8 +119,8 @@ char *get_exename(char *buf, size_t size) return buf; } #elif defined(MACOSX) -#include "/Developer/Headers/FlatCarbon/Processes.h" -#include "/Developer/Headers/FlatCarbon/Files.h" +#include +#include char *get_exename(char *buf, size_t size) { ProcessSerialNumber PSN; diff --git a/llt/dtypes.h b/llt/dtypes.h index b0784cd..9fec2a3 100644 --- a/llt/dtypes.h +++ b/llt/dtypes.h @@ -21,13 +21,23 @@ # define LINUX #elif defined(__APPLE__) && defined(__MACH__) # define MACOSX +#elif defined(__OpenBSD__) +# define OPENBSD #elif defined(_WIN32) # define WIN32 #else # error "unknown platform" #endif +#if defined(OPENBSD) +#if defined(__x86_64__) +# define __SIZEOF_POINTER__ 8 +#else +# define __SIZEOF_POINTER__ 4 +#endif +#endif +#if !defined (BITS32) && !defined (BITS64) #ifndef __SIZEOF_POINTER__ # error "__SIZEOF_POINTER__ undefined" #endif @@ -38,6 +48,7 @@ #else # error "this is one weird machine" #endif +#endif #if defined(WIN32) @@ -59,7 +70,7 @@ # define BIG_ENDIAN __BIG_ENDIAN # define PDP_ENDIAN __PDP_ENDIAN # define BYTE_ORDER __BYTE_ORDER -#elif defined(MACOSX) +#elif defined(MACOSX) || defined(OPENBSD) # include # define __LITTLE_ENDIAN LITTLE_ENDIAN # define __BIG_ENDIAN BIG_ENDIAN diff --git a/llt/timefuncs.c b/llt/timefuncs.c index d2986c8..86639a0 100644 --- a/llt/timefuncs.c +++ b/llt/timefuncs.c @@ -106,7 +106,7 @@ void timestring(double seconds, char *buffer, size_t len) #endif } -#if defined(LINUX) || defined(MACOSX) +#if defined(LINUX) || defined(MACOSX) || defined(OPENBSD) extern char *strptime(const char *s, const char *format, struct tm *tm); double parsetime(const char *str) { diff --git a/llt/utf8.c b/llt/utf8.c index 9d554ca..fee04ba 100644 --- a/llt/utf8.c +++ b/llt/utf8.c @@ -25,9 +25,9 @@ #include #define snprintf _snprintf #else -#ifndef __FreeBSD__ +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) #include -#endif /* __FreeBSD__ */ +#endif /* __FreeBSD__ && __OpenBSD__ */ #endif #include