~ chicken-core (chicken-5) 8817a2cebbaf5599c7eb8d9bb9cda92406c09acf


commit 8817a2cebbaf5599c7eb8d9bb9cda92406c09acf
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Dec 22 07:31:47 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Wed Dec 22 07:31:47 2010 +0100

    apply PROGRAM_PREFIX/SUFFIX also to share + lib subdirectories and library names; use distinctive subdir in include; remove msvc specific stuff from csc; use build-variable for actual library name; prefix/suffix-related build fixes; things may be broken at this point

diff --git a/Makefile.bsd b/Makefile.bsd
index 705afa69..c18a288b 100644
--- a/Makefile.bsd
+++ b/Makefile.bsd
@@ -56,7 +56,7 @@ endif
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LINKER_LINK_SHARED_DLOADABLE_OPTIONS = -shared -Wl,-R"$(RUNTIME_LINKER_PATH)" -Wl,-L.
 LINKER_LINK_SHARED_PROGRAM_OPTIONS = -Wl,-R"$(RUNTIME_LINKER_PATH)"
-LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,libchicken.so$(SONAME_VERSION)
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).so$(SONAME_VERSION)
 LIBRARIES = -lm
 NEEDS_RELINKING = yes
 USES_SONAME = yes
diff --git a/Makefile.cross-linux-mingw b/Makefile.cross-linux-mingw
index 583f1a49..51facbf6 100644
--- a/Makefile.cross-linux-mingw
+++ b/Makefile.cross-linux-mingw
@@ -62,11 +62,10 @@ endif
 C_COMPILER_SHARED_OPTIONS = -DPIC
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LIBRARIES = -lm -lws2_32
-LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 LIBCHICKEN_SO_LIBRARIES = -lws2_32 
 LIBUCHICKEN_SO_LIBRARIES = -lws2_32 
-LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
-LIBUCHICKEN_IMPORT_LIBRARY = libuchicken.dll.a
+LIBCHICKEN_IMPORT_LIBRARY = lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 TARGET_C_COMPILER = gcc
 TARGET_CXX_COMPILER = g++
 
@@ -82,14 +81,13 @@ include $(SRCDIR)/defaults.make
 # main target
 
 ifndef BUILD_SETUP_TOOLS
-TARGETS = libchicken$(A) libuchicken$(A) $(CHICKEN_PROGRAM)$(EXE) $(CSI_PROGRAM)$(EXE) \
-	$(CHICKEN_PROFILE_PROGRAM)$(EXE) $(CSC_PROGRAM)$(EXE) libchicken$(SO) \
-	libuchicken$(SO) \
+TARGETS = libchicken$(A) $(CHICKEN_PROGRAM)$(EXE) $(CSI_PROGRAM)$(EXE) \
+	$(CHICKEN_PROFILE_PROGRAM)$(EXE) $(CSC_PROGRAM)$(EXE) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) \
 	$(CHICKEN_BUG_PROGRAM)$(EXE)
 else
-TARGETS = libchicken$(A) libuchicken$(A) $(CHICKEN_PROGRAM)$(EXE) $(CSI_PROGRAM)$(EXE) \
-	$(CHICKEN_PROFILE_PROGRAM)$(EXE) $(CSC_PROGRAM)$(EXE) libchicken$(SO) \
-	libuchicken$(SO) $(CHICKEN_INSTALL_PROGRAM)$(EXE) $(CHICKEN_UNINSTALL_PROGRAM)$(EXE) \
+TARGETS = libchicken$(A) $(CHICKEN_PROGRAM)$(EXE) $(CSI_PROGRAM)$(EXE) \
+	$(CHICKEN_PROFILE_PROGRAM)$(EXE) $(CSC_PROGRAM)$(EXE) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) \
+	$(CHICKEN_INSTALL_PROGRAM)$(EXE) $(CHICKEN_UNINSTALL_PROGRAM)$(EXE) \
 	$(CHICKEN_STATUS_PROGRAM)$(EXE) \
 	$(CHICKEN_BUG_PROGRAM)$(EXE)
 endif
