Unstaged changes (WIP)
[sdk] / Makefile
index 8c6c755..56fd5e3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-.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"
+.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 cleantarget pots installer regenbootstrap updatebootstrap update_ecere update_libec update_ecp update_ecc update_ecs ecereaudio
+ifneq "$(V)" "1"
 .SILENT:
 endif
 
@@ -18,6 +18,20 @@ XBOOT := $(if $(CROSS_TARGET),GCC_PREFIX= TARGET_PLATFORM=$(HOST_PLATFORM) PLATF
 
 LIBVER := .0.44
 
+ifndef ECERE_AUDIO
+ECERE_AUDIO := n
+
+ifdef WINDOWS_TARGET
+ECERE_AUDIO := y
+endif
+
+ifdef LINUX_TARGET
+ifndef BSD_TARGET
+ECERE_AUDIO := y
+endif
+endif
+endif
+
 ifdef WINDOWS_HOST
 HOST_SOV := $(HOST_SO)
 else
@@ -126,7 +140,7 @@ else
 endif
 
 export CPPFLAGS
-CPPFLAGS += -DDEB_HOST_MULTIARCH=\"$(PREFIXLIBDIR)\"
+CPPFLAGS += -DDEB_HOST_MULTIARCH=\"$(call escspace,$(PREFIXLIBDIR))\"
 
 DESTLIBDIR := $(DESTDIR)$(PREFIXLIBDIR)
 ifdef SLIBDIR
@@ -153,7 +167,7 @@ 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
+all: prepbinaries ide epj2make documentor eda codeguard ecereaudio
        @$(call echo,The Ecere SDK is fully built.)
 
 outputdirs:
@@ -289,6 +303,12 @@ epj2make: prepbinaries
        @$(call echo,Building epj2make...)
        cd epj2make && $(MAKE)
 
+ecereaudio: prepbinaries
+ifneq "$(ECERE_AUDIO)" "n"
+       @$(call echo,Building EcereAudio...)
+       cd audio && $(MAKE)
+endif
+
 ide: prepbinaries
        @$(call echo,Building IDE...)
        cd ide && $(MAKE)
@@ -323,6 +343,10 @@ endif
 endif
 
 eda: prepbinaries
+ifdef CROSS_TARGET
+       @$(call echo,Building EDA (host))
+       cd eda && $(MAKE) $(XBOOT)
+endif
        @$(call echo,Building EDA...)
        cd eda && $(MAKE)
 
@@ -336,6 +360,9 @@ emptyoutput: outputdirs
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO))
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call rmq,$(SODESTDIR)$(LP)EcereAudio$(SO))
+endif
 ifdef LINUX_TARGET
        $(call rmq,$(SODESTDIR)$(LP)ecere$(SO).0)
        $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SO).0)
@@ -345,6 +372,9 @@ ifdef LINUX_TARGET
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO).0)
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call rmq,$(SODESTDIR)$(LP)EcereAudio$(SO).0)
+endif
        $(call rmq,$(SODESTDIR)$(LP)ecere$(SOV))
        $(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SOV))
        $(call rmq,$(SODESTDIR)$(LP)ec$(SOV))
@@ -353,6 +383,9 @@ endif
 ifdef EDASQLiteCipher
        $(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SOV))
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call rmq,$(SODESTDIR)$(LP)EcereAudio$(SOV))
+endif
 endif  
        $(call rmq,$(OBJBINDIR)ear$(E))
        $(call rmq,$(OBJBINDIR)ecc$(E))
@@ -361,10 +394,38 @@ endif
        $(call rmq,$(OBJBINDIR)epj2make$(E))
        $(call rmq,$(OBJBINDIR)ide$(E))
        $(call rmq,$(OBJBINDIR)documentor$(E))
-ifdef EDASQLiteCipher
+ifdef CodeGuard
        $(call rmq,$(OBJBINDIR)CodeGuard$(E))
 endif
 
