--- a/Makefile +++ b/Makefile @@ -1,93 +1,103 @@ prefix=/usr/local -bindir=$(prefix)/bin -includedir=$(prefix)/include -libdir=$(prefix)/lib -sysconfdir=$(prefix)/etc -datarootdir=$(prefix)/share -datadir=$(datarootdir)/gettext-tiny -acdir=$(datarootdir)/aclocal - -ifeq ($(LIBINTL), MUSL) - LIBSRC = libintl/libintl-musl.c - HEADERS = -else ifeq ($(LIBINTL), NONE) - LIBSRC = - HEADERS = -else - LIBSRC = libintl/libintl.c - HEADERS = libintl.h -endif -PROGSRC = $(sort $(wildcard src/*.c)) - -PARSEROBJS = src/poparser.o src/poparser_sysdep.o src/StringEscape.o -PROGOBJS = $(PROGSRC:.c=.o) -LIBOBJS = $(LIBSRC:.c=.o) -OBJS = $(PROGOBJS) $(LIBOBJS) +bindir=${prefix}/bin +includedir=${prefix}/include +libdir=${prefix}/lib +sysconfdir=${prefix}/etc +datarootdir=${prefix}/share +datadir=${datarootdir}/gettext-tiny +acdir=${datarootdir}/aclocal + +LIBINTL ?= default +LIBINTL_MODE=${LIBINTL:tl} + +.if ${LIBINTL_MODE} == "musl" +LIBSRC=libintl/libintl-musl.c +HEADERS= +.elif ${LIBINTL_MODE} == "none" +LIBSRC= +HEADERS= +.else +LIBSRC=libintl/libintl.c +HEADERS=libintl.h +.endif + +PARSEROBJS=src/poparser.o src/poparser_sysdep.o src/StringEscape.o +PROGOBJS=src/msgfmt.o src/msgmerge.o src/poparser.o src/poparser_sysdep.o src/StringEscape.o +LIBOBJS=${LIBSRC:.c=.o} +OBJS=${PROGOBJS} ${LIBOBJS} -ALL_INCLUDES = $(HEADERS) -ifneq ($(LIBINTL), NONE) +ALL_INCLUDES=${HEADERS} +.if ${LIBINTL_MODE} != "none" ALL_LIBS=libintl.a -endif +.else +ALL_LIBS= +.endif ALL_TOOLS=msgfmt msgmerge xgettext autopoint -ALL_M4S=$(sort $(wildcard m4/*.m4)) -ALL_DATA=$(sort $(wildcard data/*)) +AC_DATADIR_REL=${datadir:S,${datarootdir}/,,} CFLAGS ?= -O0 -fPIC -AR ?= $(CROSS_COMPILE)ar -RANLIB ?= $(CROSS_COMPILE)ranlib -CC ?= $(CROSS_COMPILE)cc +AR ?= ${CROSS_COMPILE}ar +RANLIB ?= ${CROSS_COMPILE}ranlib +CC ?= ${CROSS_COMPILE}cc INSTALL ?= ./install.sh --include config.mak - -LDLIBS:=$(shell echo "int main(){}" | $(CC) $(CFLAGS) $(LDFLAGS) -liconv -x c - >/dev/null 2>&1 && printf %s -liconv) - -BUILDCFLAGS=$(CFLAGS) - -all: $(ALL_LIBS) $(ALL_TOOLS) - -install: $(ALL_LIBS:lib%=$(DESTDIR)$(libdir)/lib%) $(ALL_INCLUDES:%=$(DESTDIR)$(includedir)/%) $(ALL_TOOLS:%=$(DESTDIR)$(bindir)/%) $(ALL_M4S:%=$(DESTDIR)$(datadir)/%) $(ALL_M4S:%=$(DESTDIR)$(acdir)/%) $(ALL_DATA:%=$(DESTDIR)$(datadir)/%) +.if exists(config.mak) +.include "config.mak" +.endif + +LDLIBS!=echo 'int main(){}' | ${CC} ${CFLAGS} ${LDFLAGS} -liconv -x c - >/dev/null 2>&1 && printf '%s' -liconv || true + +BUILDCFLAGS=${CFLAGS} + +all: ${ALL_LIBS} ${ALL_TOOLS} + +install: ${ALL_LIBS} ${ALL_TOOLS} +.for lib in ${ALL_LIBS} + ${INSTALL} -D -m 755 ${lib} ${DESTDIR}${libdir}/${lib} +.endfor +.for hdr in ${ALL_INCLUDES} + ${INSTALL} -D -m 644 include/${hdr} ${DESTDIR}${includedir}/${hdr} +.endfor +.for tool in ${ALL_TOOLS} + ${INSTALL} -D -m 755 ${tool} ${DESTDIR}${bindir}/${tool} +.endfor + @set -e; \ + for m4f in m4/*.m4; do \ + [ -f "$$m4f" ] || continue; \ + ${INSTALL} -D -m 644 "$$m4f" "${DESTDIR}${datadir}/$${m4f##*/}"; \ + ${INSTALL} -D -l "../${AC_DATADIR_REL}/$${m4f##*/}" "${DESTDIR}${acdir}/$${m4f##*/}"; \ + done + @set -e; \ + for dataf in data/*; do \ + [ -f "$$dataf" ] || continue; \ + ${INSTALL} -D -m 644 "$$dataf" "${DESTDIR}${datadir}/$${dataf##*/}"; \ + done clean: - rm -f $(ALL_LIBS) - rm -f $(OBJS) - rm -f $(ALL_TOOLS) - -%.o: %.c - $(CC) $(BUILDCFLAGS) -c -o $@ $< - -libintl.a: $(LIBOBJS) - rm -f $@ - $(AR) rc $@ $(LIBOBJS) - $(RANLIB) $@ + rm -f ${ALL_LIBS} + rm -f ${OBJS} + rm -f ${ALL_TOOLS} + +.c.o: + ${CC} ${BUILDCFLAGS} -c -o ${.TARGET} ${.IMPSRC} + +libintl.a: ${LIBOBJS} + rm -f ${.TARGET} + ${AR} rc ${.TARGET} ${LIBOBJS} + ${RANLIB} ${.TARGET} -msgmerge: $(OBJS) - $(CC) -o $@ src/msgmerge.o $(PARSEROBJS) $(LDFLAGS) $(LDLIBS) +msgmerge: ${OBJS} + ${CC} -o ${.TARGET} src/msgmerge.o ${PARSEROBJS} ${LDFLAGS} ${LDLIBS} -msgfmt: $(OBJS) - $(CC) -o $@ src/msgfmt.o $(PARSEROBJS) $(LDFLAGS) $(LDLIBS) +msgfmt: ${OBJS} + ${CC} -o ${.TARGET} src/msgfmt.o ${PARSEROBJS} ${LDFLAGS} ${LDLIBS} xgettext: cp src/xgettext.sh ./xgettext autopoint: src/autopoint.in - cat $< | sed 's,@datadir@,$(datadir),' > $@ - -$(DESTDIR)$(libdir)/%.a: %.a - $(INSTALL) -D -m 755 $< $@ - -$(DESTDIR)$(includedir)/%.h: include/%.h - $(INSTALL) -D -m 644 $< $@ - -$(DESTDIR)$(bindir)/%: % - $(INSTALL) -D -m 755 $< $@ - -$(DESTDIR)$(datadir)/%: % - $(INSTALL) -D -m 644 $< $@ - -$(DESTDIR)$(acdir)/%: % - $(INSTALL) -D -l ../$(subst $(datarootdir)/,,$(datadir))/$< $(patsubst %m4/,%,$(dir $@))/$(notdir $@) + sed 's,@datadir@,${datadir},' < src/autopoint.in > ${.TARGET} .PHONY: all clean install