diff --git a/Makefile.cygwin b/Makefile.cygwin
index e1f70c69..39fa2e11 100644
--- a/Makefile.cygwin
+++ b/Makefile.cygwin
@@ -61,7 +61,7 @@ endif
 C_COMPILER_SHARED_OPTIONS = -DPIC
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared 
 LINKER_LINK_SHARED_PROGRAM_OPTIONS = -Wl,--dll-search-prefix=cyg
-LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a \
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a \
 	-Wl,--export-all-symbols \
 	-Wl,--enable-auto-import \
 	-Wl,--image-base=0x10000000 \
@@ -70,7 +70,7 @@ LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a \
 	-Wl,--no-whole-archive
 
 LIBRARIES = -lm 
-LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
+LIBCHICKEN_IMPORT_LIBRARY = lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 
 
 # special files
diff --git a/Makefile.haiku b/Makefile.haiku
index e8b27425..2b3cde26 100644
--- a/Makefile.haiku
+++ b/Makefile.haiku
@@ -49,8 +49,7 @@ 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)
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).so$(SONAME_VERSION)
 LIBRARIES = -lnetwork
 NEEDS_RELINKING = yes
 USES_SONAME = yes
diff --git a/Makefile.linux b/Makefile.linux
index f4b8cc4a..686ae88d 100644
--- a/Makefile.linux
+++ b/Makefile.linux
@@ -50,7 +50,7 @@ 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)
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).so$(SONAME_VERSION)
 LIBRARIES = -lm -ldl
 NEEDS_RELINKING = yes
 USES_SONAME = yes
diff --git a/Makefile.macosx b/Makefile.macosx
index d7e72d09..8290c9f2 100644
--- a/Makefile.macosx
+++ b/Makefile.macosx
@@ -52,7 +52,7 @@ C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os -fomit-frame-pointer
 endif
 endif
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -dynamiclib -compatibility_version 1 -current_version 1.0 -install_name $@
-POSTINSTALL_PROGRAM_FLAGS = -change libchicken$(SO) $(LIBDIR)/libchicken$(SO)
+POSTINSTALL_PROGRAM_FLAGS = -change lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) $(LIBDIR)/lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO)
 LIBRARIAN_OPTIONS = scru
 LINKER_LINK_SHARED_DLOADABLE_OPTIONS = -bundle -L.
 ASSEMBLER_OPTIONS =
diff --git a/Makefile.mingw b/Makefile.mingw
index 67c2d354..34465cbe 100644
--- a/Makefile.mingw
+++ b/Makefile.mingw
@@ -70,9 +70,9 @@ RC_COMPILER ?= windres
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LIBRARIES = -lm -lws2_32
 LINKER_OPTIONS += -Wl,--enable-auto-import
-LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 LIBCHICKEN_SO_LIBRARIES = -lm -lws2_32 
-LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
+LIBCHICKEN_IMPORT_LIBRARY = lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 MAKEDIR_COMMAND_OPTIONS =
 CUSTOM_RC_FILE = 1
 
@@ -165,6 +165,9 @@ endif
 	echo #ifndef C_INSTALL_LIB_HOME >>$@
 	echo # define C_INSTALL_LIB_HOME "$(LIBDIR)" >>$@
 	echo #endif >>$@
+	echo #ifndef C_INSTALL_LIB_NAME >>$@
+	echo # define C_INSTALL_LIB_NAME "$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX))" >>$@
+	echo #endif >>$@
 	echo #ifndef C_INSTALL_STATIC_LIB_HOME >>$@
 	echo # define C_INSTALL_STATIC_LIB_HOME "$(LIBDIR)" >>$@
 	echo #endif >>$@
@@ -222,6 +225,9 @@ endif
 	echo #ifndef C_TARGET_LIB_HOME >>$@
 	echo # define C_TARGET_LIB_HOME "$(TARGET_PREFIX)/lib" >>$@
 	echo #endif >>$@
