ecere/gui: (#992) Fix for coming back from fullscreen on Cinnamon
[sdk] / Makefile
index 4017111..07cbc5e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,24 +1,51 @@
-.PHONY: all clean realclean distclean emptyoutput prepinstall actualinstall install copyonlyinstall uninstall troubleshoot outputdirs bootstrap deps ecere ecerecom ecerevanilla ear compiler prepbinaries epj2make ide documentor eda prepcodeguard codeguard
+.PHONY: all clean realclean distclean emptyoutput prepinstall actualinstall install copyonlyinstall uninstall troubleshoot outputdirs bootstrap deps ecere ecerecom ecerevanilla ear compiler prepbinaries epj2make ide documentor eda prepcodeguard codeguard fixprecompile
+ifneq "$V" "1"
 .SILENT:
+endif
+
+include crossplatform.mk
+include default.cf
 
-include include.mk
+ifdef BSD_HOST
+INSTALL_FLAGS :=
+CPFLAGS := -pRf
+else
+INSTALL_FLAGS := -D
+CPFLAGS := -dpRf
+endif
+
+XBOOT := $(if $(CROSS_TARGET),GCC_PREFIX= TARGET_PLATFORM=$(HOST_PLATFORM) PLATFORM=$(HOST_PLATFORM),)
 
 LIBVER := .0.44
 
-ifdef WINDOWS
+ifdef WINDOWS_HOST
+HOST_SOV := $(HOST_SO)
+else
+HOST_SOV := $(HOST_SO)$(LIBVER)
+endif
+
+ifdef WINDOWS_TARGET
 
 SOV := $(SO)
 
 ifndef DESTDIR
 
-ifdef ProgramFiles(x86)
-export DESTDIR=${ProgramFiles(x86)}/Ecere SDK
-else
-ifdef ProgramFiles
-export DESTDIR=$(ProgramFiles)/Ecere SDK
+ifeq "$(TARGET_ARCH)" "x86_64"
+   ifneq "$(wildcard $(SystemDrive)/Program\ Files )" ""
+      export DESTDIR=$(SystemDrive)/Program Files/Ecere SDK
+   else
+      export DESTDIR=$(SystemDrive)/Ecere SDK
+   endif
 else
-export DESTDIR=$(SystemDrive)/Ecere SDK
-endif
+   ifdef ProgramFiles(x86)
+      export DESTDIR=${ProgramFiles(x86)}/Ecere SDK
+   else
+      ifdef ProgramFiles
+         export DESTDIR=$(ProgramFiles)/Ecere SDK
+      else
+         export DESTDIR=$(SystemDrive)/Ecere SDK
+      endif
+   endif
 endif
 
 endif # DESTDIR
@@ -36,10 +63,12 @@ endif
 ifndef LIBDIR
 export LIBDIR=$(BINDIR)
 endif
+export DESTLIBDIR=$(LIBDIR)
 
 ifndef SLIBDIR
 export SLIBDIR=$(DESTDIR)$(prefix)/lib
 endif
+export DESTSLIBDIR=$(SLIBDIR)
 
 ifndef SAMPLESDIR
 export SAMPLESDIR=$(DESTDIR)$(prefix)/samples
@@ -50,9 +79,14 @@ export EXTRASDIR=$(DESTDIR)$(prefix)/extras
 endif
 
 
-else # WINDOWS
+else # WINDOWS_TARGET
 
+ifdef OSX_TARGET
+# TODO: OSX soname
+SOV := $(SO)
+else
 SOV := $(SO)$(LIBVER)
+endif
 
 ifndef DESTDIR
 export DESTDIR=
@@ -74,22 +108,31 @@ ifndef BINDIR
 export BINDIR=$(DESTDIR)$(prefix)/bin
 endif
 
-HOSTTYPE := $(shell uname -m)
-
-ifndef LIBDIR
-ifeq "$(HOSTTYPE)" "x86_64"
-export LIBDIR=$(DESTDIR)$(prefix)/lib32
+ifdef LIBDIR
+ export PREFIXLIBDIR=$(LIBDIR)
 else
-export LIBDIR=$(DESTDIR)$(prefix)/lib
-endif
+ export PREFIXLIBDIR=$(prefix)/lib/$(TARGET_ARCH)
+
+ ifeq "$(wildcard $(prefix)/lib/$(TARGET_ARCH) )" ""
+  export PREFIXLIBDIR=$(prefix)/lib
+
+  ifeq "$(TARGET_ARCH)" "i386-linux-gnu"
+   ifneq "$(wildcard $(prefix)/lib32 )" ""
+    export PREFIXLIBDIR=$(prefix)/lib32
+   endif
+  endif
+
+ endif
 endif
 
-ifndef SLIBDIR
-ifeq "$(HOSTTYPE)" "x86_64"
-export SLIBDIR=$(DESTDIR)$(prefix)/lib32
+export CPPFLAGS
+CPPFLAGS += -DDEB_HOST_MULTIARCH=\"$(call escspace,$(PREFIXLIBDIR))\"
+
+DESTLIBDIR := $(DESTDIR)$(PREFIXLIBDIR)
+ifdef SLIBDIR
+DESTSLIBDIR := $(DESTDIR)$(SLIBDIR)
 else
-export SLIBDIR=$(DESTDIR)$(prefix)/lib
-endif
+DESTSLIBDIR := $(DESTLIBDIR)
 endif
 
 ifndef SAMPLESDIR
@@ -104,8 +147,11 @@ endif
 endif
 
 OBJDIR := obj$(OBJALT)/
-OBJBINDIR := $(OBJDIR)$(PLATFORM)/bin/
-OBJLIBDIR := $(OBJDIR)$(PLATFORM)/lib/
+OBJBINDIR := $(OBJDIR)$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/bin/
+OBJLIBDIR := $(OBJDIR)$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/lib/
+XOBJDIR := obj$(OBJALT)/
+XOBJBINDIR := $(OBJDIR)$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/bin/
+XOBJLIBDIR := $(OBJDIR)$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/lib/
 
 all: prepbinaries ide epj2make documentor eda codeguard
        @$(call echo,The Ecere SDK is fully built.)
@@ -114,22 +160,46 @@ outputdirs:
        $(if $(wildcard $(OBJDIR)),,$(call mkdirq,$(OBJDIR)))
        $(if $(wildcard $(OBJBINDIR)),,$(call mkdirq,$(OBJBINDIR)))
        $(if $(wildcard $(OBJLIBDIR)),,$(call mkdirq,$(OBJLIBDIR)))
+ifdef CROSS_TARGET
+       $(if $(wildcard $(XOBJDIR)),,$(call mkdirq,$(XOBJDIR)))
+       $(if $(wildcard $(XOBJBINDIR)),,$(call mkdirq,$(XOBJBINDIR)))
+       $(if $(wildcard $(XOBJLIBDIR)),,$(call mkdirq,$(XOBJLIBDIR)))
+endif
 
 bootstrap: outputdirs
-       cd compiler && $(MAKE) bootstrap
+       cd compiler && $(MAKE) $(XBOOT) bootstrap
 
 deps:
+ifdef CROSS_TARGET
+ifndef LINUX_HOST
+       @$(call echo,Building dependencies (host)...)
+       cd deps && $(MAKE) $(XBOOT)
+endif
+endif
+ifndef LINUX_TARGET
        @$(call echo,Building dependencies...)
        cd deps && $(MAKE)
+endif
 
 ecere: bootstrap deps
+ifdef CROSS_TARGET
+       @$(call echo,Building 2nd stage ecere (host)...)
+else
+       @$(call echo,Building 2nd stage ecere...)
+endif
+       cd ecere && $(MAKE) nores $(XBOOT)
+       cd ear && $(MAKE) nores $(XBOOT)
+       cd ecere && $(MAKE) cleaneceretarget
+ifdef CROSS_TARGET
        @$(call echo,Building 2nd stage ecere...)
-       cd ecere && $(MAKE) nores
-       cd ear && $(MAKE) nores
-       cd ecere && $(MAKE) cleantarget
+endif
        cd ecere && $(MAKE)
 
 ecerecom: bootstrap
+ifdef CROSS_TARGET
+       @$(call echo,Building eC Core Runtime (host)...)
+       cd ecere && $(MAKE) -f Makefile.ecereCOM $(XBOOT)
+endif
        @$(call echo,Building eC Core Runtime...)
        cd ecere && $(MAKE) -f Makefile.ecereCOM
 
@@ -142,21 +212,28 @@ ear: ecere ecerevanilla
        cd ear && cd cmd && $(MAKE) cleantarget
        cd ear && $(MAKE)
 
+fixprecompile:
+       cd compiler && $(MAKE) fixprecompile
+
 compiler: ecere ear
+ifdef CROSS_TARGET
+       @$(call echo,Building 2nd stage compiler (host))
+       cd compiler && $(MAKE) $(XBOOT)
+endif
        @$(call echo,Building 2nd stage compiler)
        cd compiler && $(MAKE)
 
 prepbinaries: compiler ecerecom
        @$(call echo,Enabling 2nd stage binaries...)
-ifdef WINDOWS
-       $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJBINDIR))
-       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJBINDIR))
-       $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJBINDIR))
-endif
-ifdef LINUX
-       $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJLIBDIR))
-       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
-       $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJLIBDIR))
+ifdef WINDOWS_TARGET
+       $(call cpq,ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SOV),$(OBJBINDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SOV),$(OBJBINDIR))
+       $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SOV),$(OBJBINDIR))
+endif
+ifdef LINUX_TARGET
+       $(call cpq,ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SOV),$(OBJLIBDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
+       $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SOV),$(OBJLIBDIR))
        ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO).0
        ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO).0
        ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO).0