+cleantarget:
+       cd compiler && $(MAKE) cleantarget
+       cd documentor && $(MAKE) cleantarget
+       cd ear && $(MAKE) cleantarget
+       cd ecere && $(MAKE) cleantarget
+       cd eda && $(MAKE) cleantarget
+       cd epj2make && $(MAKE) cleantarget
+       cd ide && $(MAKE) cleantarget
+       cd installer && $(MAKE) cleantarget
+ifneq "$(ECERE_AUDIO)" "n"
+       cd audio && $(MAKE) cleantarget
+endif
+
+pots: cleantarget
+       $(MAKE) OUTPUT_POT=1
+       cd installer && $(MAKE) OUTPUT_POT=1 pots
+
+ifdef WINDOWS_TARGET
+installer:
+       $(MAKE) prepinstall ARCH=
+       $(MAKE) prepinstall ARCH=x32
+       @$(call echo,Building Ecere runtime for installer...)
+       cd ecere && @$(MAKE) -f Makefile.installer ARCH=x32
+       @$(call echo,Building Installer for Windows...)
+       cd installer && @$(MAKE) ARCH=x32
+       @$(call echo,The Ecere SDK Windows Installer is fully built.)
+endif
+
 clean: emptyoutput
 ifndef LINUX_TARGET
        cd deps && $(MAKE) clean
@@ -375,6 +436,9 @@ endif
        cd epj2make && $(MAKE) clean
        cd ide && $(MAKE) clean
        cd documentor && $(MAKE) clean
+ifneq "$(ECERE_AUDIO)" "n"
+       cd audio && $(MAKE) clean
+endif
 ifdef CodeGuard
        cd codeGuard && $(MAKE) clean
 endif
@@ -391,6 +455,9 @@ endif
        cd epj2make && $(MAKE) realclean
        cd ide && $(MAKE) realclean
        cd documentor && $(MAKE) realclean
+ifneq "$(ECERE_AUDIO)" "n"
+       cd audio && $(MAKE) realclan
+endif
 ifdef CodeGuard
        cd codeGuard && $(MAKE) realclean
 endif
@@ -408,6 +475,9 @@ endif
        cd epj2make && $(MAKE) distclean
        cd ide && $(MAKE) distclean
        cd documentor && $(MAKE) distclean
+ifneq "$(ECERE_AUDIO)" "n"
+       cd audio && $(MAKE) distclean
+endif
 ifdef CodeGuard
        cd codeGuard && $(MAKE) distclean
 endif
@@ -432,6 +502,10 @@ BINARIES = \
        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)
 
+ifneq "$(ECERE_AUDIO)" "n"
+BINARIES += audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SOV)
+endif
+
 ifdef CodeGuard
 BINARIES += codeGuard/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/CodeGuard$(E)
 endif
@@ -452,6 +526,9 @@ ifdef WINDOWS_TARGET
        $(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))
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call cpq,audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SO),$(OBJBINDIR))
+endif
 ifdef EDASQLiteCipher
        $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SO),$(OBJBINDIR))
 endif
@@ -463,6 +540,9 @@ ifdef LINUX_TARGET
        $(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))
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call cpq,audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SOV),$(OBJLIBDIR))
+endif
 ifdef EDASQLiteCipher
        $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SOV),$(OBJLIBDIR))
 endif
@@ -474,6 +554,10 @@ endif
 ifdef EDASQLiteCipher
        ln -sf $(LP)EDASQLiteCipher$(SOV) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO).0
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       ln -sf $(LP)EcereAudio$(SOV) $(OBJLIBDIR)$(LP)EcereAudio$(SO).0
+endif
+
        ln -sf $(LP)ecere$(SOV) $(OBJLIBDIR)$(LP)ecere$(SO)
        ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO)
        ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO)
@@ -482,6 +566,7 @@ endif
 ifdef EDASQLiteCipher
        ln -sf $(LP)EDASQLiteCipher$(SOV) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO)
 endif
+       ln -sf $(LP)EcereAudio$(SOV) $(OBJLIBDIR)$(LP)EcereAudio$(SO)
 endif
 
 ifndef WINDOWS_TARGET
@@ -491,6 +576,9 @@ ifndef LINUX_TARGET
        $(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))
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call cpq,audio/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EcereAudio$(SO),$(OBJLIBDIR))
+endif
 ifdef EDASQLiteCipher
        $(call cpq,eda/drivers/sqliteCipher/obj/release.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/$(LP)EDASQLiteCipher$(SO),$(OBJLIBDIR))
 endif