+	echo #ifndef C_TARGET_LIB_NAME >>$@
+	echo # define C_TARGET_LIB_NAME "$(INSTALL_LIB_NAME)" >>$@
+	echo #endif >>$@
 	echo #ifndef C_TARGET_RUN_LIB_HOME >>$@
 	echo # define C_TARGET_RUN_LIB_HOME "$(TARGET_PREFIX)/lib" >>$@
 	echo #endif >>$@
@@ -229,7 +235,7 @@ endif
 	echo # define C_TARGET_SHARE_HOME "$(TARGET_PREFIX)/share" >>$@
 	echo #endif >>$@
 	echo #ifndef C_TARGET_INCLUDE_HOME >>$@
-	echo # define C_TARGET_INCLUDE_HOME "$(TARGET_PREFIX)/include" >>$@
+	echo # define C_TARGET_INCLUDE_HOME "$(TARGET_PREFIX)/include/chicken" >>$@
 	echo #endif >>$@
 	echo #ifndef C_TARGET_STATIC_LIB_HOME >>$@
 	echo # define C_TARGET_STATIC_LIB_HOME "$(TARGET_PREFIX)/lib" >>$@
diff --git a/Makefile.mingw-msys b/Makefile.mingw-msys
index 6e3bc1e0..630989db 100644
--- a/Makefile.mingw-msys
+++ b/Makefile.mingw-msys
@@ -63,9 +63,9 @@ C_COMPILER_SHARED_OPTIONS = -DPIC
 LINKER_OPTIONS += -Wl,--enable-auto-import
 LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
 LIBRARIES = -lm -lws2_32
-LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,libchicken.dll.a
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,--out-implib,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 LIBCHICKEN_SO_LIBRARIES = -lm -lws2_32 
-LIBCHICKEN_IMPORT_LIBRARY = libchicken.dll.a
+LIBCHICKEN_IMPORT_LIBRARY = lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).dll.a
 
 # Don't use "install" program as it is broken in some Mingw versions and 
 # Vista doesn't like it, anyway.
diff --git a/csc.scm b/csc.scm
index d74247a8..d57ca083 100644
--- a/csc.scm
+++ b/csc.scm
@@ -45,6 +45,7 @@
 (define-foreign-variable INSTALL_MORE_STATIC_LIBS c-string "C_INSTALL_MORE_STATIC_LIBS")
 (define-foreign-variable INSTALL_SHARE_HOME c-string "C_INSTALL_SHARE_HOME")
 (define-foreign-variable INSTALL_LIB_HOME c-string "C_INSTALL_LIB_HOME")
+(define-foreign-variable INSTALL_LIB_NAME c-string "C_INSTALL_LIB_NAME")
 (define-foreign-variable INSTALL_INCLUDE_HOME c-string "C_INSTALL_INCLUDE_HOME")
 (define-foreign-variable INSTALL_STATIC_LIB_HOME c-string "C_INSTALL_STATIC_LIB_HOME")
 (define-foreign-variable TARGET_MORE_LIBS c-string "C_TARGET_MORE_LIBS")
@@ -52,6 +53,7 @@
 (define-foreign-variable TARGET_BIN_HOME c-string "C_TARGET_BIN_HOME")
 (define-foreign-variable TARGET_SHARE_HOME c-string "C_TARGET_SHARE_HOME")
 (define-foreign-variable TARGET_LIB_HOME c-string "C_TARGET_LIB_HOME")
+(define-foreign-variable TARGET_LIB_NAME c-string "C_TARGET_LIB_NAME")
 (define-foreign-variable TARGET_INCLUDE_HOME c-string "C_TARGET_INCLUDE_HOME")
 (define-foreign-variable TARGET_STATIC_LIB_HOME c-string "C_TARGET_STATIC_LIB_HOME")
 (define-foreign-variable TARGET_RUN_LIB_HOME c-string "C_TARGET_RUN_LIB_HOME")
