Blob Blame History Raw
# Author: Erwin Waterlander
#
#   Copyright (C) 2009-2017 Erwin Waterlander
#   All rights reserved.
#
#   Redistribution and use in source and binary forms, with or without
#   modification, are permitted provided that the following conditions
#   are met:
#   1. Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#   2. Redistributions in binary form must reproduce the above copyright
#      notice in the documentation and/or other materials provided with
#      the distribution.
#
#   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
#   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
#   PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
#   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
#   OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
#   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
#   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
#   IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#   Description
#
#       This is a GNU Makefile that uses GNU compilers, linkers and cpp. The
#       platform specific issues are determined by the various OS teets that
#       rely on the uname(1) command and directory locations.
#
#       Set additional flags for the build with variables CFLAGS_USER,
#       DEFS_USER and LDFLAGS_USER.

include version.mk

.PHONY: doc man txt html pdf mofiles tags merge test check

.PRECIOUS: %.1 %.pod

CC              ?= gcc
CPP             ?= cpp
CPP_FLAGS_POD   = ALL
STRIP           = strip

PACKAGE         = dos2unix
UNIX2DOS        = unix2dos
MAC2UNIX        = mac2unix
UNIX2MAC        = unix2mac

# Native Language Support (NLS)
ENABLE_NLS      = 1
# Large File Support (LFS)
LFS             = 1
# DEBUG=1 adds the -g option to CFLAGS, for adding debug symbols.
DEBUG = 0
# DEBUGMSG=1 adds -DDEBUG=1 to CFLAGS, for extra verbose messages.
DEBUGMSG = 0
UCS = 1
DIST_TARGET = dist-tgz

EXE=

BIN             = $(PACKAGE)$(EXE)
UNIX2DOS_BIN    = $(UNIX2DOS)$(EXE)
MAC2UNIX_BIN    = $(MAC2UNIX)$(EXE)
UNIX2MAC_BIN    = $(UNIX2MAC)$(EXE)

LINK            = ln -sf
LINK_MAN        = $(LINK)

prefix          = /usr
exec_prefix     = $(prefix)
bindir          = $(exec_prefix)/bin
datarootdir     = $(prefix)/share
datadir         = $(datarootdir)

docsubdir       = $(PACKAGE)-$(DOS2UNIX_VERSION)
docdir          = $(datarootdir)/doc/$(docsubdir)
localedir       = $(datarootdir)/locale
mandir          = $(datarootdir)/man
man1dir         = $(mandir)/man1
manext          = .1
man1ext         = .1

ifdef ENABLE_NLS
        POT             = po/$(PACKAGE).pot
        POFILES         = $(wildcard po/??.po) $(wildcard po/??_??.po)
        MOFILES         = $(patsubst %.po,%.mo,$(POFILES))
        NLSSUFFIX       = -nls
endif

HTMLEXT = htm
# English only documents.
INSTALL_OBJS_DOC = README.txt INSTALL.txt NEWS.txt ChangeLog.txt COPYING.txt TODO.txt BUGS.txt

# English manual
MANFILES_EN = man/man1/$(PACKAGE).1
TXTFILES_EN = man/man1/$(PACKAGE).txt
HTMLFILES_EN = man/man1/$(PACKAGE).$(HTMLEXT)
PSFILES_EN = man/man1/$(PACKAGE).ps
PDFFILES_EN = man/man1/$(PACKAGE).pdf