@@ -164,17 +241,49 @@ ifdef LINUX
        ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO)
        ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO)
 endif
-ifndef WINDOWS
-ifndef LINUX
-       $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJLIBDIR))
-       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
-       $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJLIBDIR))
+ifndef WINDOWS_TARGET
+ifndef LINUX_TARGET
+       $(call cpq,ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SO),$(OBJLIBDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
+       $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SO),$(OBJLIBDIR))
+endif
+endif
+       $(call cpq,ear/cmd/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ear$(E),$(OBJBINDIR))
+       $(call cpq,compiler/ecc/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecc$(E),$(OBJBINDIR))
+       $(call cpq,compiler/ecp/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecp$(E),$(OBJBINDIR))
+       $(call cpq,compiler/ecs/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecs$(E),$(OBJBINDIR))
+
+ifdef CROSS_TARGET
+
+ifdef WINDOWS_HOST
+       $(call cpq,ecere/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ecere$(HOST_SOV),$(XOBJBINDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ecereCOM$(HOST_SOV),$(XOBJBINDIR))
+       $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ec$(HOST_SOV),$(XOBJBINDIR))
+endif
+ifdef WINDOWS_HOST
+       $(call cpq,ecere/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ecere$(HOST_SOV),$(XOBJLIBDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ecereCOM$(HOST_SOV),$(XOBJLIBDIR))
+       $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ec$(HOST_SOV),$(XOBJLIBDIR))
+       ln -sf $(HOST_LP)ecere$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecere$(HOST_SO).0
+       ln -sf $(HOST_LP)ecereCOM$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecereCOM$(HOST_SO).0
+       ln -sf $(HOST_LP)ec$(HOST_SOV) $(XOBJLIBDIR)$(LP)ec$(HOST_SO).0
+       ln -sf $(HOST_LP)ecere$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecere$(HOST_SO)
+       ln -sf $(HOST_LP)ecereCOM$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecereCOM$(HOST_SO)
+       ln -sf $(HOST_LP)ec$(HOST_SOV) $(XOBJLIBDIR)$(LP)ec$(HOST_SO)
+endif
+ifndef WINDOWS_HOST
+ifndef LINUX_HOST
+       $(call cpq,ecere/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ecere$(HOST_SO),$(XOBJLIBDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ecereCOM$(HOST_SO),$(XOBJLIBDIR))
+       $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(HOST_LP)ec$(HOST_SO),$(XOBJLIBDIR))
 endif
 endif