@@ -219,9 +221,7 @@
 	     (string-append "/" default-library)))) ))
 
 (define default-shared-library-files 
-  (if msvc
-      (list (string-append "libchicken." library-extension))
-      '("-lchicken")))
+  (list (string-append "-l" (if host-mode INSTALL_LIB_NAME TARGET_LIB_NAME))))
 
 (define library-files default-library-files)
 (define shared-library-files default-shared-library-files)
@@ -505,7 +505,6 @@ EOF
     (set! link-options
       (cons (cond
              (osx (if lib "-dynamiclib" "-bundle"))
-             (msvc "-dll")
              (else "-shared")) link-options))
     (set! shared #t) )
 
@@ -601,9 +600,9 @@ EOF
 		(set! inquiry-only #t)
 		(set! show-libs #t) ]
 	       [(-v -verbose)
-		(when (and (number? verbose) (not msvc))
+		(when (number? verbose)
 		  (set! compile-options (cons* "-v" "-Q" compile-options))
-		  (set! link-options (cons (if msvc "-VERBOSE" "-v") link-options)) )
+		  (set! link-options (cons "-v" link-options)) )
 		(cond (verbose
 		       (t-options "-verbose") 
 		       (set! verbose 2)) 
@@ -646,15 +645,10 @@ EOF
 			 INSTALL_SHARE_HOME "chicken.rc"
 			 object-extension) 
 			object-files))
-		(when (or msvc mingw)
-		  (cond
-		   (mingw
-		    (set! link-options
-		      (cons* "-lkernel32" "-luser32" "-lgdi32" "-mwindows"
-			     link-options)))
-		   (msvc
-		    (set! link-options
-		      (cons* "kernel32.lib" "user32.lib" "gdi32.lib" link-options)))))]
+		(when mingw
+		  (set! link-options
+		    (cons* "-lkernel32" "-luser32" "-lgdi32" "-mwindows"
+			   link-options)))]
 	       ((-deploy)
 		(set! deploy #t)
 		(set! deployed #t))
@@ -998,7 +992,7 @@ EOF
    (string-intersperse
     (append linking-optimization-options link-options
 	    (nth-value 1 (static-extension-info)) ) )
-   (if (and static (not mingw) (not msvc) (not osx)) " -static" "") ) )
+   (if (and static (not mingw) (not osx)) " -static" "") ) )
 
 (define (linker-libraries #!optional staticexts)
   (string-intersperse
diff --git a/defaults.make b/defaults.make
index 6293d656..e14752b8 100644
--- a/defaults.make
+++ b/defaults.make
@@ -48,13 +48,13 @@ BRANCHNAME ?= $(shell sh identify-branch.sh $(SRCDIR))
 BINDIR = $(PREFIX)/bin
 LIBDIR = $(PREFIX)/lib
 SHAREDIR = $(PREFIX)/share
-DATADIR = $(SHAREDIR)/chicken
+DATADIR = $(SHAREDIR)/$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 TOPMANDIR = $(SHAREDIR)/man
 MANDIR = $(TOPMANDIR)/man1
-INCDIR = $(PREFIX)/include
+INCDIR = $(PREFIX)/include/$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 DOCDIR = $(DATADIR)/doc
 VARDIR ?= $(LIBDIR)
-CHICKENLIBDIR = $(VARDIR)/chicken
+CHICKENLIBDIR = $(VARDIR)/$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 EGGDIR = $(CHICKENLIBDIR)/$(BINARYVERSION)
 
 ifdef WINDOWS_SHELL
@@ -62,12 +62,12 @@ SPREFIX = $(subst /,$(SEP),$(PREFIX))
 IBINDIR = $(SPREFIX)$(SEP)bin
 ILIBDIR = $(SPREFIX)$(SEP)lib
 ISHAREDIR = $(SPREFIX)$(SEP)share
-IDATADIR = $(ISHAREDIR)$(SEP)chicken
+IDATADIR = $(ISHAREDIR)$(SEP)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 ITOPMANDIR = $(ISHAREDIR)$(SEP)man
 IMANDIR = $(ITOPMANDIR)$(SEP)man1
-IINCDIR = $(SPREFIX)$(SEP)include
+IINCDIR = $(SPREFIX)$(SEP)include$(SEP)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 IDOCDIR = $(IDATADIR)$(SEP)doc
-ICHICKENLIBDIR = $(ILIBDIR)$(SEP)chicken
+ICHICKENLIBDIR = $(ILIBDIR)$(SEP)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)
 IEGGDIR = $(ICHICKENLIBDIR)$(SEP)$(BINARYVERSION)
 else
 SPREFIX = $(PREFIX)
@@ -210,14 +210,14 @@ ASSEMBLER_OUTPUT_OPTION ?= -o
 ASSEMBLER_OUTPUT ?= $(ASSEMBLER_OUTPUT_OPTION) $@
 ASSEMBLER_COMPILE_OPTION ?= -c
 ifdef STATICBUILD
-PRIMARY_LIBCHICKEN ?= libchicken$(A)
+PRIMARY_LIBCHICKEN ?= lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)
 else
 ifeq ($(PLATFORM),cygwin)
-PRIMARY_LIBCHICKEN = cygchicken-0.dll
-LIBCHICKEN_SO_FILE = cygchicken-0.dll
+PRIMARY_LIBCHICKEN = cyg$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)-0.dll
+LIBCHICKEN_SO_FILE = cyg$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)-0.dll
 else
