Aegisub needs Lua built as C++ (for stack unwinding on errors). No one packages it like that, so at the moment we can't actually use systme packages for Lua. Fixes a bunch of memory leaks on Automation errors.
204 lines
4.9 KiB
Makefile
204 lines
4.9 KiB
Makefile
# *** THERE ARE NO USER-EDITABLE ITEMS HERE. ***
|
|
#
|
|
# TODO:
|
|
# * Allow variables to be overridden on the CL.
|
|
|
|
.PHONY: all install clean subdirs $(SUBDIRS)
|
|
all: subdirs $(PROGRAM)
|
|
.DEFAULT_GOAL := all
|
|
|
|
ifneq (no, $(BUILD_LIB))
|
|
all: $(LIB) $(LIB_SHARED)
|
|
endif
|
|
|
|
OBJ = $(addsuffix .o, $(basename $(SRC)))
|
|
DEP = $(addsuffix .d, $(basename $(SRC)))
|
|
|
|
###################
|
|
# PLATFORM SPECIFIC
|
|
###################
|
|
|
|
ifeq (yes, $(BUILD_DARWIN))
|
|
CFLAGS += -mmacosx-version-min=10.7 -gfull
|
|
CXXFLAGS += -mmacosx-version-min=10.7 -gfull
|
|
LDFLAGS += -mmacosx-version-min=10.7 -Wl,-dead_strip
|
|
LIB_SHARED_LINK = $(LIB_SHARED_LINK_OSX)
|
|
endif
|
|
|
|
|
|
###########
|
|
# LIBRARIES
|
|
###########
|
|
$(LIB) : $(OBJ)
|
|
$(BIN_AR) cru $@ $(OBJ)
|
|
$(BIN_RANLIB) $@
|
|
|
|
ifdef LIB_SHARED
|
|
LIB_SHARED_FULL = $(LIB_SHARED).$(LIB_VERSION)
|
|
$(LIB_SHARED) : $(OBJ)
|
|
$(BIN_CXX) $(LIB_SHARED_LINK) $(LDFLAGS) $(OBJ) $(LIBS) -o $(LIB_SHARED_FULL)
|
|
$(BIN_LN) -sf $(LIB_SHARED_FULL) $(LIB_SHARED)
|
|
|
|
CLEANFILES+= $(LIB_SHARED_FULL)
|
|
endif
|
|
|
|
##########
|
|
# PROGRAMS
|
|
##########
|
|
$(PROGRAM): $(OBJ)
|
|
$(BIN_CXX) -o $@ $(LDFLAGS) $(OBJ) $(LIBS)
|
|
|
|
##########
|
|
# CLEANING
|
|
##########
|
|
clean: $(SUBDIRS)
|
|
$(BIN_RM) -f $(OBJ) $(CLEANFILES) $(LIB) $(LIB_SHARED) $(PROGRAM)
|
|
ifdef PRECOMPILED_HEADER_NAME
|
|
$(BIN_RM) -f $(PRECOMPILED_HEADER_NAME).gch
|
|
endif
|
|
|
|
mostlyclean: $(SUBDIRS)
|
|
$(BIN_RM) -f $(OBJ) $(CLEANFILES) $(LIB) $(LIB_SHARED) $(PROGRAM)
|
|
|
|
distclean: clean
|
|
$(BIN_RM) -rf $(DISTCLEANFILES) $(DEP)
|
|
ifdef PRECOMPILED_HEADER_NAME
|
|
$(BIN_RM) -f $(PRECOMPILED_HEADER_NAME).gch
|
|
endif
|
|
|
|
|
|
#########
|
|
# INSTALL
|
|
#########
|
|
ifeq (install, $(MAKECMDGOALS))
|
|
INSTALL_LIB=$(addprefix $(P_LIB)/, $(LIB_SHARED) $(LIB_SHARED_FULL))
|
|
endif
|
|
|
|
BIN_SINSTALL=$(BIN_INSTALL)
|
|
|
|
install: $(SUBDIRS) install-share install-program install-lib
|
|
|
|
install-strip:
|
|
$(MAKE) BIN_SINSTALL='$(BIN_INSTALL) -s' install
|
|
|
|
install-program:
|
|
ifdef PROGRAM_INSTALL
|
|
@$(BIN_MKDIR) -p $(DESTDIR)$(P_BINDIR)
|
|
@$(BIN_SINSTALL) $(PROGRAM) $(DESTDIR)$(P_BINDIR)/$(PROGRAM)
|
|
endif
|
|
|
|
install-lib:
|
|
ifdef LIB_SHARED_INSTALL
|
|
$(BIN_MKDIR) -p $(DESTDIR)$(P_LIB)
|
|
$(BIN_SINSTALL) $(LIB_SHARED_FULL) $(DESTDIR)$(P_LIB)/$(LIB_SHARED_FULL)
|
|
$(BIN_LN) -sf $(LIB_SHARED_FULL) $(DESTDIR)$(P_LIB)/$(LIB_SHARED)
|
|
endif
|
|
|
|
install-share:
|
|
ifdef DATA_SHARE
|
|
@$(BIN_MKDIR) -p $(addprefix $(DESTDIR)$(P_DATA)/, $(dir $(DATA_SHARE)))
|
|
@for i in $(DATA_SHARE); do \
|
|
$(BIN_ECHO) "$(BIN_INSTALL) $$i $(DESTDIR)$(P_DATA)/$$i"; \
|
|
$(BIN_INSTALL) $$i $(DESTDIR)$(P_DATA)/$$i; \
|
|
done
|
|
endif
|
|
ifdef DATA_SHARE_DOC
|
|
@$(BIN_MKDIR) -p $(addprefix $(DESTDIR)$(P_DOC)/, $(dir $(DATA_SHARE_DOC)))
|
|
@for i in $(DATA_SHARE_DOC); do \
|
|
$(BIN_ECHO) "$(BIN_INSTALL) $$i $(DESTDIR)$(P_DOC)/$$i"; \
|
|
$(BIN_INSTALL) $$i $(DESTDIR)$(P_DOC)/$$i; \
|
|
done
|
|
endif
|
|
|
|
##############
|
|
# DISTRIBUTION
|
|
##############
|
|
dist: distdir
|
|
@$(BIN_TAR) chf - --posix "$(PACKAGE_TARNAME)" | $(BIN_GZIP) -c > "$(PACKAGE_TARNAME).tar.gz"
|
|
@rm -rf $(PACKAGE_TARNAME)
|
|
|
|
distdir:
|
|
@if ! test -f packages/distfile/distfile.sh; then \
|
|
echo "Please run this from the parent directory."; \
|
|
exit 1; \
|
|
fi
|
|
@${SHELL} packages/distfile/distfile.sh $(MAKE) $(PACKAGE_TARNAME)
|
|
|
|
distfiles: $(SUBDIRS)
|
|
@for i in $(SRC) $(HEADER) $(PO) $(EXTRA_DIST); do \
|
|
echo $(CURDIR)/$$i; \
|
|
done
|
|
|
|
|
|
########################
|
|
# SUBDIRECTORY TRAVERSAL
|
|
########################
|
|
subdirs: $(SUBDIRS)
|
|
|
|
$(SUBDIRS):
|
|
$(MAKE) -C $@ $(MAKECMDGOALS)
|
|
|
|
# Set relations to ensure dependencies are built before their targets during parallel builds.
|
|
automation: libaegisub vendor/lua
|
|
src: vendor/universalchardet vendor/lua tools libaegisub
|
|
tests: libaegisub
|
|
tools: libaegisub
|
|
reporter: src
|
|
|
|
$(OBJ): $(GLOBAL_DEPS)
|
|
|
|
OBJCXXFLAGS := $(CXXFLAGS)
|
|
|
|
####################
|
|
# PRECOMPILED HEADER
|
|
####################
|
|
ifeq (yes, $(PRECOMPILED_HEADER))
|
|
ifdef PRECOMPILED_HEADER_NAME
|
|
CXXFLAGS += -include $(PRECOMPILED_HEADER_NAME) $(PCHFLAGS)
|
|
# This hack is required until we can use the 'private' keyword (gmake 3.82) to avoid all the
|
|
# per-object CXXFLAGS being triggered by the ($OBJ) line.
|
|
CXXFLAGS_GNU_MAKE_SUCKS := $(CXXFLAGS)
|
|
$(OBJ): | $(PRECOMPILED_HEADER_NAME).gch
|
|
$(PRECOMPILED_HEADER_NAME).gch: CXXFLAGS = $(CXXFLAGS_GNU_MAKE_SUCKS)
|
|
$(PRECOMPILED_HEADER_NAME).gch: $(PRECOMPILED_HEADER_NAME)
|
|
endif
|
|
endif
|
|
|
|
|
|
########
|
|
# CCACHE
|
|
########
|
|
ifeq (yes, $(CCACHE_ENABLE))
|
|
CXX_ENV = $(CCACHE_ENV)
|
|
BIN_CC := ccache $(BIN_CC)
|
|
BIN_CXX := ccache $(BIN_CXX)
|
|
endif
|
|
|
|
|
|
##################
|
|
# TRANSFORM RULES
|
|
##################
|
|
.SUFFIXES:
|
|
.SUFFIXES: .o .c .cpp .cxx .mm
|
|
|
|
%.o: %.c
|
|
$(CXX_ENV) $(BIN_CC) $(CFLAGS_DEP) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
|
|
|
|
%.o: %.cpp
|
|
$(CXX_ENV) $(BIN_CXX) $(CFLAGS_DEP) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
|
|
|
|
%.o: %.cxx
|
|
$(CXX_ENV) $(BIN_CXX) $(CFLAGS_DEP) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
|
|
|
|
%.o: %.cc
|
|
$(CXX_ENV) $(BIN_CXX) $(CFLAGS_DEP) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
|
|
|
|
%.o: %.mm
|
|
$(CXX_ENV) $(BIN_CXX) $(CFLAGS_DEP) $(CPPFLAGS) $(OBJCXXFLAGS) -c -o $@ $<
|
|
|
|
$(PRECOMPILED_HEADER_NAME).gch: $(PRECOMPILED_HEADER_NAME)
|
|
$(CXX_ENV) $(BIN_CXX) $(CPPFLAGS) $(CXXFLAGS) -x c++-header $<
|
|
|
|
|
|
-include ($DEP)
|
|
.SUFFIXES:
|