-       $(call cpq,ear/cmd/obj/release.$(PLATFORM)/ear$(E),$(OBJBINDIR))
-       $(call cpq,compiler/ecc/obj/release.$(PLATFORM)/ecc$(E),$(OBJBINDIR))
-       $(call cpq,compiler/ecp/obj/release.$(PLATFORM)/ecp$(E),$(OBJBINDIR))
-       $(call cpq,compiler/ecs/obj/release.$(PLATFORM)/ecs$(E),$(OBJBINDIR))
+       $(call cpq,ear/cmd/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ear$(HOST_E),$(XOBJBINDIR))
+       $(call cpq,compiler/ecc/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecc$(HOST_E),$(XOBJBINDIR))
+       $(call cpq,compiler/ecp/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecp$(HOST_E),$(XOBJBINDIR))
+       $(call cpq,compiler/ecs/obj/release.$(HOST_PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecs$(HOST_E),$(XOBJBINDIR))
+
+endif
 
 epj2make: prepbinaries
        @$(call echo,Building epj2make...)
@@ -196,18 +305,18 @@ endif
 
 prepcodeguard: eda
 ifdef CodeGuard
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
        $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJBINDIR))
 endif
 
-ifdef LINUX
+ifdef LINUX_TARGET
        $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV),$(OBJLIBDIR))
        ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO).0
        ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO)
 endif
 
-ifndef WINDOWS
-ifndef LINUX
+ifndef WINDOWS_TARGET
+ifndef LINUX_TARGET
        $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJLIBDIR))
 endif
 endif
@@ -227,7 +336,7 @@ emptyoutput: outputdirs
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO))
 endif
-ifdef LINUX
+ifdef LINUX_TARGET
        $(call rmq,$(SODESTDIR)$(LP)ecere$(SO).0)
        $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SO).0)
        $(call rmq,$(SODESTDIR)$(LP)ec$(SO).0)
@@ -257,7 +366,9 @@ ifdef EDASQLiteCipher
 endif
 
 clean: emptyoutput
+ifndef LINUX_TARGET
        cd deps && $(MAKE) clean
+endif
        cd ecere && $(MAKE) clean
        cd compiler && $(MAKE) clean
        cd ear && $(MAKE) clean
@@ -270,8 +381,10 @@ endif
        cd eda && $(MAKE) clean
        @$(call echo,Done.)
 
-realclean:
+realclean: outputdirs
+ifndef LINUX_TARGET
        cd deps && $(MAKE) realclean
+endif
        cd ecere && $(MAKE) realclean
        cd compiler && $(MAKE) realclean
        cd ear && $(MAKE) realclean
@@ -285,8 +398,10 @@ endif
        $(call rmrq,obj/$(PLATFORM)/)
        @$(call echo,Done.)
 
-distclean:
+distclean: outputdirs
+ifndef LINUX_TARGET
        cd deps && $(MAKE) distclean
+endif
        cd ecere && $(MAKE) distclean
        cd compiler && $(MAKE) distclean
        cd ear && $(MAKE) distclean
@@ -303,26 +418,26 @@ endif
 DOC = doc/ecere.eCdoc doc/ecereCOM.eCdoc doc/EDA.eCdoc
 
 BINARIES = \
-       ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV) \
-       ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV) \
-       ecere/obj/vanilla.$(PLATFORM)/libecereVanilla$(A) \
-       compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV) \
-       compiler/ecp/obj/release.$(PLATFORM)/ecp$(E) \
-       compiler/ecc/obj/release.$(PLATFORM)/ecc$(E) \
-       compiler/ecs/obj/release.$(PLATFORM)/ecs$(E) \
-       ear/cmd/obj/release.$(PLATFORM)/ear$(E) \
-       epj2make/obj/release.$(PLATFORM)/epj2make$(E) \
-       documentor/obj/release.$(PLATFORM)/documentor$(E) \
-       ide/obj/release.$(PLATFORM)/ide$(E) \
-       eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV) \
-       eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SOV)
+       ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SOV) \
+       ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SOV) \
+       ecere/obj/vanilla.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/libecereVanilla$(A) \
+       compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SOV) \
+       compiler/ecp/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecp$(E) \
+       compiler/ecc/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecc$(E) \
+       compiler/ecs/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecs$(E) \
+       ear/cmd/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ear$(E) \
+       epj2make/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/epj2make$(E) \
+       documentor/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/documentor$(E) \
+       ide/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ide$(E) \
+       eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SOV) \
+       eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SOV)
 
 ifdef CodeGuard
