diff --git a/Modules/Platform/Haiku.cmake b/Modules/Platform/Haiku.cmake
index 84ded8086a2b3b2ac885b7b1701dfeeb992556ed..6676f24b7054f12f1feeb560086ac4ac2eed2fb3 100644
--- a/Modules/Platform/Haiku.cmake
+++ b/Modules/Platform/Haiku.cmake
@@ -19,3 +19,8 @@ LIST(APPEND CMAKE_SYSTEM_PROGRAM_PATH /boot/common/bin)
 LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES /boot/common/lib)
 LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH /boot/develop/headers/3rdparty)
 LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH /boot/develop/lib/x86)
+
+IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+  SET(CMAKE_INSTALL_PREFIX "/boot/common" CACHE PATH
+    "Install path prefix, prepended onto install directories." FORCE)
+ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx
index e2961dc317c5ec1dddb3ad2200e12cee20c7d4b1..7c8405e9c9b0b928bc7fc643fddd287997f62fc1 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -25,6 +25,10 @@
 #include <cmsys/Glob.hxx>
 #include <memory> // auto_ptr
 
+#if defined(__HAIKU__)
+#include <StorageKit.h>
+#endif
+
 //----------------------------------------------------------------------
 cmCPackGenerator::cmCPackGenerator()
 {
@@ -1020,6 +1024,16 @@ const char* cmCPackGenerator::GetInstallPath()
   this->InstallPath += this->GetOption("CPACK_PACKAGE_NAME");
   this->InstallPath += "-";
   this->InstallPath += this->GetOption("CPACK_PACKAGE_VERSION");
+#elif defined(__HAIKU__)
+  BPath dir;
+  if (find_directory(B_COMMON_DIRECTORY, &dir) == B_OK)
+    {
+    this->InstallPath = dir.Path();
+    }
+  else
+    {
+    this->InstallPath = "/boot/common";
+    }
 #else
   this->InstallPath = "/usr/local/";
 #endif
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 1cdcafc70334ccca120ac0cc856ce358a293dfbb..ee5595753309740ffd426d04bbe6ff7c13e2dc7c 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -36,6 +36,10 @@
 
 #include <assert.h>
 
+#if defined(__HAIKU__)
+#include <StorageKit.h>
+#endif
+
 cmLocalGenerator::cmLocalGenerator()
 {
   this->Makefile = 0; // moved to after set on global
@@ -357,6 +361,19 @@ void cmLocalGenerator::GenerateInstallRules()
       }
     prefix = prefix_win32.c_str();
     }
+#elif defined(__HAIKU__)
+  if (!prefix)
+    {
+    BPath dir;
+    if (find_directory(B_COMMON_DIRECTORY, &dir) == B_OK)
+      {
+      prefix = dir.Path();
+      }
+    else
+      {
+      prefix = "/boot/common";
+      }
+    }
 #else
   if (!prefix)
     {
diff --git a/bootstrap b/bootstrap
index 3688983d6cd5c51718ee38c3fb3de791bcb78a29..b6d100139014a042f0669e3c6d7d67f55ba88401 100755
--- a/bootstrap
+++ b/bootstrap
@@ -131,6 +131,8 @@ if ${cmake_system_mingw}; then
   else
     cmake_default_prefix="c:/Program Files/CMake"
   fi
+elif ${cmake_system_haiku}; then
+  cmake_default_prefix=`/bin/finddir B_COMMON_DIRECTORY`
 else
   cmake_default_prefix="/usr/local"
 fi