diff --git a/Makefile b/Makefile index 3b643e8..dcd963f 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ $(STANDARD_TARGETS): @echo " $(MAKE) PLATFORM=cygwin" @echo " $(MAKE) PLATFORM=solaris" @echo " $(MAKE) PLATFORM=cross-linux-mingw" + @echo " $(MAKE) PLATFORM=haiku" @echo "" @echo "For more information, consult the README file." @exit 1 diff --git a/Makefile.haiku b/Makefile.haiku index e69de29..18ddfd4 100644 --- a/Makefile.haiku +++ b/Makefile.haiku @@ -0,0 +1,106 @@ +# Makefile.haiku - configuration for Haiku -*- Makefile -*- +# +# Copyright (c) 2007, Felix L. Winkelmann +# Copyright (c) 2008-2009, The Chicken Team +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following +# conditions are met: +# +# Redistributions of source code must retain the above copyright notice, this list of conditions and the following +# disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided with the distribution. +# Neither the name of the author nor the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + + +ifneq ($(CONFIG),) +include $(CONFIG) +endif + +SRCDIR ?= ./ + +# platform configuration + +ARCH = $(shell sh $(SRCDIR)/config-arch.sh) + +# options + +C_COMPILER_OPTIONS = -fno-strict-aliasing -DHAVE_CHICKEN_CONFIG_H +ifdef DEBUGBUILD +C_COMPILER_OPTIMIZATION_OPTIONS ?= -g -Wall -Wno-unused +else +ifdef OPTIMIZE_FOR_SPEED +C_COMPILER_OPTIMIZATION_OPTIONS ?= -O3 -fomit-frame-pointer +else +C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os -fomit-frame-pointer +endif +endif +LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared +LINKER_LINK_SHARED_DLOADABLE_OPTIONS = -L. -shared -Wl,-R$(RUNTIME_LINKER_PATH) +LINKER_LINK_SHARED_PROGRAM_OPTIONS = -Wl,-R$(RUNTIME_LINKER_PATH) +LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,libchicken.so$(SONAME_VERSION) +LIBUCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,libuchicken.so$(SONAME_VERSION) +LIBRARIES = -lnetwork +NEEDS_RELINKING = yes +USES_SONAME = yes + +# special files + +CHICKEN_CONFIG_H = chicken-config.h + +# select default and internal settings + +include $(SRCDIR)/defaults.make + +chicken-config.h: chicken-defaults.h + echo "#define HAVE_DIRENT_H 1" >$@ + echo "#define HAVE_DLFCN_H 1" >>$@ + echo "#define HAVE_INTTYPES_H 1" >>$@ + echo "#define HAVE_LIMITS_H 1" >>$@ + echo "#define HAVE_LONG_LONG 1" >>$@ + echo "#define HAVE_MEMMOVE 1" >>$@ + echo "#define HAVE_MEMORY_H 1" >>$@ + echo "#define HAVE_STDINT_H 1" >>$@ + echo "#define HAVE_STDLIB_H 1" >>$@ + echo "#define HAVE_STRERROR 1" >>$@ + echo "#define HAVE_STRINGS_H 1" >>$@ + echo "#define HAVE_STRING_H 1" >>$@ + echo "#define HAVE_STRTOLL 1" >>$@ + echo "#define HAVE_STRTOQ 1" >>$@ + echo "#define HAVE_SYS_STAT_H 1" >>$@ + echo "#define HAVE_SYS_TYPES_H 1" >>$@ + echo "#define HAVE_UNISTD_H 1" >>$@ + echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>$@ + echo "#define STDC_HEADERS 1" >>$@ + echo "#define HAVE_ALLOCA 1" >>$@ + echo "#define HAVE_ALLOCA_H 1" >>$@ + echo "#define HAVE_GRP_H 1" >>$@ + echo "#define HAVE_ERRNO_H 1" >>$@ + echo "#define HAVE_GCVT 1" >>$@ + echo "#define HAVE_MEMMOVE 1" >>$@ + echo "#define C_STACK_GROWS_DOWNWARD 1" >>$@ + echo "#define SIGIO 0" >>$@ +ifdef GCHOOKS + echo "#define C_GC_HOOKS" >>$@ +endif +ifdef SYMBOLGC + echo "#define C_COLLECT_ALL_SYMBOLS" >>$@ +endif +ifneq ($(HACKED_APPLY),) + echo "#define C_HACKED_APPLY" >>$@ +endif + cat chicken-defaults.h >>$@ + +include $(SRCDIR)/rules.make diff --git a/chicken.h b/chicken.h index 73de3b5..64ac627 100644 --- a/chicken.h +++ b/chicken.h @@ -93,6 +93,10 @@ # include #endif +#if defined(__HAIKU__) +# include +#endif + /* Byteorder in machine word */ #if defined(__MINGW32__) @@ -2336,6 +2340,25 @@ C_path_to_executable(C_char *fname) return NULL; } +# elif defined(__HAIKU__) +{ + image_info info; + int32 cookie = 0; + int32 i; + + while (get_next_image_info(0, &cookie, &info) == B_OK) { + if (info.type == B_APP_IMAGE) { + C_strcat(buffer, info.name); + + for(i = C_strlen(buffer); i >= 0 && buffer[ i ] != '/'; --i); + + buffer[ i ] = '\0'; + + return buffer; + } + } +} + return NULL; # else return NULL; # endif diff --git a/config-arch.sh b/config-arch.sh index 87bb401..acd3070 100644 --- a/config-arch.sh +++ b/config-arch.sh @@ -27,7 +27,7 @@ case "`uname -m`" in - i*86) echo "x86";; + i*86|BePC) echo "x86";; "Power Macintosh"|ppc|powerpc|macppc) case "`uname -s`" in Darwin) echo "ppc.darwin";;