-BINARIES += codeGuard/obj/release.$(PLATFORM)/CodeGuard$(E)
+BINARIES += codeGuard/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/CodeGuard$(E)
 endif
 
 ifdef EDASQLiteCipher
-BINARIES += eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SOV)
+BINARIES += eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SOV)
 endif
 
 # Making sure everything is in $(OBJBINDIR) and $(OBJLIBDIR)
@@ -331,25 +446,25 @@ endif
 # Binaries (always in $(OBJBINDIR)) and Static Libraries (always in $(OBJLIBDIR))
 prepinstall: $(DOC) $(BINARIES) outputdirs
 
-ifdef WINDOWS
-       $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJBINDIR))
-       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJBINDIR))
-       $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJBINDIR))
-       $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJBINDIR))
-       $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SO),$(OBJBINDIR))
+ifdef WINDOWS_TARGET
+       $(call cpq,ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SO),$(OBJBINDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SO),$(OBJBINDIR))
+       $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SO),$(OBJBINDIR))
+       $(call cpq,eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SO),$(OBJBINDIR))
+       $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SO),$(OBJBINDIR))
 ifdef EDASQLiteCipher
-       $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SO),$(OBJBINDIR))
+       $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SO),$(OBJBINDIR))
 endif
 endif
 
-ifdef LINUX
-       $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJLIBDIR))
-       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
-       $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJLIBDIR))
-       $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV),$(OBJLIBDIR))
-       $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SOV),$(OBJLIBDIR))
+ifdef LINUX_TARGET
+       $(call cpq,ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SOV),$(OBJLIBDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
+       $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SOV),$(OBJLIBDIR))
+       $(call cpq,eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SOV),$(OBJLIBDIR))
+       $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SOV),$(OBJLIBDIR))
 ifdef EDASQLiteCipher
-       $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SOV),$(OBJLIBDIR))
+       $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SOV),$(OBJLIBDIR))
 endif
        ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO).0
        ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO).0
@@ -369,30 +484,30 @@ ifdef EDASQLiteCipher
 endif
 endif
 
-ifndef WINDOWS
-ifndef LINUX
-       $(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJLIBDIR))
-       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
-       $(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJLIBDIR))
-       $(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJLIBDIR))
-       $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)/$(LP)EDASQLite$(SO),$(OBJLIBDIR))
+ifndef WINDOWS_TARGET
+ifndef LINUX_TARGET
+       $(call cpq,ecere/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecere$(SO),$(OBJLIBDIR))
+       $(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
+       $(call cpq,compiler/libec/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)ec$(SO),$(OBJLIBDIR))
+       $(call cpq,eda/libeda/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDA$(SO),$(OBJLIBDIR))
+       $(call cpq,eda/drivers/sqlite/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLite$(SO),$(OBJLIBDIR))
 ifdef EDASQLiteCipher
-       $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)/$(LP)EDASQLiteCipher$(SO),$(OBJLIBDIR))
+       $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SO),$(OBJLIBDIR))
 endif
 endif
 endif
 
-       $(call cpq,ide/obj/release.$(PLATFORM)/ide$(E),$(OBJBINDIR))
-       $(call cpq,ear/cmd/obj/release.$(PLATFORM)/ear$(E),$(OBJBINDIR))
-       $(call cpq,compiler/ecc/obj/release.$(PLATFORM)/ecc$(E),$(OBJBINDIR))
-       $(call cpq,compiler/ecp/obj/release.$(PLATFORM)/ecp$(E),$(OBJBINDIR))
-       $(call cpq,compiler/ecs/obj/release.$(PLATFORM)/ecs$(E),$(OBJBINDIR))
-       $(call cpq,epj2make/obj/release.$(PLATFORM)/epj2make$(E),$(OBJBINDIR))
-       $(call cpq,documentor/obj/release.$(PLATFORM)/documentor$(E),$(OBJBINDIR))
+       $(call cpq,ide/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ide$(E),$(OBJBINDIR))
+       $(call cpq,ear/cmd/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ear$(E),$(OBJBINDIR))
+       $(call cpq,compiler/ecc/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecc$(E),$(OBJBINDIR))
+       $(call cpq,compiler/ecp/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecp$(E),$(OBJBINDIR))
+       $(call cpq,compiler/ecs/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ecs$(E),$(OBJBINDIR))
+       $(call cpq,epj2make/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/epj2make$(E),$(OBJBINDIR))
+       $(call cpq,documentor/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/documentor$(E),$(OBJBINDIR))
 ifdef CodeGuard
-       $(call cpq,codeGuard/obj/release.$(PLATFORM)/CodeGuard$(E),$(OBJBINDIR))
+       $(call cpq,codeGuard/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/CodeGuard$(E),$(OBJBINDIR))
 endif
-       $(call cpq,ecere/obj/vanilla.$(PLATFORM)/libecereVanilla$(A),$(OBJLIBDIR))
+       $(call cpq,ecere/obj/vanilla.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/libecereVanilla$(A),$(OBJLIBDIR))
 
 #TODO: Samples?
 install: prepinstall actualinstall