-PRIMARY_LIBCHICKEN ?= libchicken$(SO)
-LIBCHICKEN_SO_FILE ?= libchicken$(SO)
+PRIMARY_LIBCHICKEN ?= lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO)
+LIBCHICKEN_SO_FILE ?= lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO)
 endif
 endif
 LIBCHICKEN_SO_LIBRARIES ?= $(LIBRARIES)
@@ -308,7 +308,7 @@ CHICKEN_STATIC_EXECUTABLE = $(CHICKEN_PROGRAM)$(EXE)
 CSI_STATIC_EXECUTABLE = $(CSI_PROGRAM)$(EXE)
 CHICKEN_SHARED_EXECUTABLE = $(CHICKEN_PROGRAM)-shared$(EXE)
 CSI_SHARED_EXECUTABLE = $(CSI_PROGRAM)-shared$(EXE)
-TARGETLIBS ?= libchicken$(A)
+TARGETLIBS ?= lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)
 TARGETS += $(TARGETLIBS) $(CHICKEN_STATIC_EXECUTABLE) \
 	$(CSI_STATIC_EXECUTABLE) $(CHICKEN_PROFILE_PROGRAM)$(EXE) \
 	$(CSC_PROGRAM)$(EXE) \
@@ -318,7 +318,7 @@ CHICKEN_STATIC_EXECUTABLE = $(CHICKEN_PROGRAM)-static$(EXE)
 CSI_STATIC_EXECUTABLE = $(CSI_PROGRAM)-static$(EXE)
 CHICKEN_SHARED_EXECUTABLE = $(CHICKEN_PROGRAM)$(EXE)
 CSI_SHARED_EXECUTABLE = $(CSI_PROGRAM)$(EXE)
-TARGETLIBS ?= libchicken$(A) $(LIBCHICKEN_SO_FILE)
+TARGETLIBS ?= lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $(LIBCHICKEN_SO_FILE)
 TARGETS += $(TARGETLIBS) $(CHICKEN_SHARED_EXECUTABLE) \
 	$(CSI_SHARED_EXECUTABLE) $(CHICKEN_PROFILE_PROGRAM)$(EXE) \
 	$(CSC_PROGRAM)$(EXE) $(CHICKEN_INSTALL_PROGRAM)$(EXE) $(CHICKEN_UNINSTALL_PROGRAM)$(EXE) \