@@ -529,6 +617,9 @@ ifdef WINDOWS_TARGET
 ifdef EDASQLiteCipher
        $(call cpq,$(OBJBINDIR)$(LP)EDASQLiteCipher$(SO),"$(DESTLIBDIR)/")
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call cpq,$(OBJBINDIR)$(LP)EcereAudio$(SO),"$(DESTLIBDIR)/")
+endif
        $(call cpq,$(OBJBINDIR)ide$(E),"$(BINDIR)/")
        $(call cpq,$(OBJBINDIR)ear$(E),"$(BINDIR)/")
        $(call cpq,$(OBJBINDIR)ecc$(E),"$(BINDIR)/")
@@ -555,6 +646,9 @@ ifdef OSX_TARGET
 ifdef EDASQLiteCipher
        install $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(DESTLIBDIR)/
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       install $(OBJLIBDIR)$(LP)EcereAudio$(SO) $(DESTLIBDIR)/
+endif
        install $(OBJBINDIR)ide$(E) $(BINDIR)/
        install $(OBJBINDIR)ear$(E) $(BINDIR)/
        install $(OBJBINDIR)ecc$(E) $(BINDIR)/
@@ -578,7 +672,6 @@ endif
        find $(SAMPLESDIR) -type d -exec chmod 777 {} \;
        mkdir -p $(EXTRASDIR)
        cp -pRf extras/* $(EXTRASDIR)
-       chmod 777 $(EXTRASDIR)/audio
 endif
 
 ifndef OSX_TARGET
@@ -593,6 +686,9 @@ ifdef LINUX_TARGET
 ifdef EDASQLiteCipher
        install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SOV)
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       install $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EcereAudio$(SO) $(DESTLIBDIR)/ec/$(LP)EcereAudio$(SOV)
+endif
        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
@@ -601,6 +697,9 @@ endif
 ifdef EDASQLiteCipher
        ln -sf $(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO).0
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       ln -sf $(LP)EcereAudio$(SOV) $(DESTLIBDIR)/ec/$(LP)EcereAudio$(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)
@@ -611,6 +710,9 @@ endif
 ifdef EDASQLiteCipher
        ln -sf $(LP)EDASQLiteCipher$(SOV) $(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO)
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       ln -sf $(LP)EcereAudio$(SOV) $(DESTLIBDIR)/ec/$(LP)EcereAudio$(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
@@ -618,12 +720,6 @@ endif
 else
        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 $(INSTALL_FLAGS) $(OBJLIBDIR)$(LP)EDASQLiteCipher$(SO) $(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO)
-endif
 endif
        install $(INSTALL_FLAGS) $(OBJBINDIR)ide$(E) $(BINDIR)/ide$(E)
        install $(INSTALL_FLAGS) $(OBJBINDIR)ear$(E) $(BINDIR)/ear$(E)
@@ -651,7 +747,6 @@ endif
        find $(SAMPLESDIR) -type d -exec chmod 777 {} \;
        mkdir -p $(EXTRASDIR)
        cp $(CPFLAGS) extras/* $(EXTRASDIR)
-       chmod 777 $(EXTRASDIR)/audio
 ifdef DEBIAN_PACKAGE
        mkdir -p $(DESTDIR)$(prefix)/share/doc/libecere0
        install $(INSTALL_FLAG) -m644 NEWS $(DESTDIR)$(prefix)/share/doc/libecere0/changelog
@@ -672,6 +767,8 @@ ifdef DEBIAN_PACKAGE
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libeda0/
        mkdir -p $(DESTDIR)$(prefix)/share/doc/libedasqlite0
        ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libedasqlite0/
+       mkdir -p $(DESTDIR)$(prefix)/share/doc/libecereaudio0
+       ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecereaudio0/
 endif
 endif
 endif
@@ -681,10 +778,23 @@ uninstall:
        $(call rmq,"$(DESTLIBDIR)/$(LP)ecereCOM$(SO)")
        $(call rmq,"$(DESTLIBDIR)/$(LP)ec$(SO)")
        $(call rmq,"$(DESTLIBDIR)/$(LP)EDA$(SO)")
+ifdef LINUX_TARGET
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDASQLite$(SO)")
+ifdef EDASQLiteCipher
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO)")
+endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EcereAudio$(SO)")
+endif
+else
        $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLite$(SO)")
 ifdef EDASQLiteCipher
        $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO)")
 endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call rmq,"$(DESTLIBDIR)/$(LP)EcereAudio$(SO)")
+endif
+endif
        $(call rmq,"$(BINDIR)/ide$(E)")
        $(call rmq,"$(BINDIR)/ear$(E)")
        $(call rmq,"$(BINDIR)/ecc$(E)")
@@ -703,19 +813,23 @@ endif
 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")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)ec$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDA$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDASQLite$(SO).0")
 ifdef EDASQLiteCipher
-       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SO).0")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SO).0")
 endif
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EcereaAudio$(SO).0")
        $(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)")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)ec$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDA$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDASQLite$(SOV)")
 ifdef EDASQLiteCipher
-       $(call rmq,"$(DESTLIBDIR)/$(LP)EDASQLiteCipher$(SOV)")
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EDASQLiteCipher$(SOV)")
+endif
+ifneq "$(ECERE_AUDIO)" "n"
+       $(call rmq,"$(DESTLIBDIR)/ec/$(LP)EcereAudio$(SOV)")
 endif
        $(call rmq,"$(DESTDIR)$(prefix)/share/pixmaps/ecere.png")
        $(call rmq,"$(DESTDIR)$(prefix)/share/applications/ecere.desktop")
@@ -729,6 +843,43 @@ ifdef WINDOWS_TARGET
 endif
        @$(call echo,The Ecere SDK has been uninstalled.)
 
+regenbootstrap: update_ecere update_libec update_ecp update_ecc update_ecs
+       @echo Bootstrap regenerated.
+
+updatebootstrap: regenbootstrap
+       @echo Copying files...
+       $(call cpq,ecere/obj/bootstrap.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/*.c,compiler/bootstrap/ecere/bootstrap)
+       $(call cpq,compiler/libec/obj/bootstrap.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/*.c,compiler/bootstrap/libec/bootstrap)
+       $(call cpq,compiler/ecp/obj/bootstrap.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/*.c,compiler/bootstrap/ecp/bootstrap)
+       $(call cpq,compiler/ecc/obj/bootstrap.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/*.c,compiler/bootstrap/ecc/bootstrap)
+       $(call cpq,compiler/ecs/obj/bootstrap.$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/*.c,compiler/bootstrap/ecs/bootstrap)
+       @echo Bootstrap updated.
+
+update_ecere:
+       @echo Regenerating ecere bootstrapper...
+       cd ecere && $(MAKE) -f Makefile.bootstrap clean
+       cd ecere && $(MAKE) -f Makefile.bootstrap
+
+update_libec:
+       @echo Regenerating ec bootstrapper...
+       cd compiler/libec && $(MAKE) -f Makefile.bootstrap clean
+       cd compiler/libec && $(MAKE) -f Makefile.bootstrap
+
+update_ecp:
+       @echo Regenerating ecp bootstrapper...
+       cd compiler/ecp && $(MAKE) -f Makefile.bootstrap clean
+       cd compiler/ecp && $(MAKE) -f Makefile.bootstrap
+
+update_ecc:
+       @echo Regenerating ecc bootstrapper...
+       cd compiler/ecc && $(MAKE) -f Makefile.bootstrap clean
+       cd compiler/ecc && $(MAKE) -f Makefile.bootstrap
+
+update_ecs:
+       @echo Regenerating ecs bootstrapper...
+       cd compiler/ecs && $(MAKE) -f Makefile.bootstrap clean
+       cd compiler/ecs && $(MAKE) -f Makefile.bootstrap
+
 troubleshoot:
        @$(call echo,Printing values of some variables.)
        @$(call echo,HOST_PLATFORM=$(HOST_PLATFORM))
@@ -763,3 +914,7 @@ troubleshoot:
        @$(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))
+       @$(call echo,CPPFLAGS=$(CPPFLAGS))