@@ -402,17 +517,17 @@ copyonlyinstall: actualinstall
        @$(call echo,The Ecere SDK has been installed. copyonlyinstall.)
 
 actualinstall:
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
        $(call mkdirq,"$(BINDIR)/")
-       $(call mkdirq,"$(SLIBDIR)/")
+       $(call mkdirq,"$(DESTSLIBDIR)/")
        $(call mkdirq,"$(DOCDIR)/")
-       $(call cpq,$(OBJBINDIR)$(LP)ecere$(SO),"$(LIBDIR)/")
-       $(call cpq,$(OBJBINDIR)$(LP)ecereCOM$(SO),"$(LIBDIR)/")
-       $(call cpq,$(OBJBINDIR)$(LP)ec$(SO),"$(LIBDIR)/")
-       $(call cpq,$(OBJBINDIR)$(LP)EDA$(SO),"$(LIBDIR)/")
-       $(call cpq,$(OBJBINDIR)$(LP)EDASQLite$(SO),"$(LIBDIR)/")
+       $(call cpq,$(OBJBINDIR)$(LP)ecere$(SO),"$(DESTLIBDIR)/")
+       $(call cpq,$(OBJBINDIR)$(LP)ecereCOM$(SO),"$(DESTLIBDIR)/")
+       $(call cpq,$(OBJBINDIR)$(LP)ec$(SO),"$(DESTLIBDIR)/")
+       $(call cpq,$(OBJBINDIR)$(LP)EDA$(SO),"$(DESTLIBDIR)/")
+       $(call cpq,$(OBJBINDIR)$(LP)EDASQLite$(SO),"$(DESTLIBDIR)/")
 ifdef EDASQLiteCipher
-       $(call cpq,$(OBJBINDIR)$(LP)EDASQLiteCipher$(SO),"$(LIBDIR)/")
+       $(call cpq,$(OBJBINDIR)$(LP)EDASQLiteCipher$(SO),"$(DESTLIBDIR)/")
 endif
        $(call cpq,$(OBJBINDIR)ide$(E),"$(BINDIR)/")
        $(call cpq,$(OBJBINDIR)ear$(E),"$(BINDIR)/")
@@ -424,21 +539,21 @@ endif
 ifdef CodeGuard
        $(call cpq,$(OBJBINDIR)CodeGuard$(E),"$(BINDIR)/")
 endif
-       $(call cpq,$(OBJLIBDIR)libecereVanilla$(A),"$(SLIBDIR)/")
+       $(call cpq,$(OBJLIBDIR)libecereVanilla$(A),"$(DESTSLIBDIR)/")
        $(call cpq,doc/tao.pdf,"$(DOCDIR)/Ecere Tao of Programming [work in progress].pdf") || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
        $(call cpq,doc/ecere.eCdoc,"$(DOCDIR)/")
        $(call cpq,doc/ecereCOM.eCdoc,"$(DOCDIR)/")
        $(call cpq,doc/EDA.eCdoc,"$(DOCDIR)/")
 endif
 
-ifdef OSX 
-       install $(OBJLIBDIR)$(LP)ecere$(SO) $(LIBDIR)/
-       install $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(LIBDIR)/
-       install $(OBJLIBDIR)$(LP)ec$(SO) $(LIBDIR)/
-       install $(OBJLIBDIR)$(LP)EDA$(SO) $(LIBDIR)/
-       install $(OBJLIBDIR)$(LP)EDASQLite$(SO) $(LIBDIR)/
+ifdef OSX_TARGET
+       install $(OBJLIBDIR)$(LP)ecere$(SO) $(DESTLIBDIR)/
+       install $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(DESTLIBDIR)/
+       install $(OBJLIBDIR)$(LP)ec$(SO) $(DESTLIBDIR)/
+       install $(OBJLIBDIR)$(LP)EDA$(SO) $(DESTLIBDIR)/
+       install $(OBJLIBDIR)$(LP)EDASQLite$(SO) $(DESTLIBDIR)/
 ifdef EDASQLiteCipher
-       install $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(LIBDIR)/
+       install $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(DESTLIBDIR)/
 endif
        install $(OBJBINDIR)ide$(E) $(BINDIR)/
        install $(OBJBINDIR)ear$(E) $(BINDIR)/
@@ -450,117 +565,125 @@ endif
 ifdef CodeGuard
        install $(OBJBINDIR)CodeGuard$(E) $(BINDIR)/
 endif
-       install $(OBJLIBDIR)libecereVanilla$(A) $(SLIBDIR)/
+       install $(OBJLIBDIR)libecereVanilla$(A) $(DESTSLIBDIR)/
        install -d $(DOCDIR)/
        install doc/tao.pdf $(DOCDIR)/"Ecere Tao of Programming [work in progress].pdf" >/dev/null 2>&1 || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
        install doc/ecere.eCdoc $(DOCDIR)/
        install doc/ecereCOM.eCdoc $(DOCDIR)/
        install doc/EDA.eCdoc $(DOCDIR)/
