]> git.decadent.org.uk Git - ion3.git/blobdiff - build/rules.mk
Merge commit '20081002' into HEAD
[ion3.git] / build / rules.mk
index 3f8a42d0cfff40963a6d6e5dad16a20655069753..d538bbcf6df361238f58f305bbe4106fac4015f4 100644 (file)
@@ -16,6 +16,17 @@ LUA_COMPILED := $(subst .lua,.lc, $(LUA_SOURCES))
 TARGETS := $(TARGETS) $(LUA_COMPILED)
 endif
 
+ifdef EXTRA_EXECUTABLE
+EXECUTABLE := $(EXTRA_EXECUTABLE)
+BINDIR_ := $(EXTRABINDIR)
+endif
+
+ifdef EXECUTABLE
+BINDIR_ ?= $(BINDIR)
+EXECUTABLE_ := $(EXECUTABLE)$(BIN_SUFFIX)
+TARGETS := $(TARGETS) $(EXECUTABLE_)
+endif
+
 
 # Main targets
 ######################################
@@ -40,11 +51,11 @@ depend: subdirs-depend _depend
 install: subdirs-install _install
 
 
+ifdef MAKE_EXPORTS
+
 # Exports
 ######################################
 
-ifdef MAKE_EXPORTS
-
 EXPORTS_C = exports.c
 EXPORTS_H = exports.h
 
@@ -56,14 +67,28 @@ _exports: $(EXPORTS_C)
 
 $(EXPORTS_H): $(EXPORTS_C)
 
-$(EXPORTS_C): $(SOURCES)
+$(EXPORTS_C): $(SOURCES) $(MKEXPORTS_EXTRA_DEPS)
        $(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) \
        $(SOURCES) $(MKEXPORTS_EXTRAS)
 
+# Exports documentation
+######################################
+
+EXPORTS_DOC = exports.tex
+
+TO_CLEAN := $(TO_CLEAN) $(EXPORTS_DOC)
+
+_exports_doc: $(EXPORTS_DOC)
+
+$(EXPORTS_DOC): $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRA_DEPS)
+       $(MKEXPORTS) -mkdoc -module $(MAKE_EXPORTS) -o $(EXPORTS_DOC) \
+       $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRAS)
+
 else # !MAKE_EXPORTS
 
 EXPORTS_C = 
 EXPORTS_H = 
+EXPORTS_DOC =
 
 endif # !MAKE_EXPORTS
 
@@ -73,6 +98,42 @@ endif # !MAKE_EXPORTS
 
 OBJS=$(subst .c,.o,$(SOURCES) $(EXPORTS_C))
 
+
+ifdef EXECUTABLE
+
+ifdef MODULE_LIST
+ifdef MODULE_PATH
+ifeq ($(PRELOAD_MODULES),1)
+EXT_OBJS += $(foreach mod, $(MODULE_LIST), $(MODULE_PATH)/$(mod)/$(mod).a)
+DEPEND_DEPENDS += preload.c
+SOURCES += preload.c
+TO_CLEAN += preload.c
+else # !PRELOAD_MODULES
+LDFLAGS += $(EXPORT_DYNAMIC)
+WHOLEA = -Wl,-whole-archive
+NO_WHOLEA = -Wl,-no-whole-archive
+endif # !PRELOAD_MODULES
+
+preload.c:
+       $(LUA) $(TOPDIR)/build/mkpreload.lua $(MODULE_LIST) > preload.c
+
+endif # MODULE_PATH
+endif # MODULE_LIST
+
+ifeq ($(RELOCATABLE),1)
+DEFINES += -DCF_RELOCATABLE_BIN_LOCATION=\"$(BINDIR_)/$(EXECUTABLE)\"
+endif
+
+$(EXECUTABLE_): $(OBJS) $(EXT_OBJS)
+       $(CC) $(OBJS) $(WHOLEA) $(EXT_OBJS) $(NO_WHOLEA) $(LDFLAGS) -o $@
+
+executable_install:
+       $(INSTALLDIR) $(BINDIR_)
+       $(INSTALLBIN) $(EXECUTABLE_) $(BINDIR_)
+
+endif # EXECUTABLE
+
+
 ifdef MODULE
 
 ifneq ($(PRELOAD_MODULES),1)
@@ -89,7 +150,7 @@ $(MODULE).so: $(OBJS) $(EXT_OBJS)
 
 module_install: module_stub_install
        $(INSTALLDIR) $(MODULEDIR)
-       $(INSTALL) -m $(BIN_MODE) $(MODULE).so $(MODULEDIR)
+       $(INSTALLBIN) $(MODULE).so $(MODULEDIR)
 
 else # PRELOAD_MODULES
 
@@ -202,3 +263,9 @@ TO_CLEAN += potfiles_c potfiles_lua
 _potfiles:
        echo "$(SOURCES)"|tr ' ' '\n' > potfiles_c
        echo "$(LUA_SOURCES) $(ETC)"|tr ' ' '\n' > potfiles_lua
+
+# Defaults
+######################################
+
+INSTALL_STRIP ?= -s
+INSTALLBIN ?= $(INSTALL) $(INSTALL_STRIP) -m $(BIN_MODE)