@@ -380,6 +380,9 @@ endif
 	echo "#ifndef C_INSTALL_LIB_HOME" >>$@
 	echo "# define C_INSTALL_LIB_HOME \"$(LIBDIR)\"" >>$@
 	echo "#endif" >>$@
+	echo "#ifndef C_INSTALL_LIB_NAME" >>$@
+	echo "# define C_INSTALL_LIB_NAME \"$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX))\"" >>$@
+	echo "#endif" >>$@
 	echo "#ifndef C_INSTALL_STATIC_LIB_HOME" >>$@
 	echo "# define C_INSTALL_STATIC_LIB_HOME \"$(LIBDIR)\"" >>$@
 	echo "#endif" >>$@
@@ -437,6 +440,9 @@ endif
 	echo "#ifndef C_TARGET_LIB_HOME" >>$@
 	echo "# define C_TARGET_LIB_HOME \"$(TARGET_PREFIX)/lib\"" >>$@
 	echo "#endif" >>$@
+	echo "#ifndef C_TARGET_LIB_NAME" >>$@
+	echo "# define C_TARGET_LIB_NAME \"$(INSTALL_LIB_NAME)\"" >>$@
+	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_RUN_LIB_HOME" >>$@
 	echo "# define C_TARGET_RUN_LIB_HOME \"$(TARGET_RUN_PREFIX)/lib\"" >>$@
 	echo "#endif" >>$@
@@ -444,7 +450,7 @@ endif
 	echo "# define C_TARGET_SHARE_HOME \"$(TARGET_PREFIX)/share\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_INCLUDE_HOME" >>$@
-	echo "# define C_TARGET_INCLUDE_HOME \"$(TARGET_PREFIX)/include\"" >>$@
+	echo "# define C_TARGET_INCLUDE_HOME \"$(TARGET_PREFIX)/include/$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)\"" >>$@
 	echo "#endif" >>$@
 	echo "#ifndef C_TARGET_STATIC_LIB_HOME" >>$@
 	echo "# define C_TARGET_STATIC_LIB_HOME \"$(TARGET_PREFIX)/lib\"" >>$@
diff --git a/rules.make b/rules.make
index a44b750f..69dc90c6 100644
--- a/rules.make
+++ b/rules.make
@@ -220,14 +220,14 @@ $(foreach obj, $(ALWAYS_STATIC_UTILITY_PROGRAM_OBJECTS_1),\
 
 libs: $(TARGETLIBS)
 
-libchicken$(SO): $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
+lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO): $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
 	$(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_LIBRARY_OPTIONS) $(LIBCHICKEN_SO_LINKER_OPTIONS) \
 	  $(LINKER_OUTPUT) $^ $(LIBCHICKEN_SO_LIBRARIES)
 ifdef USES_SONAME
 	ln -sf $(LIBCHICKEN_SO_FILE) $(LIBCHICKEN_SO_FILE).$(BINARYVERSION)
 endif
 
-cygchicken-0.dll: $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
+cyg$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)-0.dll: $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
 	gcc -shared -o $(LIBCHICKEN_SO_FILE) -Wl,--dll -Wl,--add-stdcall-alias \
 	    -Wl,--enable-stdcall-fixup -Wl,--warn-unresolved-symbols \
 	    -Wl,--dll-search-prefix=cyg -Wl,--allow-multiple-definition \
@@ -237,21 +237,21 @@ cygchicken-0.dll: $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT)
 	    -Wl,--whole-archive $(LIBCHICKEN_SHARED_OBJECTS) $(APPLY_HACK_OBJECT) \
 	    -Wl,--no-whole-archive $(LIBCHICKEN_SO_LIBRARIES)
 