# International manuals
ifdef ENABLE_NLS
        MANPOTFILE      = po-man/dos2unix-man.pot
        MANPOFILES      = $(wildcard po-man/*.po)
        MANPODFILES     = $(patsubst po-man/%.po,man/%/man1/dos2unix.pod,$(MANPOFILES))
endif
MANFILES        = $(patsubst %.pod,%.1,$(MANPODFILES))
TXTFILES        = $(patsubst %.pod,%.txt,$(MANPODFILES))
HTMLFILES       = $(patsubst %.pod,%.$(HTMLEXT),$(MANPODFILES))
PSFILES         = $(patsubst %.pod,%.ps,$(MANPODFILES))
PDFFILES        = $(patsubst %.pod,%.pdf,$(MANPODFILES))

# On some systems (e.g. FreeBSD 4.10) GNU install is installed as `ginstall'.
INSTALL         = install
INSTALL_PROGRAM = $(INSTALL) -m 755
INSTALL_DATA    = $(INSTALL) -m 644

# On some systems (e.g. GNU Win32) GNU mkdir is installed as `gmkdir'.
MKDIR           = mkdir

ifdef ENABLE_NLS
        DOS2UNIX_NLSDEFS = -DENABLE_NLS -DLOCALEDIR=\"$(localedir)\" -DPACKAGE=\"$(PACKAGE)\"
endif

VERSIONSUFFIX   = -bin

# ......................................................... OS flags ...


ifndef D2U_OS
        d2u_os=$(shell uname -s)

ifeq ($(findstring CYGWIN,$(d2u_os)),CYGWIN)
        D2U_OS = cygwin
endif

ifndef D2U_OS
ifeq ($(findstring MSYS,$(d2u_os)),MSYS)
        D2U_OS = msys
endif
endif

ifndef D2U_OS
ifeq ($(findstring MINGW32,$(d2u_os)),MINGW32)
        D2U_OS = mingw32
endif
endif

ifndef D2U_OS
ifeq ($(findstring MINGW64,$(d2u_os)),MINGW64)
        D2U_OS = mingw64
endif
endif

ifndef D2U_OS
ifneq ($(DJGPP),)
        D2U_OS = msdos
endif
endif

ifndef D2U_OS
ifneq (, $(wildcard /opt/csw))
        D2U_OS = sun
endif
endif

ifndef D2U_OS
        D2U_OS=$(shell echo $(d2u_os) | tr [A-Z] [a-z])
endif

endif

ifeq (cygwin,$(D2U_OS))
ifdef ENABLE_NLS
        LIBS_EXTRA = -lintl -liconv
endif
        LDFLAGS_EXTRA = -Wl,--enable-auto-import
        EXE = .exe
        # allow non-cygwin clients which do not understand cygwin
        # symbolic links to launch applications...
        LINK = ln -f
        # but use symbolic links for man pages, since man client
        # IS a cygwin app and DOES understand symlinks.
        LINK_MAN = ln -fs
        # Cygwin packaging standard avoids version numbers on
        # documentation directories.
        docsubdir       = $(PACKAGE)
        MACHINE := $(subst -pc-cygwin,,$(shell gcc -dumpmachine))
        VERSIONSUFFIX   = -cygwin-$(MACHINE)
endif

ifeq (msys,$(D2U_OS))
        CC=gcc
        EXE = .exe
        MACHINE := $(subst -pc-msys,,$(shell gcc -dumpmachine))
# MSYS 1 does not support locales and no Unicode.
ifeq ($(shell ./test/chk_loc.sh en_US.utf8),no)
        UCS =
        VERSIONSUFFIX = -msys1-$(MACHINE)
else
        VERSIONSUFFIX = -msys2-$(MACHINE)
endif
ifdef ENABLE_NLS
        LIBS_EXTRA = -lintl -liconv
endif
endif

ifeq (mingw32,$(D2U_OS))
        CC=gcc
        prefix=c:/usr/local
        EXE = .exe
        VERSIONSUFFIX = -win32
        LINK = cp -f
        UNIFILE=1
        DIST_TARGET = dist-zip
ifdef ENABLE_NLS
        LIBS_EXTRA = -lintl -liconv
        ZIPOBJ_EXTRA = bin/libintl-8.dll bin/libiconv-2.dll
endif
ifeq ($(findstring w64-mingw32,$(shell gcc -dumpmachine)),w64-mingw32)
# Mingw-w64
        CFLAGS_COMPILER = -DD2U_COMPILER=MINGW32_W64
ifdef ENABLE_NLS
        ZIPOBJ_EXTRA += bin/libgcc_s_dw2-1.dll bin/libwinpthread-1.dll
endif
        CRT_GLOB_OBJ = /mingw32/i686-w64-mingw32/lib/CRT_glob.o
        LIBS_EXTRA += $(CRT_GLOB_OBJ)
        CFLAGS_OS=-I/mingw32/include
else
        CFLAGS_OS=-D_O_U16TEXT=0x20000
endif
endif

ifeq (mingw64,$(D2U_OS))
        CC=gcc
        prefix=c:/usr/local64
        EXE = .exe
        VERSIONSUFFIX = -win64
        LINK = cp -f
        UNIFILE=1
        DIST_TARGET = dist-zip
ifdef ENABLE_NLS
        LIBS_EXTRA = -lintl -liconv
        ZIPOBJ_EXTRA = bin/libintl-8.dll bin/libiconv-2.dll
endif
        CRT_GLOB_OBJ = /mingw64/x86_64-w64-mingw32/lib/CRT_glob.o
        LIBS_EXTRA += $(CRT_GLOB_OBJ)
        CFLAGS_OS=-I/mingw64/include
endif

ifeq (msdos,$(D2U_OS))
        prefix=c:/dos32
        EXE = .exe
        VERSIONSUFFIX = pm
        LINK_MAN = cp -f
        docsubdir = dos2unix
        UCS =
        ZIPOBJ_EXTRA = bin/cwsdpmi.exe
ifdef ENABLE_NLS
        LIBS_EXTRA = -lintl -liconv
endif
endif

ifeq (os/2,$(D2U_OS))
        prefix=c:/usr
        EXE = .exe
        VERSIONSUFFIX = -os2
        LINK_MAN = cp -f
        UCS =
        LDFLAGS_EXTRA = -Zargs-wild
        DIST_TARGET = dist-zip
ifdef ENABLE_NLS
        LIBS_EXTRA += -lintl -liconv
endif
endif

ifeq (freemint,$(D2U_OS))
        prefix=/usr
        EXE =
        VERSIONSUFFIX = -freemint
        UCS=
        ENABLE_NLS=
ifdef ENABLE_NLS
        LIBS_EXTRA += -lintl -liconv
endif
        EXTRA_DEFS += -Dfreemint -D__OS=\"freemint\"
endif

ifeq (freebsd,$(D2U_OS))
ifdef ENABLE_NLS
        CFLAGS_OS     = -I/usr/local/include
        LDFLAGS_EXTRA = -L/usr/local/lib
        LIBS_EXTRA    = -lintl
endif
endif

ifeq (darwin,$(D2U_OS))
ifdef ENABLE_NLS
        CFLAGS_OS     = -I/usr/local/include
        LDFLAGS_EXTRA = -L/usr/local/lib
        LIBS_EXTRA    = -lintl
endif
endif

ifeq (sun,$(D2U_OS))
        # Running under SunOS/Solaris
        LIBS_EXTRA = -lintl
endif

ifeq (hp-ux,$(D2U_OS))
        # Running under HP-UX
        EXTRA_DEFS += -Dhpux -D_HPUX_SOURCE
endif


# ............................................................ flags ...

# PostScript and PDF generation from UTF-8 manuals is not working,
# or I don't know how to do it.

CFLAGS_USER     =
ifeq ($(DEBUG), 1)
CFLAGS          ?= -O0
else
CFLAGS          ?= -O2
endif
CFLAGS          += -Wall -Wextra -Wconversion $(RPM_OPT_FLAGS) $(CPPFLAGS) $(CFLAGS_USER)

EXTRA_CFLAGS    = -DVER_REVISION=\"$(DOS2UNIX_VERSION)\" \
                  -DVER_DATE=\"$(DOS2UNIX_DATE)\" \
                  -DVER_AUTHOR=\"$(DOS2UNIX_AUTHOR)\" \
                  -DDEBUG=$(DEBUGMSG) \
                  $(CFLAGS_OS) \
                  $(CFLAGS_COMPILER)

ifeq ($(DEBUG), 1)
        EXTRA_CFLAGS += -g
endif

ifdef STATIC
        EXTRA_CFLAGS += -static
endif

ifdef UCS
        EXTRA_CFLAGS += -DD2U_UNICODE
endif
ifdef UNIFILE
        EXTRA_CFLAGS += -DD2U_UNIFILE
endif


ifdef LFS
        EXTRA_CFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
endif

LDFLAGS_USER    =
LDFLAGS = $(RPM_OPT_FLAGS) $(LDFLAGS_EXTRA) $(LDFLAGS_USER) $(RPM_LD_FLAGS)
LIBS    = $(LIBS_EXTRA)

DEFS_USER       =
DEFS            = $(EXTRA_DEFS) $(DEFS_USER)

# .......................................................... targets ...

all: $(BIN) $(MAC2UNIX_BIN) $(UNIX2DOS_BIN) $(UNIX2MAC_BIN) doc \
     mofiles man

status:
	@echo "D2U_OS       = $(D2U_OS)"
	@echo "UCS          = $(UCS)"
	@echo "CFLAGS       = $(CFLAGS)"
	@echo "EXTRA_CFLAGS = $(EXTRA_CFLAGS)"
	@echo "LDFLAGS      = $(LDFLAGS)"
	@echo "LIBS         = $(LIBS)"

common.o : common.c common.h dos2unix.h unix2dos.h version.mk
	$(CC) $(DEFS) $(EXTRA_CFLAGS) $(DOS2UNIX_NLSDEFS) $(CFLAGS) -c $< -o $@

querycp.o : querycp.c querycp.h
	$(CC) $(DEFS) $(EXTRA_CFLAGS) $(DOS2UNIX_NLSDEFS) $(CFLAGS) -c $< -o $@

dos2unix.o : dos2unix.c dos2unix.h querycp.h common.h
	$(CC) $(DEFS) $(EXTRA_CFLAGS) $(DOS2UNIX_NLSDEFS) $(CFLAGS) -c $< -o $@

unix2dos.o : unix2dos.c unix2dos.h querycp.h common.h
	$(CC) $(DEFS) $(EXTRA_CFLAGS) $(DOS2UNIX_NLSDEFS) $(CFLAGS) -c $< -o $@

$(BIN): dos2unix.o querycp.o common.o
	$(CC) $+ $(LDFLAGS) $(LIBS) -o $@

$(UNIX2DOS_BIN): unix2dos.o querycp.o common.o
	$(CC) $+ $(LDFLAGS) $(LIBS) -o $@

# DJGPP supports linking of .EXEs via 'stubify'.
# See djgpp.mak and http://www.delorie.com/djgpp/v2faq/faq22_5.html
# ln -s does automatic stubify in DJGPP 2.03.
# This changed in DJGPP 2.05. DJGPP 2.05 emulates symbolic links.

$(MAC2UNIX_BIN) : $(BIN)
ifneq ($(DJGPP),)
	stubify -g $@ ; stubedit $@ runfile=$<
else
	$(LINK) $< $@
endif


$(UNIX2MAC_BIN) : $(UNIX2DOS_BIN)
ifneq ($(DJGPP),)
	stubify -g $@ ; stubedit $@ runfile=$<
else
	$(LINK) $< $@
endif

$(MANPOTFILE) : man/man1/dos2unix.pod
	$(MAKE) -C man/man1 ../../po-man/$(notdir $@)

#  WARNING: Backward-incompatibility since GNU make 3.82.
#  The pattern-specific variables and pattern rules are now applied in the
#  shortest stem first order instead of the definition order (variables
#  and rules with the same stem length are still applied in the definition
#  order).
#  In order to stay compatible with GNU make < 3.82 we put the rule with
#  the shortest stem first.

po/%.po : $(POT)
	msgmerge --no-wrap -U $@ $(POT) --backup=numbered
	# change timestamp in case .po file was not updated.
	touch $@

%.po : man/man1/dos2unix.pod
	$(MAKE) -C man/man1 $(subst po-man/,../../po-man/,$@)

man/%/man1/dos2unix.pod : po-man/%.po
	$(MAKE) -C man/man1 $(subst man/,../,$@)

# empty recipe to break circular dependency
man/man1/dos2unix.pod : ;

%.1 : %.pod
	$(MAKE) -C man/man1 PODCENTER=$(DOS2UNIX_DATE) $(subst man/,../,$@)

mofiles: $(MOFILES)

html: $(HTMLFILES_EN) $(HTMLFILES)

txt: $(TXTFILES_EN) $(TXTFILES)

ps: $(PSFILES_EN) $(PSFILES)

pdf: $(PDFFILES_EN) $(PDFFILES)

man: $(MANFILES_EN) $(MANFILES) $(MANPOTFILE)

doc: txt html

tags: $(POT)

merge: $(POFILES)

# Get new po files from the Translation Project.
getpo:
	rsync -Lrtvz  translationproject.org::tp/latest/dos2unix/  po/incoming/

getpoman:
	rsync -Lrtvz  translationproject.org::tp/latest/dos2unix-man/  po-man/incoming/

%.mo : %.po
	msgfmt -c $< -o $@

$(POT) : dos2unix.c unix2dos.c common.c
	xgettext -C -cTRANSLATORS: --no-wrap --keyword=_ $+ -o $(POT)

%.txt : %.pod
	pod2text $< > $@

README.txt INSTALL.txt NEWS.txt ChangeLog.txt COPYING.txt TODO.txt BUGS.txt: ;

%.ps : %.1
	groff -man $< -T ps > $@

%.pdf: %.ps
	ps2pdf $< $@

# Since perl 5.18 pod2html generates HTML with all non-ASCII characters encoded
# with HTML Ampersand Character Codes. This seems to be better browser compatible
# than HTML in UTF-8 format. PERL_UNICODE=SDA is needed to get a correct UTF-8
# encoded title.
# With perl < 5.18 you have to remove PERL_UNICODE=SDA, and then you get HTML pages
# in UTF-8 format.

# Generic rule.
%.$(HTMLEXT) : %.pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - DOS/MAC to UNIX and vice versa text file format converter" $< > $@

man/de/man1/$(PACKAGE).$(HTMLEXT) : man/de/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - Formatumwandlung für Textdateien von DOS/Mac nach Unix und umgekehrt" $< > $@

man/es/man1/$(PACKAGE).$(HTMLEXT) : man/es/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - Convertidor de archivos de texto de formato DOS/Mac a Unix y viceversa" $< > $@

man/fr/man1/$(PACKAGE).$(HTMLEXT) : man/fr/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - Convertit les fichiers textes du format DOS/Mac vers Unix et inversement" $< > $@

man/nl/man1/$(PACKAGE).$(HTMLEXT) : man/nl/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - DOS/Mac naar Unix en vice versa tekstbestand formaat omzetter" $< > $@

man/pl/man1/$(PACKAGE).$(HTMLEXT) : man/pl/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - konwerter formatu plików tekstowych między systemami DOS/Mac a Uniksem" $< > $@

man/pt_BR/man1/$(PACKAGE).$(HTMLEXT) : man/pt_BR/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - Conversor de formato de arquivo texto de DOS/Mac para Unix e vice-versa" $< > $@

man/uk/man1/$(PACKAGE).$(HTMLEXT) : man/uk/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - програма для перетворення даних у текстовому форматі DOS/Mac у формат Unix, і навпаки" $< > $@

man/zh_CN/man1/$(PACKAGE).$(HTMLEXT) : man/zh_CN/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - DOS/Mac - Unix文件格式转换器" $< > $@

man/sv/man1/$(PACKAGE).$(HTMLEXT) : man/sv/man1/$(PACKAGE).pod
	PERL_UNICODE=SDA pod2html --title="$(PACKAGE) $(DOS2UNIX_VERSION) - textfilsformatskonverterare från DOS/Mac till Unix och vice versa" $< > $@

test: all
ifneq ($(DJGPP),)
	cd test; $(MAKE) test UCS= SHELL=$(shell which sh)
else
	cd test; $(MAKE) test UCS=$(UCS)
endif

check: test

install-bin: $(BIN) $(MAC2UNIX_BIN) $(UNIX2DOS_BIN) $(UNIX2MAC_BIN)
	$(MKDIR) -p -m 755 $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) $(BIN) $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) $(UNIX2DOS_BIN) $(DESTDIR)$(bindir)
ifneq ($(DJGPP),)
	cd $(DESTDIR)$(bindir); stubify -g $(MAC2UNIX_BIN) ; stubedit $(MAC2UNIX_BIN) runfile=$(BIN)
	cd $(DESTDIR)$(bindir); stubify -g $(UNIX2MAC_BIN) ; stubedit $(UNIX2MAC_BIN) runfile=$(UNIX2DOS_BIN)
else
ifeq ($(LINK),cp -f)
	$(INSTALL_PROGRAM) $(MAC2UNIX_BIN) $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) $(UNIX2MAC_BIN) $(DESTDIR)$(bindir)
else
	cd $(DESTDIR)$(bindir); $(LINK) $(BIN) $(MAC2UNIX_BIN)
	cd $(DESTDIR)$(bindir); $(LINK) $(UNIX2DOS_BIN) $(UNIX2MAC_BIN)
endif
endif


install-man: man
	$(MKDIR) -p -m 755 $(DESTDIR)$(man1dir)
	$(INSTALL_DATA) $(MANFILES_EN) $(DESTDIR)$(man1dir)
ifeq ($(LINK_MAN),cp -f)
	$(INSTALL_DATA) $(MANFILES_EN) $(DESTDIR)$(man1dir)/$(MAC2UNIX).1
	$(INSTALL_DATA) $(MANFILES_EN) $(DESTDIR)$(man1dir)/$(UNIX2DOS).1
	$(INSTALL_DATA) $(MANFILES_EN) $(DESTDIR)$(man1dir)/$(UNIX2MAC).1
else
	cd $(DESTDIR)$(man1dir); $(LINK_MAN) $(PACKAGE).1 $(MAC2UNIX).1
	cd $(DESTDIR)$(man1dir); $(LINK_MAN) $(PACKAGE).1 $(UNIX2DOS).1
	cd $(DESTDIR)$(man1dir); $(LINK_MAN) $(PACKAGE).1 $(UNIX2MAC).1
endif
ifdef ENABLE_NLS
	$(foreach manfile, $(MANFILES), $(MKDIR) -p -m 755 $(DESTDIR)$(datarootdir)/$(dir $(manfile)) ;)
	$(foreach manfile, $(MANFILES), $(INSTALL_DATA) $(manfile) $(DESTDIR)$(datarootdir)/$(dir $(manfile)) ;)
	$(foreach manfile, $(MANFILES), cd $(DESTDIR)$(datarootdir)/$(dir $(manfile)) ; $(LINK_MAN) $(PACKAGE).1 $(MAC2UNIX).1 ;)
	$(foreach manfile, $(MANFILES), cd $(DESTDIR)$(datarootdir)/$(dir $(manfile)) ; $(LINK_MAN) $(PACKAGE).1 $(UNIX2DOS).1 ;)
	$(foreach manfile, $(MANFILES), cd $(DESTDIR)$(datarootdir)/$(dir $(manfile)) ; $(LINK_MAN) $(PACKAGE).1 $(UNIX2MAC).1 ;)
endif

install-mo: mofiles
ifdef ENABLE_NLS
	@echo "-- install-mo"
	$(foreach mofile, $(MOFILES), $(MKDIR) -p -m 755 $(DESTDIR)$(localedir)/$(basename $(notdir $(mofile)))/LC_MESSAGES ;)
	$(foreach mofile, $(MOFILES), $(INSTALL_DATA) $(mofile) $(DESTDIR)$(localedir)/$(basename $(notdir $(mofile)))/LC_MESSAGES/$(PACKAGE).mo ;)
endif

install-doc: doc
	@echo "-- install-doc"
	$(MKDIR) -p -m 755 $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(INSTALL_OBJS_DOC) $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(TXTFILES_EN) $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(HTMLFILES_EN) $(DESTDIR)$(docdir)
ifdef ENABLE_NLS
	$(foreach txtfile, $(TXTFILES), $(MKDIR) -p -m 755 $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(txtfile),)) ;)
	$(foreach txtfile, $(TXTFILES), $(INSTALL_DATA) $(txtfile) $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(txtfile),)) ;)
	$(foreach htmlfile, $(HTMLFILES), $(MKDIR) -p -m 755 $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(htmlfile),)) ;)
	$(foreach htmlfile, $(HTMLFILES), $(INSTALL_DATA) $(htmlfile) $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(htmlfile),)) ;)
endif

# No dependency. Install pdf/ps only when they have been manually generated.
install-pdf:
	@echo "-- install-pdf"
	$(MKDIR) -p -m 755 $(DESTDIR)$(docdir)
	$(foreach pdffile, $(wildcard man/man1/*.pdf), $(INSTALL_DATA) $(pdffile) $(DESTDIR)$(docdir) ;)
	$(foreach psfile, $(wildcard man/man1/*.ps), $(INSTALL_DATA) $(psfile) $(DESTDIR)$(docdir) ;)
ifdef ENABLE_NLS
	$(foreach pdffile, $(wildcard man/*/man1/*.pdf), $(MKDIR) -p -m 755 $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(pdffile),)) ;)
	$(foreach pdffile, $(wildcard man/*/man1/*.pdf), $(INSTALL_DATA) $(pdffile) $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(pdffile),)) ;)
	$(foreach psfile, $(wildcard man/*/man1/*.ps), $(MKDIR) -p -m 755 $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(psfile),)) ;)
	$(foreach psfile, $(wildcard man/*/man1/*.ps), $(INSTALL_DATA) $(psfile) $(DESTDIR)$(docdir)/$(word 2,$(subst /, ,$(psfile),)) ;)
endif

install: install-bin install-man install-mo install-doc
	# Run a new instance of 'make' otherwise the $$(wildcard ) function my not have been expanded,
	# because the files may not have been there when make was started.
	$(MAKE) install-pdf

uninstall:
	@echo "-- target: uninstall"
	-rm -f $(DESTDIR)$(bindir)/$(BIN)
	-rm -f $(DESTDIR)$(bindir)/$(MAC2UNIX_BIN)
	-rm -f $(DESTDIR)$(bindir)/$(UNIX2DOS_BIN)
	-rm -f $(DESTDIR)$(bindir)/$(UNIX2MAC_BIN)
	-rm -f $(DESTDIR)$(mandir)/man1/$(PACKAGE).1
	-rm -f $(DESTDIR)$(mandir)/man1/$(MAC2UNIX).1
	-rm -f $(DESTDIR)$(mandir)/man1/$(UNIX2DOS).1
	-rm -f $(DESTDIR)$(mandir)/man1/$(UNIX2MAC).1
	-rm -rf $(DESTDIR)$(docdir)
ifdef ENABLE_NLS
	$(foreach mofile, $(MOFILES), rm -f $(DESTDIR)$(localedir)/$(basename $(notdir $(mofile)))/LC_MESSAGES/$(PACKAGE).mo ;)
	$(foreach manfile, $(MANFILES), rm -f $(DESTDIR)$(datarootdir)/$(manfile) ;)
	$(foreach manfile, $(MANFILES), rm -f $(DESTDIR)$(datarootdir)/$(dir $(manfile))$(MAC2UNIX).1 ;)
	$(foreach manfile, $(MANFILES), rm -f $(DESTDIR)$(datarootdir)/$(dir $(manfile))$(UNIX2DOS).1 ;)
	$(foreach manfile, $(MANFILES), rm -f $(DESTDIR)$(datarootdir)/$(dir $(manfile))$(UNIX2MAC).1 ;)
endif

mostlyclean:
	rm -f *.o
	rm -f $(BIN) $(UNIX2DOS_BIN) $(MAC2UNIX_BIN) $(UNIX2MAC_BIN)
	rm -f *.bak *~
	rm -f *.tmp
	rm -f man/man1/*.bak man/man1/*~
	rm -f man/*/man1/*.bak man/*/man1/*~
	rm -f po/*.bak po/*~
	rm -f po/*.mo po-man/*~
	cd test; $(MAKE) clean

# Don't distribute PostScript and PDF manuals in the source package.
# We don't want binary PDF files in the source package, because
# some packagers check in the source files. PostScript is not used
# a lot.

clean: mostlyclean
	rm -f man/man1/*.ps
	rm -f man/man1/*.pdf
	rm -f man/*/man1/*.ps
	rm -f man/*/man1/*.pdf

distclean: clean

# Because there is so much trouble with generating man pages with
# pod2man, due to old Perl versions (< 5.10.1) on many systems, I include the
# man pages in the source tar file.
# Old pod2man versions do not have the --utf8 option. Old pod2man, pod2text,
# and pod2html do not support the =encoding command.
# Perl 5.18 pod2man demands an =encoding command for Latin-1 encoded POD files.
#
# Newer perl/pod2man versions produce better output. It is better to include
# man pages in the source package, than that people generate them themselves
# with old perl versions.

maintainer-clean: distclean
	@echo 'This command is intended for maintainers to use; it'
	@echo 'deletes files that may need special tools to rebuild.'
	rm -f man/man1/*.1
	rm -f man/man1/*.txt
	rm -f man/man1/*.$(HTMLEXT)
	rm -f po-man/dos2unix-man.pot
	rm -f man/*/man1/*.1
	rm -f man/*/man1/*.txt
	rm -f man/*/man1/*.pod
	rm -f man/*/man1/*.$(HTMLEXT)

realclean: maintainer-clean


ZIPOBJ  = bin/$(BIN) \
          bin/$(MAC2UNIX_BIN) \
          bin/$(UNIX2DOS_BIN) \
          bin/$(UNIX2MAC_BIN) \
          share/man/man1/$(PACKAGE).1 \
          share/man/man1/$(MAC2UNIX).1 \
          share/man/man1/$(UNIX2DOS).1 \
          share/man/man1/$(UNIX2MAC).1 \
          share/doc/$(docsubdir)/*.* \
          $(ZIPOBJ_EXTRA)

ifdef ENABLE_NLS
ZIPOBJ += share/locale/*/LC_MESSAGES/$(PACKAGE).mo
ZIPOBJ += share/man/*/man1/$(PACKAGE).1 \
          share/man/*/man1/$(MAC2UNIX).1 \
          share/man/*/man1/$(UNIX2DOS).1 \
          share/man/*/man1/$(UNIX2MAC).1
ZIPOBJ += share/doc/$(docsubdir)/*/*
endif

ZIPFILE = $(PACKAGE)-$(DOS2UNIX_VERSION)$(VERSIONSUFFIX)$(NLSSUFFIX).zip
TGZFILE = $(PACKAGE)-$(DOS2UNIX_VERSION)$(VERSIONSUFFIX)$(NLSSUFFIX).tar.gz
TBZFILE = $(PACKAGE)-$(DOS2UNIX_VERSION)$(VERSIONSUFFIX)$(NLSSUFFIX).tar.bz2

dist-convert/%:
	rm -f $(prefix)/$(ZIPFILE)
	cd $(prefix) ; $* --keepdate share/man/man1/$(PACKAGE).1 share/man/man1/$(MAC2UNIX).1 share/man/man1/$(UNIX2DOS).1 share/man/man1/$(UNIX2MAC).1
	cd $(prefix) ; $* --keepdate --add-bom share/doc/$(docsubdir)/*.txt
	cd $(prefix) ; $* --keepdate share/doc/$(docsubdir)/*.$(HTMLEXT)
ifdef ENABLE_NLS
	cd $(prefix) ; $* --keepdate share/man/*/man1/$(PACKAGE).1 share/man/*/man1/$(MAC2UNIX).1 share/man/*/man1/$(UNIX2DOS).1 share/man/*/man1/$(UNIX2MAC).1
	cd $(prefix) ; $* --keepdate --add-bom share/doc/$(docsubdir)/*/*.txt
	cd $(prefix) ; $* --keepdate share/doc/$(docsubdir)/*/*.$(HTMLEXT)
endif

dist-zip: dist-convert/unix2dos
	cd $(prefix) ; zip -r $(ZIPFILE) $(ZIPOBJ)
	mv -f $(prefix)/$(ZIPFILE) ..

dist-tgz: dist-convert/dos2unix
	cd $(prefix) ; tar cvzf $(TGZFILE) $(ZIPOBJ)
	mv $(prefix)/$(TGZFILE) ..

dist-tbz: dist-convert/dos2unix
	cd $(prefix) ; tar cvjf $(TBZFILE) $(ZIPOBJ)
	mv $(prefix)/$(TBZFILE) ..

dist: $(DIST_TARGET)

strip:
	$(STRIP) $(BIN)
	$(STRIP) $(UNIX2DOS_BIN)
ifeq ($(LINK),cp -f)
	$(STRIP) $(MAC2UNIX_BIN)
	$(STRIP) $(UNIX2MAC_BIN)
endif

# End of file