forked from mia/Aegisub
1e030289ad
Rather than having it be a configurable option, simply build in final release mode if Aegisub is being built from a signed tag, and get the version information from that tag. Drop the version number from the OS X app bundle when not building from a tag as it done everywhere else. Drop the arch suffix since ppc hasn't been tested in years and isn't worth testing as it's only going to get less relevant as time goes on. Remove some redundant definitions in the build system.
191 lines
4.5 KiB
Makefile
191 lines
4.5 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 $(LIB) $(LIB_SHARED) $(PROGRAM)
|
|
.DEFAULT_GOAL := all
|
|
|
|
OBJ = $(addsuffix .o, $(basename $(SRC)))
|
|
DEP = $(addsuffix .d, $(basename $(SRC)))
|
|
|
|
###################
|
|
# PLATFORM SPECIFIC
|
|
###################
|
|
|
|
ifeq (yes, $(BUILD_DARWIN))
|
|
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.
|
|
src: universalchardet tools libaegisub
|
|
tests: 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)
|
|
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: %.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:
|