-libchicken$(A): $(APPLY_HACK_OBJECT) $(LIBCHICKEN_STATIC_OBJECTS)
+lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A): $(APPLY_HACK_OBJECT) $(LIBCHICKEN_STATIC_OBJECTS)
 	$(LIBRARIAN) $(LIBRARIAN_OPTIONS) $(LIBRARIAN_OUTPUT) $^
 
 # import libraries and extensions
 
 %.so: %.o
 	$(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $^ $(LINKER_OUTPUT_OPTION) $@ \
-	  $(LINKER_LIBRARY_PREFIX)chicken$(LINKER_LIBRARY_SUFFIX) \
+	  $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) \
 	  $(LIBRARIES)
 
 # executables
 
 $(CHICKEN_SHARED_EXECUTABLE): $(COMPILER_OBJECTS) $(PRIMARY_LIBCHICKEN)
 	$(LINKER) $(LINKER_OPTIONS) $(LINKER_EXECUTABLE_OPTIONS) $(COMPILER_OBJECTS) $(LINKER_OUTPUT) \
-          $(LINKER_LIBRARY_PREFIX)chicken$(LINKER_LIBRARY_SUFFIX) $(LINKER_LINK_SHARED_PROGRAM_OPTIONS) $(LIBRARIES)
+          $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) $(LINKER_LINK_SHARED_PROGRAM_OPTIONS) $(LIBRARIES)
 
 define declare-program-from-object
 $(1)-RC_FILE = $(if $(and $(RC_COMPILER),$(3)),$(2).rc$(O))
@@ -259,7 +259,7 @@ $(1)-RC_FILE = $(if $(and $(RC_COMPILER),$(3)),$(2).rc$(O))
 $(1): $(2)$(O) $$(PRIMARY_LIBCHICKEN) $$($(1)-RC_FILE)
 	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_EXECUTABLE_OPTIONS) $$< \
           $$($(1)-RC_FILE) $$(LINKER_OUTPUT) \
-          $$(LINKER_LIBRARY_PREFIX)chicken$$(LINKER_LIBRARY_SUFFIX) \
+          $$(LINKER_LIBRARY_PREFIX)$$(PROGRAM_PREFIX)chicken$$(PROGRAM_SUFFIX)$$(LINKER_LIBRARY_SUFFIX) \
           $$(LINKER_LINK_SHARED_PROGRAM_OPTIONS) $$(LIBRARIES)
 endef
 
@@ -274,12 +274,12 @@ $(eval $(call declare-program-from-object,$(CSC_PROGRAM)$(EXE),csc))
 
 # static executables
 
-$(CHICKEN_STATIC_EXECUTABLE): $(COMPILER_STATIC_OBJECTS) libchicken$(A)
-	$(LINKER) $(LINKER_OPTIONS) $(LINKER_STATIC_OPTIONS) $(COMPILER_STATIC_OBJECTS) $(LINKER_OUTPUT) libchicken$(A) $(LIBRARIES)
+$(CHICKEN_STATIC_EXECUTABLE): $(COMPILER_STATIC_OBJECTS) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)
+	$(LINKER) $(LINKER_OPTIONS) $(LINKER_STATIC_OPTIONS) $(COMPILER_STATIC_OBJECTS) $(LINKER_OUTPUT) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $(LIBRARIES)
 
 define declare-static-program-from-object
-$(1): $(2)$(O) libchicken$(A)
-	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_STATIC_OPTIONS) $$< $$(LINKER_OUTPUT) libchicken$(A) $$(LIBRARIES)
+$(1): $(2)$(O) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)
+	$$(LINKER) $$(LINKER_OPTIONS) $$(LINKER_STATIC_OPTIONS) $$< $$(LINKER_OUTPUT) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) $$(LIBRARIES)
 endef
 
 $(eval $(call declare-program-from-object,$(CSI_STATIC_EXECUTABLE),csi))
@@ -309,7 +309,7 @@ else
 endif
 ifdef USES_SONAME
 ifeq ($(DESTDIR),)