-       mkdir -p -m 777 $(SAMPLESDIR)
+       mkdir -p $(MANDIR)/man1
+       cp -pRf share/man/man1/* $(MANDIR)/man1
+       mkdir -p $(SAMPLESDIR)
        cp -pRf samples/* $(SAMPLESDIR)
-       mkdir -p -m 777 $(EXTRASDIR)
+       find $(SAMPLESDIR) -type d -exec chmod 777 {} \;
+       mkdir -p $(EXTRASDIR)
        cp -pRf extras/* $(EXTRASDIR)
-endif
-
-ifndef OSX
-ifndef WINDOWS
-ifdef LINUX
-       install -D $(OBJLIBDIR)$(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SOV)
-       install -D $(OBJLIBDIR)$(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SOV)
-       install -D $(OBJLIBDIR)$(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SOV)
-       install -D $(OBJLIBDIR)$(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SOV)
-       install -D $(OBJLIBDIR)$(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SOV)
+       chmod 777 $(EXTRASDIR)/audio
+endif
+
+ifndef OSX_TARGET
+ifndef WINDOWS_TARGET
+ifdef LINUX_TARGET
+       mkdir -p $(DESTLIBDIR)/ec
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)ecere$(SOV) $(DESTLIBDIR)/$(LP)ecere$(SOV)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)ecereCOM$(SOV) $(DESTLIBDIR)/$(LP)ecereCOM$(SOV)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)ec$(SOV) $(DESTLIBDIR)/ec/$(LP)ec$(SOV)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDA$(SOV) $(DESTLIBDIR)/ec/$(LP)EDA$(SOV)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLite$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLite$(SOV)
 ifdef EDASQLiteCipher
-       install -D $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SOV)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SOV)
 endif
-       ln -sf $(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SO).0
-       ln -sf $(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SO).0
-       ln -sf $(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SO).0
-       ln -sf $(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SO).0
-       ln -sf $(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SO).0
+       ln -sf $(LP)ecere$(SOV) $(DESTLIBDIR)/$(LP)ecere$(SO).0
+       ln -sf $(LP)ecereCOM$(SOV) $(DESTLIBDIR)/$(LP)ecereCOM$(SO).0
+       ln -sf $(LP)ec$(SOV) $(DESTLIBDIR)/ec/$(LP)ec$(SO).0
+       ln -sf $(LP)EDA$(SOV) $(DESTLIBDIR)/ec/$(LP)EDA$(SO).0
+       ln -sf $(LP)EDASQLite$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLite$(SO).0
 ifdef EDASQLiteCipher
-       ln -sf $(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO).0
-endif
-       ln -sf $(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SO)
-       ln -sf $(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SO)
-       ln -sf $(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SO)
-       ln -sf $(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SO)
-       ln -sf $(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SO)
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/lib/ec
-       ln -sf $(LIBDIR)/$(LP)ecere$(SOV) $(prefix)/lib/ec/$(LP)ecere$(SO)
-       ln -sf $(LIBDIR)/$(LP)ecereCOM$(SOV) $(prefix)/lib/ec/$(LP)ecereCOM$(SO)
-       ln -sf $(LIBDIR)/$(LP)ec$(SOV) $(prefix)/lib/ec/$(LP)ec$(SO)
-       ln -sf $(LIBDIR)/$(LP)EDA$(SOV) $(prefix)/lib/ec/$(LP)EDA$(SO)
-       ln -sf $(LIBDIR)/$(LP)EDASQLite$(SOV) $(prefix)/lib/ec/$(LP)EDASQLite$(SO)
+       ln -sf $(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO).0
+endif
+       ln -sf $(LP)ecere$(SOV) $(DESTLIBDIR)/$(LP)ecere$(SO)
+       ln -sf $(LP)ecereCOM$(SOV) $(DESTLIBDIR)/$(LP)ecereCOM$(SO)
+       ln -sf $(LP)ec$(SOV) $(DESTLIBDIR)/ec/$(LP)ec$(SO)
+       ln -sf $(LP)EDA$(SOV) $(DESTLIBDIR)/ec/$(LP)EDA$(SO)
+       ln -sf $(LP)EDASQLite$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLite$(SO)
+       ln -sf ../$(LP)ecere$(SOV) $(DESTLIBDIR)/ec/$(LP)ecere$(SO)
+       ln -sf ../$(LP)ecereCOM$(SOV) $(DESTLIBDIR)/ec/$(LP)ecereCOM$(SO)
 ifdef EDASQLiteCipher
-       ln -sf $(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO)
+       ln -sf $(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO)
+endif
+ifndef BSD_HOST
+       install $(INSTALL_FLAGS) -m 644 share/pixmaps/ecere.png $(DESTDIR)$(prefix)/share/pixmaps/ecere.png
+       install $(INSTALL_FLAGS) -m 644 share/applications/ecere.desktop $(DESTDIR)$(prefix)/share/applications/ecere.desktop
 endif
-       install -D -m 644 share/pixmaps/ecere.png $(DESTDIR)$(prefix)/share/pixmaps/ecere.png
-       install -D -m 644 share/applications/ecere.desktop $(DESTDIR)$(prefix)/share/applications/ecere.desktop
 else
-       install -D $(OBJLIBDIR)$(LP)ecere$(SO) $(LIBDIR)/$(LP)ecere$(SO)
-       install -D $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(LIBDIR)/$(LP)ecereCOM$(SO)
-       install -D $(OBJLIBDIR)$(LP)ec$(SO) $(LIBDIR)/$(LP)ec$(SO)
-       install -D $(OBJLIBDIR)$(LP)EDA$(SO) $(LIBDIR)/$(LP)EDA$(SO)
-       install -D $(OBJLIBDIR)$(LP)EDASQLite$(SO) $(LIBDIR)/$(LP)EDASQLite$(SO)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)ecere$(SO) $(DESTLIBDIR)/$(LP)ecere$(SO)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(DESTLIBDIR)/$(LP)ecereCOM$(SO)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)ec$(SO) $(DESTLIBDIR)/$(LP)ec$(SO)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDA$(SO) $(DESTLIBDIR)/$(LP)EDA$(SO)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLite$(SO) $(DESTLIBDIR)/$(LP)EDASQLite$(SO)
 ifdef EDASQLiteCipher
-       install -D $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO)
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO)
 endif
 endif
-       install -D $(OBJBINDIR)ide$(E) $(BINDIR)/ide$(E)
-       install -D $(OBJBINDIR)ear$(E) $(BINDIR)/ear$(E)
-       install -D $(OBJBINDIR)ecc$(E) $(BINDIR)/ecc$(E)
-       install -D $(OBJBINDIR)ecp$(E) $(BINDIR)/ecp$(E)
-       install -D $(OBJBINDIR)ecs$(E) $(BINDIR)/ecs$(E)
-       install -D $(OBJBINDIR)epj2make$(E) $(BINDIR)/epj2make$(E)
-       install -D $(OBJBINDIR)documentor$(E) $(BINDIR)/documentor$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)ide$(E) $(BINDIR)/ide$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)ear$(E) $(BINDIR)/ear$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)ecc$(E) $(BINDIR)/ecc$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)ecp$(E) $(BINDIR)/ecp$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)ecs$(E) $(BINDIR)/ecs$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)epj2make$(E) $(BINDIR)/epj2make$(E)
+       install $(INSTALL_FLAGS) $(OBJBINDIR)documentor$(E) $(BINDIR)/documentor$(E)
 ifdef CodeGuard
-       install -D $(OBJBINDIR)CodeGuard$(E) $(BINDIR)/CodeGuard$(E)
-endif
-       install -D $(OBJLIBDIR)libecereVanilla$(A) $(SLIBDIR)/libecereVanilla$(A)
-       install -D -m 644 doc/EDA.eCdoc $(DOCDIR)/EDA.eCdoc
-       install -D -m 644 doc/tao.pdf $(DOCDIR)/"Ecere Tao of Programming [work in progress].pdf" >/dev/null 2>&1 || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
-       install -D -m 644 doc/ecere.eCdoc $(DOCDIR)/ecere.eCdoc
-       install -D -m 644 doc/ecereCOM.eCdoc $(DOCDIR)/ecereCOM.eCdoc
-       install -D -m 644 doc/EDA.eCdoc $(DOCDIR)/EDA.eCdoc
-       mkdir -p -m 777 $(MANDIR)/man1
+       install $(INSTALL_FLAGS) $(OBJBINDIR)CodeGuard$(E) $(BINDIR)/CodeGuard$(E)
+endif
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)libecereVanilla$(A) $(DESTSLIBDIR)/libecereVanilla$(A)
+ifdef BSD_HOST
+       install $(INSTALL_FLAGS) -d $(DOCDIR)
+endif
+       install $(INSTALL_FLAGS) -m 644 doc/EDA.eCdoc $(DOCDIR)/EDA.eCdoc
+       install $(INSTALL_FLAGS) -m 644 doc/tao.pdf $(DOCDIR)/"Ecere Tao of Programming [work in progress].pdf" >/dev/null 2>&1 || echo "The Ecere Tao of Programming is available at http://ecere.com/tao.pdf"
+       install $(INSTALL_FLAGS) -m 644 doc/ecere.eCdoc $(DOCDIR)/ecere.eCdoc
+       install $(INSTALL_FLAGS) -m 644 doc/ecereCOM.eCdoc $(DOCDIR)/ecereCOM.eCdoc
+       install $(INSTALL_FLAGS) -m 644 doc/EDA.eCdoc $(DOCDIR)/EDA.eCdoc
+       mkdir -p $(MANDIR)/man1
        cp -pRf share/man/man1/* $(MANDIR)/man1
-       mkdir -p -m 777 $(SAMPLESDIR)
+       mkdir -p $(SAMPLESDIR)
        cp -pRf samples/* $(SAMPLESDIR)
-       mkdir -p -m 777 $(EXTRASDIR)
-       cp -pRf extras/* $(EXTRASDIR)
+       find $(SAMPLESDIR) -type d -exec chmod 777 {} \;
+       mkdir -p $(EXTRASDIR)
+       cp $(CPFLAGS) extras/* $(EXTRASDIR)
+       chmod 777 $(EXTRASDIR)/audio
 ifdef DEBIAN_PACKAGE
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libecere0
-       install -D -m644 NEWS $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
-       gzip -f -9 $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-dev
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libecere0
+       install $(INSTALL_FLAG) -m644 NEWS $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
+       gzip -n -f -9 $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/ecere-dev
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-dev/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-extras
-       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-extras/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-samples
-       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-samples/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-sdk
-       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-sdk/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libec0
-       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libec0/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libecerecom0
-       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecerecom0/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libeda0
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/ecere-extras
+       cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-extras/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/ecere-samples
+       cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-samples/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/ecere-sdk
+       cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-sdk/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libecc0
+       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecc0/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libecerecom0
+       cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecerecom0/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libeda0
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libeda0/
-       mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libedasqlite0
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libedasqlite0
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libedasqlite0/
 endif
 endif
 endif
 
 uninstall:
-       $(call rmq,"$(LIBDIR)/$(LP)ecere$(SO)")
-       $(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SO)")
-       $(call rmq,"$(LIBDIR)/$(LP)ec$(SO)")
-       $(call rmq,"$(LIBDIR)/$(LP)EDA$(SO)")
-       $(call rmq,"$(LIBDIR)/$(LP)EDASQLite$(SO)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ecere$(SO)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ecereCOM$(SO)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ec$(SO)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDA$(SO)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLite$(SO)")
 ifdef EDASQLiteCipher
-       $(call rmq,"$(LIBDIR)/$(LP)EDASQLiteCipher$(SO)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO)")
 endif
        $(call rmq,"$(BINDIR)/ide$(E)")
        $(call rmq,"$(BINDIR)/ear$(E)")
@@ -572,46 +695,58 @@ endif
 ifdef CodeGuard
        $(call rmq,"$(BINDIR)/CodeGuard$(E)")
 endif
-       $(call rmq,"$(SLIBDIR)/libecereVanilla$(A)")
+       $(call rmq,"$(DESTSLIBDIR)/libecereVanilla$(A)")
        $(call rmq,"$(DOCDIR)/Ecere Tao of Programming [work in progress].pdf")
        $(call rmq,"$(DOCDIR)/ecere.eCdoc")
        $(call rmq,"$(DOCDIR)/ecereCOM.eCdoc")
        $(call rmq,"$(DOCDIR)/EDA.eCdoc")
-ifdef LINUX
-       $(call rmq,"$(LIBDIR)/$(LP)ecere$(SO).0")
-       $(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SO).0")
-       $(call rmq,"$(LIBDIR)/$(LP)ec$(SO).0")
-       $(call rmq,"$(LIBDIR)/$(LP)EDA$(SO).0")
-       $(call rmq,"$(LIBDIR)/$(LP)EDASQLite$(SO).0")
+ifdef LINUX_TARGET
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ecere$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ecereCOM$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ec$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDA$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLite$(SO).0")
 ifdef EDASQLiteCipher
-       $(call rmq,"$(LIBDIR)/$(LP)EDASQLiteCipher$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO).0")
 endif
-       $(call rmq,"$(LIBDIR)/$(LP)ecere$(SOV)")
-       $(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SOV)")
-       $(call rmq,"$(LIBDIR)/$(LP)ec$(SOV)")
-       $(call rmq,"$(LIBDIR)/$(LP)EDA$(SOV)")
-       $(call rmq,"$(LIBDIR)/$(LP)EDASQLite$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ecere$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ecereCOM$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)ec$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDA$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLite$(SOV)")
 ifdef EDASQLiteCipher
-       $(call rmq,"$(LIBDIR)/$(LP)EDASQLiteCipher$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SOV)")
 endif
        $(call rmq,"$(DESTDIR)$(prefix)/share/pixmaps/ecere.png")
        $(call rmq,"$(DESTDIR)$(prefix)/share/applications/ecere.desktop")
 endif
        $(call rmdirq,"$(BINDIR)/")
-       $(call rmdirq,"$(LIBDIR)/")
-       $(call rmdirq,"$(SLIBDIR)/")
+       $(call rmdirq,"$(DESTLIBDIR)/")
+       $(call rmdirq,"$(DESTSLIBDIR)/")
        $(call rmdirq,"$(DOCDIR)/")
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
        $(call rmdirq,"$(DESTDIR)/")
 endif
        @$(call echo,The Ecere SDK has been uninstalled.)
 
 troubleshoot:
        @$(call echo,Printing values of some variables.)
+       @$(call echo,HOST_PLATFORM=$(HOST_PLATFORM))
+       @$(call echo,TARGET_PLATFORM=$(TARGET_PLATFORM))
+       @$(call echo,PLATFORM=$(PLATFORM))
+       @$(call echo,LINUX_HOST=$(LINUX_HOST))
+       @$(call echo,LINUX_TARGET=$(LINUX_TARGET))
+       @$(call echo,OSX_HOST=$(OSX_HOST))
+       @$(call echo,OSX_TARGET=$(OSX_TARGET))
+       @$(call echo,WINDOWS_HOST=$(WINDOWS_HOST))
+       @$(call echo,WINDOWS_TARGET=$(WINDOWS_TARGET))
+       @$(call echo,BSD_HOST=$(BSD_HOST))
+       @$(call echo,BSD_TARGET=$(BSD_TARGET))
        @$(call echo,CCACHE=$(CCACHE))
        @$(call echo,CCACHE_COMPILE=$(CCACHE_COMPILE))
        @$(call echo,CCACHE_PREFIX=$(CCACHE_PREFIX))
        @$(call echo,DISTCC=$(DISTCC))
+       @$(call echo,GCC_PREFIX=$(GCC_PREFIX))
        @$(call echo,CC=$(CC))
        @$(call echo,CPP=$(CPP))
        @$(call echo,ECP=$(ECP))
@@ -623,3 +758,11 @@ troubleshoot:
        @$(call echo,AR=$(AR))
        @$(call echo,STRIP=$(STRIP))
        @$(call echo,UPX=$(UPX))
+       @$(call echo,TARGET_ARCH=$(TARGET_ARCH))
+       @$(call echo,DESTDIR=$(DESTDIR))
+       @$(call echo,PREFIXLIBDIR=$(PREFIXLIBDIR))
+       @$(call echo,ARCH=$(ARCH))
+       @$(call echo,ARCH_FLAGS=$(ARCH_FLAGS))
+       @$(call echo,GIT_REPOSITORY=$(GIT_REPOSITORY))
+       @$(call echo,DIR_VER=$(DIR_VER))
+       @$(call echo,REPOSITORY_VER=$(REPOSITORY_VER))