Files
dvdisaster/GNUmakefile.template
2020-08-25 21:12:55 +02:00

348 lines
14 KiB
Plaintext

######################################################################
# Begin of dvdisaster makefile template
######################################################################
# Currently supported locales
PO_LOCALES = pt_BR cs de it ru sv
MAN_LOCALES = de
# Search for TAGS: online-docs
# Don't forget edit NODIST for new doc locales
# Local settings (not changeable from the configure script)
# Where to put tar archives (arch, srcdist)
TAR_PREFIX=/dev/shm
######################################################################
# Take over variables from configure
######################################################################
VERSION = $(CFG_VERSION)
SRCDIR = $(CFG_SRCDIR)
PKGNAME = $(CFG_PKGNAME)
PREFIX = $(CFG_PREFIX)
BINDIR = $(CFG_BINDIR)
MANDIR = $(CFG_MANDIR)
DOCDIR = $(CFG_DOCDIR)
DOCSUBDIR = $(CFG_DOCDIR)/$(CFG_DOCSUBDIR)
LOCALEDIR = $(CFG_LOCALEDIR)
BUILDROOT = $(CFG_BUILDROOT)
BUILDTMP = $(CFG_BUILDTMP)
INTL_INCL = $(CFG_INTL_INCL)
INTL_LFLAGS = $(CFG_INTL_LFLAGS)
INTL_LIBS = $(CFG_INTL_LIBS)
CAM_LFLAGS = $(CFG_CAM_LFLAGS)
CAM_LIBS = $(CFG_CAM_LIBS)
GTK_CFLAGS = $(CFG_GTK2_CFLAGS) $(CFG_GLIB2_CFLAGS)
GTK_LIBS = $(CFG_GTK2_LIBS) $(CFG_GLIB2_LIBS)
GTK_BINDIR = $(CFG_GTK2_BINDIR) $(CFG_GLIB2_BINDIR)
EFENCE_LFLAGS = $(CFG_EFENCE_LFLAGS)
EFENCE_LIBS = $(CFG_EFENCE_LIBS)
SYS_OPTIONS = $(CFG_SYS_OPTIONS)
SYS_NAME = $(CFG_SYS_NAME)
HAVE_OPTIONS = $(CFG_HAVE_OPTIONS)
WITH_OPTIONS = $(CFG_WITH_OPTIONS)
OTHER_OPTIONS = $(CFG_OTHER_OPTIONS) -DVERSION=\"$(VERSION)\"
SSE2_OPTIONS = $(CFG_SSE2_OPTIONS)
ALTIVEC_OPTIONS = $(CFG_ALTIVEC_OPTIONS)
LOCATIONS = -DSRCDIR=\"$(SRCDIR)\" -DBINDIR=\"$(BINDIR)\" -DDOCDIR=\"$(DOCSUBDIR)\" -DLOCALEDIR=\"$(LOCALEDIR)\"
COPTS = $(CFLAGS) $(LOCATIONS) $(SYS_OPTIONS) $(SYS_NAME) $(HAVE_OPTIONS) $(WITH_OPTIONS) $(OTHER_OPTIONS) $(INTL_INCL) $(CAM_INCL) $(GTK_CFLAGS) $(MUDFLAP_CFLAGS)
LOPTS = $(LDFLAGS) $(INTL_LFLAGS) $(CAM_LFLAGS) $(EFENCE_LFLAGS) $(MUDFLAP_LFLAGS)
LIBS = $(INTL_LIBS) $(CAM_LIBS) $(GTK_LIBS) $(EFENCE_LIBS) $(MUDFLAP_LIBS) -lm
CFILES = $(CFG_CFILES)
OFILES = $(CFG_OFILES)
######################################################################
# Compilation related
######################################################################
.PHONY : all help show locale time-stamp
${BUILDTMP}/%.o : %.c
@echo "Compiling:" $?
@$(CC) $(COPTS) -c $? -o $@
all: time-stamp dvdisaster
${BUILDTMP}/build.o : build.c build.h
@echo "Compiling:" build.o
@$(CC) $(COPTS) -c build.c -o $@
# Building the dvdisaster binary
time-stamp:
@$(SRCDIR)/scripts/time-stamper.bash $(SRCDIR)/build.h
dvdisaster: $(ICONS) $(OFILES)
@echo "Linking : dvdisaster"
@if test $(CFG_SYS_OPTIONS) == -DSYS_MINGW; \
then windres -v winres.rc -O coff -o winres.o >/dev/null ; \
$(CC) $(LOPTS) $(OFILES) $(LIBS) winres.o -o dvdisaster ; \
else $(CC) $(LOPTS) $(OFILES) $(LIBS) -o dvdisaster ; \
fi
@if test -e locale/de/LC_MESSAGES/dvdisaster.mo \
|| echo $(WITH_OPTIONS) | grep "NLS_NO" >/dev/null; \
then echo "not touching locale"; \
else $(MAKE) --no-print-directory -C locale; \
fi
inlined-icons.h: icons/read.png icons/create.png icons/scan.png icons/fix.png icons/verify.png
@gdk-pixbuf-csource --raw --name=dvdisaster_read icons/read.png >inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_create icons/create.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_scan icons/scan.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_fix icons/fix.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_verify icons/verify.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_open_ecc icons/open-ecc.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_open_img icons/open-img.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_cd icons/cd.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_gtk_help icons/gtk-help.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_gtk_index icons/gtk-index.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_gtk_preferences icons/gtk-preferences.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_gtk_quit icons/gtk-quit.png >>inlined-icons.h
@gdk-pixbuf-csource --raw --name=dvdisaster_gtk_stop icons/gtk-stop.png >>inlined-icons.h
$(BUILDTMP)/help-dialogs.o: help-dialogs.c simple-md5sum
@if test -e fingerprints.md5; \
then if test -e help-dialogs.h; then rm help-dialogs.h; fi; \
mv inlined-icons.h inlined-icons.saved; \
mv build.h build.saved; \
./simple-md5sum -b *.h *.c | sort -k2 >tmp.md5; \
sort -k2 < fingerprints.md5 >tmp2.md5; \
mv inlined-icons.saved inlined-icons.h; \
mv build.saved build.h; \
if ! cmp tmp2.md5 tmp.md5 >/dev/null; \
then echo "#define MODIFIED_SOURCE 1" >> help-dialogs.h; \
else echo "#define UNMODIFIED_SOURCE 1" >> help-dialogs.h; \
fi; \
rm tmp.md5 tmp2.md5; \
else echo "#define MODIFIED_SOURCE 1" >> help-dialogs.h; \
fi
@echo "Compiling:" help-dialogs.c
@$(CC) $(COPTS) -c help-dialogs.c -o $(BUILDTMP)/help-dialogs.o
$(BUILDTMP)/rs-encoder-sse2.o: rs-encoder-sse2.c
@echo "Compiling:" rs-encoder-sse2.c
@$(CC) $(SSE2_OPTIONS) $(COPTS) -c rs-encoder-sse2.c -o $(BUILDTMP)/rs-encoder-sse2.o
$(BUILDTMP)/rs-encoder-altivec.o: rs-encoder-altivec.c
@echo "Compiling:" rs-encoder-altivec.c
@$(CC) $(ALTIVEC_OPTIONS) $(COPTS) -c rs-encoder-altivec.c -o $(BUILDTMP)/rs-encoder-altivec.o
locale:
@$(MAKE) --no-print-directory -C locale
untranslated:
@$(MAKE) --no-print-directory -C locale check-untranslated
simple-md5sum: md5.c
@$(CC) $(COPTS) $(MUDFLAP_CFLAGS) -DSIMPLE_MD5SUM md5.c $(LDFLAGS) $(MUDFLAP_LFLAGS) $(MUDFLAP_LIBS) -o simple-md5sum
version.tex:
@echo "\\newcommand{\\projectversion}{$(VERSION)}" >$(SRCDIR)/documentation/config/version.tex
manual: version.tex
@echo "Producing user manual... "
@$(MAKE) --no-print-directory -C documentation/user-manual manual.pdf
manualclean:
@echo "Removing temporary user manual files... "
@$(MAKE) --no-print-directory -C documentation/user-manual clean
# Some usage info
help:
@echo "Building dvdisaster:"
@echo "show - show current configuration (taken over from ./configure)"
@echo "all - build dvdisaster"
@echo "install - install dvdisaster locally"
@echo "uninstall - uninstall dvdisaster"
@echo
@echo "Documentation related:"
@echo "manual - create the user manual (requires LaTeX)"
@echo
@echo "Locale related:"
@echo "locale - update locale files"
@echo "untranslated - show untranslated German strings"
@echo
@echo "Package maintenance:"
@echo "clean - remove all easily rebuildable files"
@echo "distclean - remove all files which are rebuildable"
@echo "archclean - remove all files which are rebuildable in an development setup"
@echo "arch - distclean and tar the source directory (dirty)"
@echo "srcdist - produce the source distribution tarball (polished)"
# Build configuration printing
show:
@echo -e "Current build configuration in ./GNUmakefile:\n"
@echo "VERSION = " $(VERSION)
@echo "CC = " $(CC)
@echo "MAKE = " $(MAKE)
@echo "SHELL = " $(SHELL)
@echo "SRCDIR = " $(SRCDIR)
@echo "PKGNAME = " $(PKGNAME)
@echo "PREFIX = " $(PREFIX)
@echo "BINDIR = " $(BINDIR)
@echo "MANDIR = " $(MANDIR)
@echo "LOCALEDIR = " $(LOCALEDIR)
@echo "DOCDIR = " $(DOCDIR)
@echo "DOCSUBDIR = " $(DOCSUBDIR)
@echo "BUILDROOT = " $(BUILDROOT)
@echo "BUILDTMP = " $(BUILDTMP)
@echo
@echo "INTL_INCL = " $(INTL_INCL)
@echo "INTL_LFLAGS = " $(INTL_LFLAGS)
@echo "INTL_LIBS = " $(INTL_LIBS)
@echo "GTK_CFLAGS = " $(GTK_CFLAGS)
@echo "GTK_LIBS = " $(GTK_LIBS)
@echo "GTK_BINDIR = " $(GTK_BINDIR)
@echo "EFENCE_LFLAGS= " $(EFENCE_LFLAGS)
@echo "EFENCE_LIBS = " $(EFENCE_LIBS)
@echo
@echo "SYS_OPTIONS = " $(SYS_OPTIONS)
@echo "SYS_NAME = " $(SYS_NAME)
@echo "HAVE_OPTIONS = " $(HAVE_OPTIONS)
@echo "WITH_OPTIONS = " $(WITH_OPTIONS)
@echo "OTHER_OPTIONS= " $(OTHER_OPTIONS)
@echo "SSE2_OPTIONS = " $(SSE2_OPTIONS)
@echo "ALTIVEC_OPTIONS= " $(ALTIVEC_OPTIONS)
@echo
@echo "CFLAGS = " $(CFLAGS)
@echo "COPTS = " $(COPTS)
@echo "LIBS = " $(LIBS)
@echo "LOPTS = " $(LOPTS)
######################################################################
# Distribution management
######################################################################
.PHONY : install uninstall clean distclean arch
.PHONY : srcdist dist
install: dvdisaster manual
@echo "Installing package..."
install -d $(BUILDROOT)$(BINDIR)
install dvdisaster $(BUILDROOT)$(BINDIR)
install -d $(BUILDROOT)$(DOCSUBDIR)
install -m 644 CHANGELOG $(BUILDROOT)$(DOCSUBDIR)
install -m 644 COPYING $(BUILDROOT)$(DOCSUBDIR)
install -m 644 CREDITS* $(BUILDROOT)$(DOCSUBDIR)
install -m 644 README.MODIFYING $(BUILDROOT)$(DOCSUBDIR)
install -m 644 TODO $(BUILDROOT)$(DOCSUBDIR)
install -d $(BUILDROOT)$(DOCSUBDIR)
(cd documentation/user-manual; install -m 644 manual.pdf $(BUILDROOT)$(DOCSUBDIR))
install -d $(BUILDROOT)$(MANDIR)/man1
install -d $(BUILDROOT)$(MANDIR)/de/man1
cd documentation; \
ESCAPED_DOCSUBDIR=`echo $(DOCSUBDIR) | sed -e 's/\//\\\\\//g'`; \
sed "s/%docdir%/$$ESCAPED_DOCSUBDIR/" <dvdisaster.en.1 >dvdisaster.updated; \
install -m 644 dvdisaster.updated $(BUILDROOT)$(MANDIR)/man1/dvdisaster.1; \
sed "s/%docdir%/$$ESCAPED_DOCSUBDIR/" <dvdisaster.de.1 >dvdisaster.updated; \
install -m 644 dvdisaster.updated $(BUILDROOT)$(MANDIR)/de/man1/dvdisaster.1; \
rm dvdisaster.updated
if echo $(WITH_OPTIONS) | grep "NLS_YES" >/dev/null; then \
cd locale; \
for i in ?? ??_??; do\
install -d $(BUILDROOT)$(LOCALEDIR)/$$i/LC_MESSAGES; \
install -m 644 $$i/LC_MESSAGES/dvdisaster.mo $(BUILDROOT)$(LOCALEDIR)/$$i/LC_MESSAGES; \
done \
fi
@echo "# dvdisaster uninstaller script" > $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
@echo "# Usage: sh dvdisaster-uninstall.sh" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
@echo >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
@echo "rm -f $(BINDIR)/dvdisaster $(BINDIR)/dvdisaster-uninstall.sh" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
@echo "rm -rf $(DOCSUBDIR)" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
@for i in $(PO_LOCALES); do \
echo "rm $(LOCALEDIR)/$$i/LC_MESSAGES/dvdisaster.mo" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh ; \
done
@echo "rm -f $(MANDIR)/man1/dvdisaster.1" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
@for i in $(MAN_LOCALES); do \
echo "rm $(MANDIR)/$$i/man1/dvdisaster.1" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh ; \
done
@echo "echo \"dvdisaster has been uninstalled.\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
uninstall:
@echo "Uninstalling package..."
rm -f $(BINDIR)/dvdisaster $(BINDIR)/dvdisaster-uninstall.sh
rm -rf $(DOCSUBDIR)
rm -f $(MANDIR)/man1/dvdisaster.1
for i in $(PO_LOCALES); do \
rm $(LOCALEDIR)/$$i/LC_MESSAGES/dvdisaster.mo; \
done
for i in $(MAN_LOCALES); do \
rm $(MANDIR)/$$i/man1/dvdisaster.1; \
done
archclean: distclean
@echo "Removing rebuildable documentation parts"
@$(MAKE) --no-print-directory -C $(SRCDIR)/documentation/codec-specs archclean
@$(MAKE) --no-print-directory -C $(SRCDIR)/documentation/user-manual archclean
distclean: clean
@echo "Removing configuration files"
@rm -f configure.log Makefile.config GNUmakefile locale/Makefile
@for i in locale/?? locale/??_??; do rm -rf $$i; done
# There might be a not executable simple-md5sum from a compiler run
# under a different architecture, so make sure we have a working binary
# in the clean target.
clean:
@echo "Removing rebuildable files"
@rm -rf *.o $(BUILDTMP)/*.o medium.* abbild.* dvdisaster .dvdisaster core core.* *.core
@rm -f inlined-icons.h help-dialogs.h
@find . -name \*\~ -print | xargs rm -f;
@find . -name \*.mo -print | xargs rm -f;
@find . -name \#\*\# -print | xargs rm -f;
@rm -f documentation/config/version.tex
@if test -e $(PKGNAME); then rm -rf $(PKGNAME); fi
@if test -e ~/.dvdisaster-original-author; then \
mv build.h build.saved ;\
if ! test -x simple-md5sum || ! ./simple-md5sum >/dev/null 2>&1; then \
rm -f simple-md5sum; \
$(MAKE) --no-print-directory simple-md5sum; \
echo "[simple-md5sum (re-)built]"; \
fi; \
./simple-md5sum -b *.h *.c >fingerprints.md5 ;\
mv build.saved build.h; \
fi
@rm -f simple-md5sum
@$(MAKE) --no-print-directory -C $(SRCDIR)/documentation/codec-specs clean;
@$(MAKE) --no-print-directory -C $(SRCDIR)/documentation/user-manual clean;
@$(MAKE) --no-print-directory -C $(SRCDIR)/locale clean;
BUILD=`grep BUILD $(SRCDIR)/build.h | cut -d ' ' -f 3`
arch: archclean time-stamp
@cd .. ; tar -c -z -f $(TAR_PREFIX)/$(PKGNAME)-$(BUILD).tgz $(PKGNAME)
INSTALL: documentation/install.template
@sed "s/@@PKGNAME/$(PKGNAME)/" <documentation/install.template >INSTALL
srcdist: INSTALL distclean manual manualclean
@cd .. ; tar -c -j -X $(PKGNAME)/NODIST -f $(TAR_PREFIX)/$(PKGNAME).tar.bz2 $(PKGNAME)
@cd .. ; gpg --homedir .gnupg --default-key 758BCC23 --detach-sign --output $(TAR_PREFIX)/$(PKGNAME).tar.bz2.gpg --armor $(TAR_PREFIX)/$(PKGNAME).tar.bz2
MINGWROOT = $(shell dirname $(CC))/..
windist:
rm -rf dist
mkdir -p dist/lib dist/locale dist/share/themes
for i in libatk-1.0-*.dll libbrotlicommon.dll libbrotlidec.dll libbz2-*.dll libcairo-*.dll libdatrie-*.dll libexpat-*.dll libffi-*.dll libfontconfig-*.dll libfreetype-*.dll libfribidi-*.dll libgcc_s_*.dll libgdk_pixbuf-2.0-*.dll libgdk-win32-2.0-*.dll libgio-2.0-*.dll libglib-2.0-*.dll libgmodule-2.0-*.dll libgobject-2.0-*.dll libgraphite2.dll libgtk-win32-2.0-*.dll libharfbuzz-*.dll libiconv-*.dll libintl-*.dll libpango-1.0-*.dll libpangocairo-1.0-*.dll libpangoft2-1.0-*.dll libpangowin32-1.0-*.dll libpcre-*.dll libpixman-1-*.dll libpng16-*.dll libssp-*.dll libstdc++-*.dll libthai-*.dll libwinpthread-*.dll zlib1.dll; \
do cp -v $(MINGWROOT)/bin/$$i dist/ ; done
cp -v dvdisaster.exe dist/
cp -vr locale/*/ dist/locale/
cp -vr $(MINGWROOT)/share/themes/MS-Windows dist/share/themes/
cp -vr $(MINGWROOT)/lib/gtk-2.0 dist/lib/
find dist -type f -name "*.a" -delete