-	cd "$(DESTDIR)$(ILIBDIR)" && ln -sf $(LIBCHICKEN_SO_FILE).$(BINARYVERSION) libchicken$(SO)
+	cd "$(DESTDIR)$(ILIBDIR)" && ln -sf $(LIBCHICKEN_SO_FILE).$(BINARYVERSION) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO)
 endif
 endif
 endif
@@ -325,7 +325,7 @@ install-dev: install-libs
 	$(MAKEDIR_COMMAND) $(MAKEDIR_COMMAND_OPTIONS) "$(DESTDIR)$(IEGGDIR)"
 	$(MAKEDIR_COMMAND) $(MAKEDIR_COMMAND_OPTIONS) "$(DESTDIR)$(IINCDIR)"
 	$(MAKEDIR_COMMAND) $(MAKEDIR_COMMAND_OPTIONS) "$(DESTDIR)$(IDATADIR)"
-	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_STATIC_LIBRARY_OPTIONS) libchicken$(A) "$(DESTDIR)$(ILIBDIR)"
+	$(INSTALL_PROGRAM) $(INSTALL_PROGRAM_STATIC_LIBRARY_OPTIONS) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) "$(DESTDIR)$(ILIBDIR)"
 ifneq ($(POSTINSTALL_STATIC_LIBRARY),true)
 	$(POSTINSTALL_STATIC_LIBRARY) $(POSTINSTALL_STATIC_LIBRARY_FLAGS) "$(ILIBDIR)$(SEP)libchicken$(A)"
 endif
@@ -435,17 +435,17 @@ uninstall:
 
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_RECURSIVE_OPTIONS) "$(DESTDIR)$(IEGGDIR)"
 
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)libchicken$(A)"
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)libchicken$(SO)"
+	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A)"
+	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO)"
 ifdef USES_SONAME
-	-$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)libchicken$(SO).$(BINARYVERSION)"
+	-$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO).$(BINARYVERSION)"
 endif
 ifdef WINDOWS
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)libchicken$(SO)"
+	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO)"
 	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(ILIBDIR)$(SEP)$(LIBCHICKEN_IMPORT_LIBRARY)"
 endif
 ifeq ($(PLATFORM),cygwin)
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)cygchicken*"
+	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) "$(DESTDIR)$(IBINDIR)$(SEP)cyg$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)*"
 endif
 
 	$(foreach obj,$(MANPAGES),\
@@ -586,18 +586,19 @@ html:
 .PHONY: clean distclean spotless confclean testclean
 
 clean:
-	-$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) chicken$(EXE) csi$(EXE) csc$(EXE) \
+	-$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) $(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(EXE) $(PROGRAM_PREFIX)csi$(PROGRAM_SUFFIX)$(EXE) $(PROGRAM_PREFIX)csc$(PROGRAM_SUFFIX)$(EXE) \
 	  $(CHICKEN_PROFILE_PROGRAM)$(EXE) \
 	  $(CHICKEN_INSTALL_PROGRAM)$(EXE) \
 	  $(CHICKEN_UNINSTALL_PROGRAM)$(EXE) \
 	  $(CHICKEN_STATUS_PROGRAM)$(EXE) \
 	  $(CHICKEN_BUG_PROGRAM)$(EXE) *$(O) \
 	  $(LIBCHICKEN_SO_FILE) \
-	  libchicken$(A) libchicken$(SO) $(PROGRAM_IMPORT_LIBRARIES) \
+	  lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A) \
+	  lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(SO) $(PROGRAM_IMPORT_LIBRARIES) \
 	  $(IMPORT_LIBRARIES:=.import.so) $(LIBCHICKEN_IMPORT_LIBRARY) \
 	  $(SETUP_API_OBJECTS_1:=.so) $(SETUP_API_OBJECTS_1:=.import.so)
 ifdef USES_SONAME
-	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) libchicken.so.$(BINARYVERSION)
+	$(REMOVE_COMMAND) $(REMOVE_COMMAND_OPTIONS) lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).so.$(BINARYVERSION)
 endif
 
 confclean:
Trap