diff options
Diffstat (limited to '')
| -rw-r--r-- | mk/README | 71 | ||||
| -rw-r--r-- | mk/all.mk | 33 | ||||
| -rw-r--r-- | mk/clean.mk | 45 | ||||
| -rw-r--r-- | mk/configure | 733 | ||||
| -rw-r--r-- | mk/copy.mk | 78 | ||||
| -rw-r--r-- | mk/dist.mk | 189 | ||||
| -rw-r--r-- | mk/empty.mk | 94 | ||||
| -rw-r--r-- | mk/i18n.mk | 111 | ||||
| -rw-r--r-- | mk/lang-c.mk | 207 | ||||
| -rw-r--r-- | mk/lowerpath.mk | 279 | ||||
| -rw-r--r-- | mk/man.mk | 111 | ||||
| -rw-r--r-- | mk/path.mk | 176 | ||||
| -rw-r--r-- | mk/prologue.mk | 16 | ||||
| -rw-r--r-- | mk/shell.mk | 233 | ||||
| -rw-r--r-- | mk/tags.mk | 25 | ||||
| -rw-r--r-- | mk/texinfo.mk | 287 | ||||
| -rw-r--r-- | mk/tools.mk | 163 | 
17 files changed, 2851 insertions, 0 deletions
| diff --git a/mk/README b/mk/README new file mode 100644 index 0000000..e79926d --- /dev/null +++ b/mk/README @@ -0,0 +1,71 @@ +This is a collection of generic enough makefiles. +Please feel free to use them in your project. + +Usage: +	Include all.mk from your makefile. + +	Read the top of each file for details. + +	Define the variables: + +		_VERSION +		This version of the package. + +		_PROJECT +		The name of the project. Must only include [a-z0-9_-]. + +		_PROJECT_FULL +		The name of the project. May include any character. + +		_SRC +		All source code files. This list is used when +		generating the translation template file. + +		_COPYRIGHT_HOLDER +		The copyright holder's full name and e-mail address. + +		COMMAND +		The name of the command. Must not be declared if +		the package does not include exactly one runnable +		command. + +		PKGNAME +		The name of the package. + +	Variables beginning with __ are used internally by +	the files where they appear, or in rare cases, +	internally between these files. + +	Variables beginning with _ but not __ are set in the +	makefile to specify for these files how they should +	behave. They should not be changed by a user of the +	package. + +	Variables that do not begin with _ are configurable +	by the user of the package. + +	Do no use single character variables in your Makefile. + +	To suppress pre-install, post-install, pre-uninstall, +	and post-uninstall instructions, set N=true. +	PRE_INSTALL, POST_INSTALL, PRE_UNINSTALL, and +	POST_UNINSTALL are supportered as specified by the +	GNU coding standardars. + +	To figure out what pre-install commands to run in your package, run: +		 make -n a=% install | sed -e 's/\\$//' -e 's/^ *//' | sed -n '/^% /s/^..//p' + +	To figure out what post-install commands to run in your package, run: +		 make -n z=% uninstall | sed -e 's/\\$//' -e 's/^ *//' | sed -n '/^% /s/^..//p' + +	To figure out what pre-uninstall commands to run in your package, run: +		 make -n a=% uninstall | sed -e 's/\\$//' -e 's/^ *//' | sed -n '/^% /s/^..//p' + +	To figure out what post-uninstall commands to run in your package, run: +		 make -n z=% uninstall | sed -e 's/\\$//' -e 's/^ *//' | sed -n '/^% /s/^..//p' + +	To suppress verbatim which commands Make runs, +	set Q=@. (Excluding the period.) + +Developers should use DEBUG=1 when running make, when possible. + diff --git a/mk/all.mk b/mk/all.mk new file mode 100644 index 0000000..9e21e7d --- /dev/null +++ b/mk/all.mk @@ -0,0 +1,33 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file includes all the other files in appropriate order. ===# + + +ifndef Q +A = \e[35m +Z = [m +endif + +include $(v)mk/path.mk +include .config.mk +include $(v)mk/path.mk +include $(v)mk/lowerpath.mk +include $(v)mk/empty.mk +include $(v)mk/tools.mk +include $(v)mk/copy.mk +include $(v)mk/lang-c.mk +include $(v)mk/texinfo.mk +include $(v)mk/man.mk +include $(v)mk/i18n.mk +include $(v)mk/shell.mk +include $(v)mk/clean.mk +include $(v)mk/dist.mk +include $(v)mk/tags.mk +include $(v)mk/prologue.mk + diff --git a/mk/clean.mk b/mk/clean.mk new file mode 100644 index 0000000..d0a97c4 --- /dev/null +++ b/mk/clean.mk @@ -0,0 +1,45 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for cleaning the repository of generated files. ===# + + +# Delete all files are normally created during a build. +.PHONY: clean +clean: clean-dist +	@$(PRINTF_INFO) '\e[00;01;31mCLEANING BUILT FILES\e[34m\e[00m\n' +	-$(Q)$(RM) -r -- bin aux +	@$(ECHO) + +# Delete all files that are created during configuration or building. +.PHONY: distclean +distclean: clean +	@$(PRINTF_INFO) '\e[00;01;31mCLEANING CONFIGURATIONS\e[34m\e[00m\n' +	-$(Q)$(RM) -- .config.mk config.status Makefile +	@$(ECHO) + +# Like `make clean` but do not remove massive binaries +# that are seldom recompiled. +.PHONY: mostlyclean +mostlyclean: clean + +# Delete everything except ./configure +.PHONY: maintainer-clean +maintainer-clean: clean distclean +	@$(ECHO) +	@$(ECHO) 'This command is intended for maintainers to use; it' +	@$(ECHO) 'deletes files that may need special tools to rebuild.' +	@$(ECHO) + +# Delete all files generated by `make dist` +.PHONY: clean-dist +clean-dist: +	@$(PRINTF_INFO) '\e[00;01;31mCLEANING RELEASES\e[34m\e[00m\n' +	-$(Q)$(RM) -r -- $(_PROJECT)-*.tar* $(_PROJECT)-*.checksums* $(_PROJECT)-* +	@$(ECHO) + diff --git a/mk/configure b/mk/configure new file mode 100644 index 0000000..732163e --- /dev/null +++ b/mk/configure @@ -0,0 +1,733 @@ +# -*- shell-script -*- + +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +# Run './configure --help' for usage information. + + +#   FOR DEVELOPERS USING THIS SCRIPT: +# This file is used by include this file, via the . builtin, +# in your ./configure. Before doing so, you must declare +#   PKGNAME=the_name_of_your_package +#   MAN_SECTION_SUFFIX=default_suffix_to_append_to_man_page_section # (usually empty) +#   MAN_SECTION=the_section_your_man_page_is_in # (do no declare if you do not use exacly one section) +#   Define the function list_optional_features_help, see the help output. +#   Define the function unrecognised_argument to deal with any unrecognised argument. + + + +# Store command for rebuilding Makefile to config.status. +exec 10>config.status + +# Store configurations to .config.mk. +exec 20>.config.mk + + +# Print a quoted (if necessary) version of a string +quote () +{ +    value="$1" +    if ! test "${value%%\'*}" = "${value}"; then +	value="'$(echo "${value}" | sed "s/'/'\\\\''/g")'" +    elif ! test "$(printf '%s' ${value})" = "${value}"; then +	value="'${value}'" +    fi +    echo "${value}" +} + + +# Parse command line. +incomplete= +dashed= +f_help= +f_gnulinux= +f_bin_merger= +for option; do +    if test -n "${incomplete}"; then +	option="${incomplete}=${option}" +	incomplete= +    fi +     +    # For --{with{,out},{en,dis}able}-*. +    feature="${option#--*}" +    feature="${feature#*-}" +    feature="$(echo "${feature}" | tr qwertyuiopasdfghjklzxcvbnm- QWERTYUIOPASDFGHJKLZXCVBNM_)" +     +    # For directories and filename tweaks. +    nodash=_novar +     +    case "${dashed}${option}" in +# general +	(--) +	    dashed=yes ;; +	(--help) +	    f_help=yes ;; +	(--destdir | --destdir=* | --pkgdir | --pkgdir=*) +	    nodash=destdir ;; +	(--srcdir | --srcdir) +	    nodash=srcdir ;; + +# directory automation +	(--gnu-linux) +	    f_gnulinux=yes ;; +	(--bin-merger) +	    f_bin_merger=yes ;; + +# directories and filenames +	(--prefix | --prefix=*) +	    nodash=prefix ;; +	(--exec-prefix | --exec-prefix=* | --exec_prefix | --exec_prefix=*) +	    nodash=exec_prefix ;; +	(--bindir | --bindir=*) +	    nodash=bindir ;; +	(--sbindir | --sbindir=*) +	    nodash=sbindir ;; +	(--libexecdir | --libexecdir=*) +	    nodash=libexecdir ;; +	(--libdir | --libdir=*) +	    nodash=libdir ;; +	(--includedir | --includedir=*) +	    nodash=includedir ;; +	(--oldincludedir | --oldincludedir=*) +	    nodash=oldincludedir ;; +	(--datarootdir | --datarootdir=*) +	    nodash=datarootdir ;; +	(--datadir | --datadir=*) +	    nodash=datadir ;; +	(--libdatarootdir | --libdatarootdir=*) +	    nodash=libdatarootdir ;; +	(--libdatadir | --libdatadir=*) +	    nodash=libdatadir ;; +	(--sysconfdir | --sysconfdir=*) +	    nodash=sysconfdir ;; +	(--sharedstatedir | --=sharedstatedir*) +	    nodash=sharedstatedir ;; +	(--localstatedir | --localstatedir=*) +	    nodash=localstatedir ;; +	(--runstatedir | --runstatedir=*) +	    nodash=runstatedir ;; +	(--lispdir | --lispdir=*) +	    nodash=lispdir ;; +	(--localedir | --localedir=*) +	    nodash=localedir ;; +	(--licensedir | --licensedir=*) +	    nodash=licensedir ;; +	(--emptydir | --emptydir=*) +	    nodash=emptydir ;; +	(--cachedir | --cachedir=*) +	    nodash=cachedir ;; +	(--spooldir | --spooldir=*) +	    nodash=spooldir ;; +	(--logdir | --logdir=*) +	    nodash=logdir ;; +	(--statedir | --statedir=*) +	    nodash=statedir ;; +	(--gamedir | --gamedir=*) +	    nodash=gamedir ;; +	(--sharedcachedir | --sharedcachedir=*) +	    nodash=sharedcachedir ;; +	(--sharedspooldir | --sharedspooldir=*) +	    nodash=sharedspooldir ;; +	(--sharedlogdir | --sharedlogdir=*) +	    nodash=sharedlogdir ;; +	(--sharedstatedir | --sharedstatedir=*) +	    nodash=sharedstatedir ;; +	(--sharedgamedir | --sharedgamedir=*) +	    nodash=sharedgamedir ;; +	(--tmpdir | --tmpdir=*) +	    nodash=tmpdir ;; +	(--localtmpdir | --localtmpdir=*) +	    nodash=localtmpdir ;; +	(--sharedtmpdir | --sharedtmpdir=*) +	    nodash=sharedtmpdir ;; +	(--lockdir | --lockdir=*) +	    nodash=lockdir ;; +	(--skeldir | --skeldir=*) +	    nodash=skeldir ;; +	(--devdir | --devdir=*) +	    nodash=devdir ;; +	(--sysdir | --sysdir=*) +	    nodash=sysdir ;; +	(--procdir | --procdir=*) +	    nodash=procdir ;; +	(--selfprocdir | --selfprocdir=*) +	    nodash=selfprocdir ;; +	(--docdir | --docdir=*) +	    nodash=docdir ;; +	(--infodir | --infodir=*) +	    nodash=infodir ;; +	(--dvidir | --dvidir=*) +	    nodash=dvidir ;; +	(--pdfdir | --pdfdir=*) +	    nodash=pdfdir ;; +	(--psdir | --psdir=*) +	    nodash=psdir ;; +	(--htmldir | --htmldir=*) +	    nodash=htmldir ;; +	(--mandir | --mandir=*) +	    nodash=mandir ;; +	(--man0 | --man0=*) +	    nodash=man0 ;; +	(--man1 | --man1=*) +	    nodash=man1 ;; +	(--man2 | --man2=*) +	    nodash=man2 ;; +	(--man3 | --man3=*) +	    nodash=man3 ;; +	(--man4 | --man4=*) +	    nodash=man4 ;; +	(--man5 | --man5=*) +	    nodash=man5 ;; +	(--man6 | --man6=*) +	    nodash=man6 ;; +	(--man7 | --man7=*) +	    nodash=man7 ;; +	(--man8 | --man8=*) +	    nodash=man8 ;; +	(--man9 | --man9=*) +	    nodash=man9 ;; +	(--man0ext | --man0ext=*) +	    nodash=man0ext ;; +	(--man1ext | --man1ext=*) +	    nodash=man1ext ;; +	(--man2ext | --man2ext=*) +	    nodash=man2ext ;; +	(--man3ext | --man3ext=*) +	    nodash=man3ext ;; +	(--man4ext | --man4ext=*) +	    nodash=man4ext ;; +	(--man5ext | --man5ext=*) +	    nodash=man5ext ;; +	(--man6ext | --man6ext=*) +	    nodash=man6ext ;; +	(--man7ext | --man7ext=*) +	    nodash=man7ext ;; +	(--man8ext | --man8ext=*) +	    nodash=man8ext ;; +	(--man9ext | --man9ext=*) +	    nodash=man9ext ;; +	(--manext | --manext=*) +	    if test -n "${MAN_SECTION}"; then +		nodash=manext +	    else +		printf "\e[01;31m%s: warning: ignoring: %s\e[00m\n" "${0}" "${option}" >&2 +		sleep 1 +	    fi +	    ;; + +# ignored +	# Unrecognised directories, and settings that cannot be used with internationalisation. +	(--*dir=* | --*dir | --man?dir | --man?dir=*) +	    printf "\e[01;31m%s: warning: ignoring: %s\e[00m\n" "${0}" "${option}" >&2 +	    sleep 1 +	    ;; + +# feature tweaking +	(--with-*) +	    feature="WITH_${feature}" +	    echo "${feature}" = yes >&20 +	    export "${feature}"=yes +	    option="${option}=x" +	    ;; +	 +	(--without-*) +	    feature="WITHOUT_${feature}" +	    echo "${feature}" = yes >&20 +	    export "${feature}"=yes +	    option="${option}=x" +	    ;; +	 +	(--enable-*=*) +	    param="${feature#*=}" +	    feature="${feature%%=*}" +	    if ! test "${param}" = "no"; then +		feature="ENABLE_${feature}" +	    else +		feature="DISABLE_${feature}" +		param=yes +	    fi +	    echo "${feature}" = "${param}" >&20 +	    export "${feature}"="${param}" +	    ;; +	 +	(--enable-*) +	    feature="DISABLE_${feature}" +	    echo "${feature}" = yes >&20 +	    export "${feature}"=yes +	    option="${option}=x" +	    ;; +	 +	(--disable-*) +	    feature="DISABLE_${feature}" +	    echo "${feature}" = yes >&20 +	    export "${feature}"=yes +	    option="${option}=x" +	    ;; + +# unrecognised +	(${dashed}--*) +	    unrecognised_argument "${option}" +	    ;; + +# variables +	(${dashed}*=*) +	    var="${option%%=*}" +	    val="${option#*=}" +	    if test -n "$(echo "${var}" | tr -d '[_a-zA-Z0-9-]')"; then +		# Variable is not used and is potentially not +		# formatted in a compatible way. +		printf "\e[01;31m%s: warning: ignoring because of bad format: %s\e[00m\n" "${0}" "${option}" >&2 +		sleep 1 +	    fi +	    echo "${var}" = "${val}" >&20 +	    ;; + +# unrecognised +	(*) +	    unrecognised_argument "${option}" +	    ;; +    esac + +    if test "${option%%=*}" = "${option}"; then +	incomplete="${option}" +    else +	eval "${nodash}=$(quote "${option#*=}")" +	eval "have_${nodash}=yes" +    fi +done + + +# Print usage information. This is parsed by +# the auto-completion script for ./configure. +if test -n "${f_help}"; then +    cat <<EOF +Configure the package (${PKGNAME}) before building and installing. + +OPTIONS + +general +  --help                  Print usage information. +  --destdir=DIR           Output directory for staged install. +  --srcdir=DIR            The directory for the sources being compiled. +  VARIABLE=VALUE          Override a variable in the Makefile. + +directory automation +  --gnu-linux             Use default configurations for GNU/Linux. +  --bin-merger            The OS distribution has symlinked sbin to bin for the select exec-prefix. + +tweaking of features +EOF +    list_optional_features_help +    cat <<EOF + +tweaking of directories and filenames +  --prefix=DIR            Prefix used for other directories than. +  --exec-prefix=DIR       Prefix used for /bin, /sbin, /libexec, and /lib. +  --bindir=DIR            Executable programs that users can run. +  --sbindir=DIR           Executable administrative programs. +  --libexecdir=DIR        Executable programs run by other programs and not be users. +  --libdir=DIR            Object files and libraries of object code. +  --includedir=DIR        Header files. +  --oldincludedir=DIR     Header files. Should have the prefix /usr if the canonical prefix is /usr/local. +  --datarootdir=DIR       Architecture-independent data files. +  --datadir=DIR           Architecture-independent resource files. +  --libdatarootdir=DIR    Architecture-dependent data files. +  --libdatadir=DIR        Architecture-dependent resource files. +  --sysconfdir=DIR        Machine-local configuration files. +  --sharedstatedir=DIR    Network-shared architecture-independent state files. +  --localstatedir=DIR     Machine-local architecture-independent state files. +  --runstatedir=DIR       Machine-local runtime state files. +  --lispdir=DIR           Emacs LISP files. +  --localedir=DIR         Locale-specific message catalogues. +  --licensedir=DIR        License files. +  --emptydir=DIR          An always empty directory. +  --cachedir=DIR          Machine-local cached files. +  --spooldir=DIR          Machine-local spooled files. +  --logdir=DIR            Machine-local log files +  --statedir=DIR          Machine-local persistent state files +  --gamedir=DIR           Machine-local highscore files. +  --sharedcachedir=DIR    Network-shared cached files. +  --sharedspooldir=DIR    Network-shared spooled files. +  --sharedlogdir=DIR      Network-shared log files +  --sharedstatedir=DIR    Network-shared persistent state files +  --sharedgamedir=DIR     Network-shared highscore files. +  --tmpdir=DIR            Machine-local volatile temporary files. +  --localtmpdir=DIR       Machine-local persistent temporary files. +  --sharedtmpdir=DIR      Network-shared temporary files. +  --lockdir=DIR           Lock files. +  --skeldir=DIR           User skeleton. +  --devdir=DIR            Devices and pseudo-devices. +  --sysdir=DIR            System-information logical file. +  --procdir=DIR           Process-information logical file. +  --selfprocdir=DIR       Process-information logical file for the process itself. +  --docdir=DIR            Documentation files, other then info manuals and man pages. +  --infodir=DIR           Info manuals. +  --dvidir=DIR            DVI manuals. +  --pdfdir=DIR            PDF manuals. +  --psdir=DIR             PostScript manuals. +  --htmldir=DIR           HTML manuals. +  --mandir=DIR            Top-level directory for man pages. +  --man0=DIR              Basename of the directory for section 0 man pages. +  --man1=DIR              Basename of the directory for section 1 man pages. +  --man2=DIR              Basename of the directory for section 2 man pages. +  --man3=DIR              Basename of the directory for section 3 man pages. +  --man4=DIR              Basename of the directory for section 4 man pages. +  --man5=DIR              Basename of the directory for section 5 man pages. +  --man6=DIR              Basename of the directory for section 6 man pages. +  --man7=DIR              Basename of the directory for section 7 man pages. +  --man8=DIR              Basename of the directory for section 8 man pages. +  --man9=DIR              Basename of the directory for section 9 man pages. +EOF +    if test -n "${MAN_SECTION}"; then +	cat <<EOF +  --manext=EXT            Filename suffix for the man page. +EOF +    fi +    cat <<EOF +  --man0ext=EXT           Filename suffix for section 0 man pages. +  --man1ext=EXT           Filename suffix for section 1 man pages. +  --man2ext=EXT           Filename suffix for section 2 man pages. +  --man3ext=EXT           Filename suffix for section 3 man pages. +  --man4ext=EXT           Filename suffix for section 4 man pages. +  --man5ext=EXT           Filename suffix for section 5 man pages. +  --man6ext=EXT           Filename suffix for section 6 man pages. +  --man7ext=EXT           Filename suffix for section 7 man pages. +  --man8ext=EXT           Filename suffix for section 8 man pages. +  --man9ext=EXT           Filename suffix for section 9 man pages. +EOF +    exit 0 +fi + + +# Set unset directories to their default. +defdir () +{ +    p="$(quote "${2}")" +    if ! test "${p%%\'*}" = "${p}"; then +	p="$(echo "${p}" | sed "s/'/'\\\\''/g")" +    fi +    if ! test -n "$(eval echo '${have_'"${1}"'}')"; then +       eval "${1}='${p}'" +    fi +} +if test -n "${f_gnulinux}"; then +    defdir prefix "/usr" +    _prefix= +    case ${prefix} in +	('' | /   |   /usr | /usr/  |  /games | /games  |  /usr/games | /usr/games/) +	    _infix= +	    ;; +	(/usr/local  |  /usr/local/  |  /usr/local/games  |  /usr/local/games/) +	    _infix=/local +	    ;; +	(/opt/*) +	    _infix=${prefix} +	    ;; +	(*) +	    # This probably means somewhere in /home, we do not +	    # checked because we do not know what else to do. +	    _infix= +	    _prefix="${prefix}" +	    ;; +    esac +    defdir sysconfdir "${_prefix}/etc${_infix}" +    defdir sharedstatedir "${_prefix}/com${_infix}" +    defdir localstatedir "${_prefix}/var${_infix}" +    defdir runstatedir "${_prefix}/run${_infix}" +    defdir tmpdir "${_prefix}/tmp${_infix}" +else +    defdir prefix "/usr/local" +    defdir sysconfdir "${prefix}/etc" +    defdir sharedstatedir "${prefix}/com" +    defdir localstatedir "${prefix}/var" +    defdir runstatedir "${localstatedir}/run" +    defdir tmpdir "${prefix}/tmp" +fi +defdir exec_prefix "${prefix}" +defdir bindir "${exec_prefix}/bin" +if test -n "${f_bin_merger}"; then +    defdir sbindir "${bindir}" +else +    defdir sbindir "${exec_prefix}/sbin" +fi +defdir libexecdir "${exec_prefix}/libexec" +defdir libdir "${exec_prefix}/lib" +defdir includedir "${prefix}/include" +defdir oldincludedir "${includedir}" +defdir datarootdir "${prefix}/share" +defdir datadir "${datarootdir}" +defdir libdatarootdir "${libdir}" +defdir libdatadir "${libdir}" +defdir lispdir "${datarootdir}/emacs/site-lisp" +defdir localedir "${datarootdir}/locale" +defdir licensedir "${datarootdir}/licenses" +defdir cachedir "${localstatedir}/cache" +defdir spooldir "${localstatedir}/spool" +defdir emptydir "${localstatedir}/empty" +defdir logdir "${localstatedir}/log" +defdir statedir "${localstatedir}/lib" +defdir gamedir "${localstatedir}/games" +defdir sharedcachedir "${sharedstatedir}/cache" +defdir sharedpooldir "${sharedstatedir}/spool" +defdir sharedlogdir "${sharedstatedir}/log" +defdir sharedstatedir "${sharedstatedir}/lib" +defdir sharedgamedir "${sharedstatedir}/games" +defdir localtmpdir "${localstatedir}/tmp" +defdir sharedtmpdir "${sharedstatedir}/tmp" +defdir lockdir "${runstatedir}/lock" +defdir skeldir "${sysconfdir}/skel" +defdir devdir "/dev" +defdir sysdir "/sys" +defdir procdir "/proc" +defdir selfprocdir "${procdir}/self" +defdir docdir "${datarootdir}/doc/${PKGNAME}" +defdir infodir "${datarootdir}/info" +defdir dvidir "${docdir}" +defdir pdfdir "${docdir}" +defdir psdir "${docdir}" +defdir htmldir "${docdir}" +defdir mandir "${datarootdir}/man" +defdir man0 "man0${MAN_SECTION_SUFFIX}" +defdir man1 "man1${MAN_SECTION_SUFFIX}" +defdir man2 "man2${MAN_SECTION_SUFFIX}" +defdir man3 "man3${MAN_SECTION_SUFFIX}" +defdir man4 "man4${MAN_SECTION_SUFFIX}" +defdir man5 "man5${MAN_SECTION_SUFFIX}" +defdir man6 "man6${MAN_SECTION_SUFFIX}" +defdir man7 "man7${MAN_SECTION_SUFFIX}" +defdir man8 "man8${MAN_SECTION_SUFFIX}" +defdir man9 "man9${MAN_SECTION_SUFFIX}" +if test -n "${MAN_SECTION}" && ! test -n "$(eval echo '${man'"${MAN_SECTION}"'ext}')"; then +    defdir "man${MAN_SECTION}ext" "$(eval echo '${man'"${MAN_SECTION}"'ext}')" +fi +defdir man0ext ".0" +defdir man1ext ".1" +defdir man2ext ".2" +defdir man3ext ".3" +defdir man4ext ".4" +defdir man5ext ".5" +defdir man6ext ".6" +defdir man7ext ".7" +defdir man8ext ".8" +defdir man9ext ".9" + +# Found source directory. +if ! test -n "${srcdir}"; then +    if test -f "Makefile.in"; then +	: +    elif test -f "${PWD}/Makefile.in"; then +	srcdir="${PWD}" +    elif test -f "${PWD}/../Makefile.in"; then +	srcdir="${PWD}/.." +    fi +fi +if test -n "${srcdir}"; then +    srcdir="$(realpath "${srcdir}")/" +    srcdir_proper="${srcdir}" +    srcdir="$(quote "${srcdir}")" +fi +if ! test -f "${srcdir_proper}Makefile.in"; then +    echo "${0}: error: cannot found source directory." +    exit 1 +fi + + +# Add shebang and "generated"-comment to config.status. +echo '#!/bin/sh' >&10 +echo >&10 +echo '# This file was generated by ./configure, its purpose is two-fold:' >&10 +echo '# 1) It lets you rebuild Makefile with the same configurations you' >&10 +echo '#    used last time you run ./configure.' >&10 +echo '# 2) It lets Makefile rebuild itself transparently when out of date.' >&10 +echo >&10 + +# config.status should adjust CWD. +echo 'cd "$(dirname "${0}")"' >&10 + +# config.status calls ./configure with all arguments you called ./configure. +printf "exec %s" "${0}" >&10 +for option; do +    printf " %s" "$(quote "${option}")" >&10 +done +echo >&10 + +# Close config.status. +exec 10>&- + + +# Store environment (with restrictions). +env | while read line; do +    var="${line%%=*}" +    val="${line#*=}" +    if test "${var}" = "${line}"; then +	# Malformated variables. (Can happen!, sigh...) +	continue +    elif test -n "$(echo "${var}" | tr -d '[_a-zA-Z0-9-]')"; then +	# Variable is not used and is potentially not +	# formatted in a compatible way. +	continue +    fi +    case "${var}" in +	(_ | PWD | SHELL | SHLVL | TERM | COLORTERM | MAKEFLAGS) +	    # We do not want to propagate these. +	    ;; +	(*) +	    echo "${var}" = "${val}" >&20 +	    ;; +    esac +done + +# Store directories and filenames. +if test -n "${destdir}"; then +   echo DESTDIR = "${destdir}" >&20 +fi +echo PREFIX = "${prefix}" >&20 +echo SYSCONFDIR = "${sysconfdir}" >&20 +echo COMDIR = "${sharedstatedir}" >&20 +echo VARDIR = "${localstatedir}" >&20 +echo RUNDIR = "${runstatedir}" >&20 +echo TMPDIR = "${tmpdir}" >&20 +echo DEVDIR = "${devdir}" >&20 +echo SYSDIR = "${sysdir}" >&20 +echo PROCDIR = "${procdir}" >&20 +echo EXEC_PREFIX = "${exec_prefix}" >&20 +echo BINDIR = "${bindir}" >&20 +echo SBINDIR = "${sbindir}" >&20 +echo LIBEXECDIR = "${libexecdir}" >&20 +echo LIBDIR = "${libdir}" >&20 +echo INCLUDEDIR = "${includedir}" >&20 +echo OLDINCLUDEDIR = "${oldincludedir}" >&20 +echo DATADIR = "${datarootdir}" >&20 +echo RESDIR = "${datadir}" >&20 +echo SYSDEPDATADIR = "${libdatarootdir}" >&20 +echo SYSDEPRESDIR = "${libdatadir}" >&20 +echo LISPDIR = "${lispdir}" >&20 +echo LOCALEDIR = "${localedir}" >&20 +echo LICENSEDIR = "${licensedir}" >&20 +echo CACHEDIR = "${cachedir}" >&20 +echo SPOOLDIR = "${spooldir}" >&20 +echo EMPTYDIR = "${emptydir}" >&20 +echo LOGDIR = "${logdir}" >&20 +echo STATEDIR = "${statedir}" >&20 +echo GAMEDIR = "${gamedir}" >&20 +echo COMCACHEDIR = "${sharedcachedir}" >&20 +echo COMPOOLDIR = "${sharedpooldir}" >&20 +echo COMLOGDIR = "${sharedlogdir}" >&20 +echo COMSTATEDIR = "${sharedstatedir}" >&20 +echo COMGAMEDIR = "${sharedgamedir}" >&20 +echo LOCALTMPDIR = "${localtmpdir}" >&20 +echo SHAREDTMPDIR = "${sharedtmpdir}" >&20 +echo LOCKDIR = "${lockdir}" >&20 +echo SKELDIR = "${skeldir}" >&20 +echo SELFPROCDIR = "${selfprocdir}" >&20 +echo DOCDIR = "${docdir}" >&20 +echo INFODIR = "${infodir}" >&20 +echo DVIDIR = "${dvidir}" >&20 +echo PDFDIR = "${pdfdir}" >&20 +echo PSDIR = "${psdir}" >&20 +echo HTMLDIR = "${htmldir}" >&20 +echo MANDIR = "${mandir}" >&20 +echo MAN0 = "${man0}" >&20 +echo MAN1 = "${man1}" >&20 +echo MAN2 = "${man2}" >&20 +echo MAN3 = "${man3}" >&20 +echo MAN4 = "${man4}" >&20 +echo MAN5 = "${man5}" >&20 +echo MAN6 = "${man6}" >&20 +echo MAN7 = "${man7}" >&20 +echo MAN8 = "${man8}" >&20 +echo MAN9 = "${man9}" >&20 +echo MAN0EXT = "${man0ext}" >&20 +echo MAN1EXT = "${man1ext}" >&20 +echo MAN2EXT = "${man2ext}" >&20 +echo MAN3EXT = "${man3ext}" >&20 +echo MAN4EXT = "${man4ext}" >&20 +echo MAN5EXT = "${man5ext}" >&20 +echo MAN6EXT = "${man6ext}" >&20 +echo MAN7EXT = "${man7ext}" >&20 +echo MAN8EXT = "${man8ext}" >&20 +echo MAN9EXT = "${man9ext}" >&20 + +# Close .config.mk. +exec 20>&- + +# Now, make Makefile available. +if test -f Makefile; then +    chmod u+w Makefile # This scripts makes it read-only. +fi +exec 30>Makefile +echo "# ----------------------------------------------------- #" >&30 +echo "# This file was created by ./configure from Makefile.in #" >&30 +echo "# ----------------------------------------------------- #" >&30 +echo >&30 +if test -n "${srcdir}"; then +   echo v = "${srcdir}" >&30 +fi  +cat "${srcdir_proper}"Makefile.in >&30 +exec 30>&- + + +# config.status should be executable. +chmod a+x config.status + +# Makefile should be read-only to ones does not edit it by mistake. +chmod a-w Makefile + + +# Help functions for the parent script. +test_with () +{ +    with="$(eval echo '${WITH_'"${1}"'}')" +    without="$(eval echo '${WITHOUT_'"${1}"'}')" +    if ! test -n "${with}" && ! test -n "${without}"; then +	echo "${2}" +    elif ! test -n "${with}" && test -n "${without}"; then +	echo "no" +    elif test -n "${with}" && ! test -n "${without}"; then +	echo "yes" +    elif test "${2}" = yes; then +	echo "no" +    else +	echo "yes" +    fi +} +test_enable () +{ +    enable="$(eval echo '${ENABLE_'"${1}"'}')" +    disable="$(eval echo '${DISABLE_'"${1}"'}')" +    if ! test -n "${enable}" && ! test -n "${disable}"; then +	echo "${2}" +    elif ! test -n "${enable}" && test -n "${disable}"; then +	echo "no" +    elif test -n "${enable}" && ! test -n "${disable}"; then +	echo "${enable}" +    elif test "${2}" = yes ; then +	echo "no" +    else +	echo "${enable}" +    fi +} + + +# After including this file, you may want +# to do something like: +# +#   cat <<EOF +#    +#   Enabled features, see ${0} for more infomation: +#    +#       Internationalisation     $(test_with GETTEXT yes) +#       GNU Bash tab-completion  $(test_with BASH yes) +#       Fish tab-completion      $(test_with FISH yes) +#       Z shell tab-completion   $(test_with ZSH yes) +#    +#   You can now run 'make && make install'. +#    +#   EOF + diff --git a/mk/copy.mk b/mk/copy.mk new file mode 100644 index 0000000..1579193 --- /dev/null +++ b/mk/copy.mk @@ -0,0 +1,78 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for legal files. ===# + + +# Enables the rules: +#   install-copyright  Install all files in _COPYING and _LICENSE +#   install-copying    Install all files in _COPYING +#   install-license    Install all files in _LICENSE + + +# WHEN TO BUILD, INSTALL, AND UNINSTALL: + +install-base: install-copyright +uninstall: uninstall-copyright + + +# INSTALL RULES: + +.PHONY: install-copyright +install-copyright: + +ifdef _COPYING +.PHONY: install-copyright +install-copyright: install-copying + +.PHONY: install-copying +install-copying: $(foreach F,$(_COPYING),$(v)$(F)) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)" +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)" +	@$(ECHO_EMPTY) +endif + +ifdef _LICENSE +.PHONY: install-copyright +install-copyright: install-license + +.PHONY: install-license +install-license: $(foreach F,$(_LICENSE),$(v)$(F)) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)" +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)" +	@$(ECHO_EMPTY) +endif + + +# UNINSTALL RULES: + +.PHONY: uninstall-copyright +uninstall-copyright: + +ifdef _COPYING +.PHONY: uninstall-copyright +uninstall-copyright: uninstall-copying + +.PHONY: uninstall-copying +uninstall-copying: +	-$(Q)$(RM) -- $(foreach F,$(_COPYING),"$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)/$(F)") +	-$(Q)$(RMDIR) -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)" +endif + +ifdef _LICENSE +.PHONY: uninstall-copyright +uninstall-copyright: uninstall-license + +.PHONY: uninstall-license +uninstall-license: +	-$(Q)$(RM) -- $(foreach F,$(_LICENSE),"$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)/$(F)") +	-$(Q)$(RMDIR) -- "$(DESTDIR)$(LICENSEDIR)/$(PKGNAME)" +endif + diff --git a/mk/dist.mk b/mk/dist.mk new file mode 100644 index 0000000..b6db9e6 --- /dev/null +++ b/mk/dist.mk @@ -0,0 +1,189 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for making releases. ===# + + +# CONFIGURATIONS: + +# Formats for packages to generate. +DIST_FORMATS = tar tar.xz tar.bz2 tar.gz + +# Define DO_NOT_SIGN if you do not want sign the release. + +# You can select checksums to generate: +#   Declaring NO_BSD_SUM will omit `sum -r`. +#   Declaring NO_SYSV_SUM will omit `sum -s`. +#   List all checksum programs, that do not require any flags, in DIST_CHECKSUMS. + +# Any missing flags for GnuPG? +GPG_FLAGS = + +# What key should be used for signing? +GPG_KEY ?= + +# You should define _EVERYTHING to enumerate all files that belong in +# the release tarball, lest 'git archive' will be used as a fallback. + + + +# HELP VARIALES: + +# You may use these to help list all files in _EVERYTHING +__EVERYTHING_COMMON = $(_COPYING) $(_LICENSE) README +__EVERYTHING_SRC = $(foreach F,$(_SRC),src/$(F)) +__EVERYTHING_LOCALE = $(foreach L,$(LOCALES),po/$(L).po) +__EVERYTHING_SHELL = $(foreach F,$(_AUTO_COMPLETE),src/$(F).auto-completion)  \ +                     $(foreach F,$(_AUTO_COMPLETE),$(foreac F,$(_SHELL_LOCALES),src/$(F).$(L),auto-completion)) +__EVERYTHING_MK_ = all clean copy dist empty i18n lang-c lowerpath man path prologue tags texinfo tools +__EVERYTHING_MK = $(foreach F,$(__EVERYTHING_MK_),mk/$(F).mk) mk/configure mk/README configure Makefile.in +__EVERYTHING_MAN = $(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(S)),doc/man/$(P).$(S)))  \ +                   $(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach L,$(MAN_LOCALES),$(foreach P,$(_MAN_$(L)_$(S)),doc/man/$(P).$(L).$(S)))) +__EVERYTHING_ALL_COMMON = $(__EVERYTHING_COMMON) $(__EVERYTHING_MK) $(__EVERYTHING_MAN)  \ +                          $(__EVERYTHING_LOCALE) $(__EVERYTHING_SRC) $(__EVERYTHING_SHELL) +# This one (__todo) if you have a todo file, but do not want it to be greped. +__TO__ = TO +__DO__ = DO +__todo = $(__TO__)$(__DO__) + + +# The packages and there detached signatures (if any.) +ifndef DO_NOT_SIGN +__DIST_FILES = $(foreach F,$(DIST_FORMATS),$(_PROJECT)-$(_VERSION).$(F) $(_PROJECT)-$(_VERSION).$(F).sig) +endif +ifdef DO_NOT_SIGN +__DIST_FILES = $(foreach F,$(DIST_FORMATS),$(_PROJECT)-$(_VERSION).$(F)) +endif + +# All known checksum programs that are unambiguous. +__DIST_CHECKSUMS_ALL = cksum md2sum md4sum md5sum md6sum sha0sum sha1sum sha224sum  \ +                       sha256sum sha384sum sha512sum sha512-224sum sha512-256sum \ +                       sha3-224sum sha3-256sum sha3-384sum sha3-512sum shake256sum  \ +                       shake512sum rawshake256sum rawshake512sum keccak-224sum  \ +                       keccak-256sum keccak-384sum keccak-512sum keccaksum + +# All installed checksum programs that are unambiguous. +DIST_CHECKSUMS = $(foreach C,$(__DIST_CHECKSUMS_ALL),$(shell if command -v $(C) >/dev/null; then $(ECHO) $(C); fi)) + + + +# MAKE RULES: + +# Generate release files. (Tarballs, compressed and uncompressed; signatures; checksums.) +.PHONY: dist +dist: dist-balls dist-checksums + + + +# HELP MAKE RULES: + +# Generate tarballs, compressed and uncompressed, +.PHONY: dist-balls +dist-balls: $(__DIST_FILES) + +ifndef DO_NOT_SIGN +# Generate checksums and signature of checksums. +.PHONY: dist-checksums +dist-checksums: $(_PROJECT)-$(_VERSION).checksums $(_PROJECT)-$(_VERSION).checksums.sig + +# Generate uncompressed tarball and signature of it. +.PHONY: dist-tar +dist-tar: $(_PROJECT)-$(_VERSION).tar $(_PROJECT)-$(_VERSION).tar.sig + +# Generate xz-copressed tarball and signature of it. +.PHONY: dist-xz +dist-xz: $(_PROJECT)-$(_VERSION).tar.xz $(_PROJECT)-$(_VERSION).tar.xz.sig + +# Generate bz2-copressed tarball and signature of it. +.PHONY: dist-bzip2 +dist-bz2: $(_PROJECT)-$(_VERSION).tar.bz2 $(_PROJECT)-$(_VERSION).tar.bz2.sig + +# Generate gzip-copressed tarball and signature of it. +.PHONY: dist-gz +dist-gz: $(_PROJECT)-$(_VERSION).tar.gz $(_PROJECT)-$(_VERSION).tar.sig +endif +ifdef DO_NOT_SIGN +# Generate checksums, but no signature. +.PHONY: dist-checksums +dist-checksums: $(_PROJECT)-$(_VERSION).checksums + +# Generate uncompressed tarball, but no signature. +.PHONY: dist-tar +dist-tar: $(_PROJECT)-$(_VERSION).tar + +# Generate xz-compressed tarball, but no signature. +.PHONY: dist-xz +dist-xz: $(_PROJECT)-$(_VERSION).tar.xz + +# Generate bzip2-compressed tarball, but no signature. +.PHONY: dist-bz2 +dist-bz2: $(_PROJECT)-$(_VERSION).tar.bz2 + +# Generate gzip-compressed tarball, but no signature. +.PHONY: dist-gz +dist-gz: $(_PROJECT)-$(_VERSION).tar.gz +endif + +# Generate the tarball for the release. +ifdef v +__GIT_DIR = --git-dir=$(v) +endif +$(_PROJECT)-$(_VERSION).tar: $(foreach F,$(_EVERYTHING),$(v)$(F)) +	@$(PRINTF_INFO) '\e[00;01;31mTAR\e[34m %s\e[00m$A\n' "$@" +	@if $(TEST) -f $@; then $(RM) $@; fi +ifndef _EVERYTHING +	$(Q)git archive --prefix=$(_PROJECT)-$(_VERSION)/ --format=tar $(__GIT_DIR) $(_VERSION) -o $@ #$Z +endif +ifdef _EVERYTHING +	$(Q)$(LN) -s . $(_PROJECT)-$(_VERSION) +	$(Q)$(TAR) c -- $(foreach F,$(_EVERYTHING),$(v)$(_PROJECT)-$(_VERSION)/$(F)) > $@ +	$(Q)$(RM) $(_PROJECT)-$(_VERSION) +endif +	@$(ECHO_EMPTY) + +# Compression rule for xz-compression. Used on the tarball. +%.xz: % +	@$(PRINTF_INFO) '\e[00;01;31mXZ\e[34m %s\e[00m$A\n' "$@" +	@if $(TEST) -f $@; then $(RM) $@; fi +	$(Q)$(XZ_COMPRESS) $< #$Z +	@$(ECHO_EMPTY) + +# Compression rule for bzip2-compression. Used on the tarball. +%.bz2: % +	@$(PRINTF_INFO) '\e[00;01;31mBZIP2\e[34m %s\e[00m$A\n' "$@" +	@if $(TEST) -f $@; then $(RM) $@; fi +	$(Q)$(BZIP2_COMPRESS) $< #$Z +	@$(ECHO_EMPTY) + +# Compression rule for gzip-compression. Used on the tarball. +%.gz: % +	@$(PRINTF_INFO) '\e[00;01;31mGZIP\e[34m %s\e[00m$A\n' "$@" +	@if $(TEST) -f $@; then $(RM) $@; fi +	$(Q)$(GZIP_COMPRESS) $< #$Z +	@$(ECHO_EMPTY) + +# Generate checksums of tarballs, compressed and uncompressed, and of their detached signatures. +$(_PROJECT)-$(_VERSION).checksums: $(__DIST_FILES) +	@$(PRINTF_INFO) '\e[00;01;31mCHECKSUM\e[34m %s\e[00m\n' "$@" +	@$(PRINTF) '' > $@ +ifndef NO_BSD_SUM +	@if ! ($(ECHO) ':: sum -r ::' && sum -r $^ && $(ECHO)) >> $@ ; then $(PRINTF) '' > $@; fi +endif +ifndef NO_SYSV_SUM +	@if ! ($(ECHO) ':: sum -s ::' && sum -s $^ && $(ECHO)) >> $@ ; then $(PRINTF) '' > $@; fi +endif +	@$(foreach C,$(DIST_CHECKSUMS),$(ECHO) ':: $(C) ::' >> $@ && $(C) $^ | $(GREP) -v '^--' >> $@ && $(ECHO) >> $@ &&) $(TRUE) +	@$(ECHO_EMPTY) + +# Signing rule. Used on the tarballs, compressed and uncompressed, and on the checksum file. +%.sig: % +	@$(PRINTF_INFO) '\e[00;01;31mSIG\e[34m %s\e[00m$A\n' "$@" +	@if $(TEST) -f $@; then $(RM) $@; fi +	$(Q)$(GPG) $(GPG_FLAGS) --local-user $(GPG_KEY) --detach-sign --armor --output $@ < $< #$Z +	@$(ECHO_EMPTY) + diff --git a/mk/empty.mk b/mk/empty.mk new file mode 100644 index 0000000..81c06fb --- /dev/null +++ b/mk/empty.mk @@ -0,0 +1,94 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file includes empty rules that are filled by other files. ===# + + +.PHONY: all +all: + +.PHONY: everything +everything: + +.PHONY: base +base: + +.PHONY: cmd +cmd: + +.PHONY: doc +doc: + + +.PHONY: check +check: + + +.PHONY: install +install: + +.PHONY: install-everything +install-everything: + +.PHONY: install-base +install-base: + +.PHONY: install-cmd +install-cmd: + +.PHONY: install-doc +install-doc: + + +.PHONY: installcheck +installcheck: + + +.PHONY: uninstall +uninstall: + + + +.PHONY: all +all: base + +.PHONY: everything +everything: base + +.PHONY: base +base: cmd + + +.PHONY: install +install: install-base + +.PHONY: install-everything +install-everything: install-base + +.PHONY: install-base +install-base: install-cmd + + + +.PHONY: install-strip +install-strip: __STRIP = -s +install-strip: install + +.PHONY: install-everything-strip +install-everything-strip: __STRIP = -s +install-everything-strip: install-everything + +.PHONY: install-base-strip +install-base-strip: __STRIP = -s +install-base-strip: install-base + +.PHONY: install-cmd-strip +install-cmd-strip: __STRIP = -s +install-cmd-strip: install-cmd + + diff --git a/mk/i18n.mk b/mk/i18n.mk new file mode 100644 index 0000000..cc27903 --- /dev/null +++ b/mk/i18n.mk @@ -0,0 +1,111 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for internationalisation. ===# + + +# Enables the rules: +#   locale          Build all translations. +#   update-po       Update all .po files for further translation. +#   install-locale  Install all locales. +#  +# "All locales" are those listed in LOCALES. +# If LOCALES is not defined, this file is ignored. +#  +# If WITHOUT_GETTEXT is defined, `locale` and +# `install-locale` will not do anything. +#  +# _SRC should list all sources files, excluding the src/ +# at the beginning of the pathnames. + + +ifdef LOCALES + + +# WHEN TO BUILD, INSTALL, AND UNINSTALL: + +all: locale +everything: locale +install: install-locale +install-everything: install-locale +uninstall: uninstall-locale + + +# BUILD RULES: + +# Build all translations. +ifdef WITHOUT_GETTEXT +.PHONY: locale +locale: +endif +ifndef WITHOUT_GETTEXT +.PHONY: locale +locale: $(foreach L,$(LOCALES),bin/mo/$(L)/messages.mo) +endif + +# Update all translation files for further translation. +.PHONY: update-po +update-po: $(foreach L,$(LOCALES),po/$(L).po) + +# Generate template for translations. +aux/$(_PROJECT).pot: $(foreach S,$(_SRC),$(v)src/$(S)) +	@$(PRINTF_INFO) '\e[00;01;31mPOT\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p aux +	$(Q)$(CPP) -DUSE_GETTEXT=1 $^ |  \ +	$(XGETTEXT) -o "$@" -Lc --from-code utf-8 --package-name "$(_PROJECT_FULL)"  \ +	--package-version $(_VERSION) --no-wrap --force-po  \ +	--copyright-holder '$(_COPYRIGHT_HOLDER)' - #$Z +	@$(ECHO_EMPTY) + +# Create or update a translation file. +po/%.po: aux/$(_PROJECT).pot +	@$(PRINTF_INFO) '\e[00;01;31mPO\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p po +	$(Q)if ! $(TEST) -e $@; then  \ +	  $(MSGINIT) --no-translator --no-wrap -i aux/$(_PROJECT).pot -o $@ -l $*;  \ +	else  \ +	  $(MSGMERGE) --no-wrap -U $@ aux/$(_PROJECT).pot;  \ +	fi #$Z +	@$(TOUCH) $@ +	@$(ECHO_EMPTY) + +# Compile a translation file. +bin/mo/%/messages.mo: $(v)po/%.po +	@$(PRINTF_INFO) '\e[00;01;31mMO\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p bin/mo/$* +	$(Q)cd bin/mo/$* && $(MSGFMT) $(__back3unless_v)$< #$Z +	@$(ECHO_EMPTY) + + +# INSTALL RULES: + +# Install all locales. +ifdef WITHOUT_GETTEXT +.PHONY: install-locale +install-locale: +endif +ifndef WITHOUT_GETTEXT +.PHONY: install-locale +install-locale: $(foreach L,$(LOCALES),bin/mo/$(L)/messages.mo) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL) -dm755 -- $(foreach L,$(LOCALES),"$(DESTDIR)$(LOCALEDIR)/$(L)/LC_MESSAGES") +	$(Q)$(foreach L,$(LOCALES),$(INSTALL_DATA) bin/mo/$(L)/messages.mo -- "$(DESTDIR)$(LOCALEDIR)/$(L)/LC_MESSAGES/$(PKGNAME).mo" &&) $(TRUE) +	@$(ECHO_EMPTY) +endif + + +# UNINSTALL RULES: + +# Uninstall all locales. +.PHONY: uninstall-locale +uninstall-locale: +	-$(Q)$(RM) -- $(foreach L,$(LOCALES),"$(DESTDIR)$(LOCALEDIR)/$(L)/LC_MESSAGES/$(PKGNAME).mo") + + +endif + diff --git a/mk/lang-c.mk b/mk/lang-c.mk new file mode 100644 index 0000000..7e9a15a --- /dev/null +++ b/mk/lang-c.mk @@ -0,0 +1,207 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file includes rules for C programs. ===# + + +# This file is ignored unless _C_STD is defined. +# _C_STD should be set the the version of C that +# is used. +#  +# If you want to compile with -pedantic, define +# the variable _PEDANTIC. +#  +# Define _CPPFLAGS with any additional CPP +# flags to use, _CFLAGS with any additional CC +# flags to use, and _LDFLAGS with any additional +# LD flags to use. +#  +# Defined in path.mk, you can change _ALL_DIRS +# if you do not want CPP definitions for all +# directories. +#  +# Define _HEADER_DIRLEVELS to specify the directory +# nesting level in src. It is assumed that all +# directories contain header files. Set to '0' if +# there are no header files. +#  +# _BIN shall list all commands to build. These +# should be the basenames. For each command +# you should be the variable _OBJ_$(COMMAND) +# that lists all objects files (without the +# suffix and without the aux/ prefix) that +# are required to build the command. + + +ifdef _C_STD + + + +# WHEN TO BUILD, INSTALL, AND UNINSTALL: + +cmd: cmd-c +install-cmd: install-cmd-c +uninstall: uninstall-cmd-c + + +# HELP VARIABLES: + +# Figure out whether the GCC is being used. +ifeq ($(shell $(PRINTF) '%s\n' ${CC} | $(HEAD) -n 1),gcc) +__USING_GCC = 1 +endif + + +# BUILD VARIABLES: + +# Optimisation settings for C code compilation. +ifndef OPTIMISE +ifndef DEBUG +OPTIMISE = -O2 -g +endif +ifdef DEBUG +ifdef __USING_GCC +OPTIMISE = -Og -g +endif +ifndef __USING_GCC +OPTIMISE = -g +endif +endif +endif + +# Warning settings for C code compilation. +ifdef _PEDANTIC +_PEDANTIC = -pedantic +endif +ifndef WARN +ifndef DEBUG +WARN = -Wall +endif +ifdef DEBUG +ifdef __USING_GCC +WARN = -Wall -Wextra $(_PEDANTIC) -Wdouble-promotion -Wformat=2 -Winit-self -Wmissing-include-dirs   \ +       -Wtrampolines -Wmissing-prototypes -Wmissing-declarations -Wnested-externs                    \ +       -Wno-variadic-macros -Wsync-nand -Wunsafe-loop-optimizations -Wcast-align                     \ +       -Wdeclaration-after-statement -Wundef -Wbad-function-cast -Wwrite-strings -Wlogical-op        \ +       -Wstrict-prototypes -Wold-style-definition -Wpacked -Wvector-operation-performance            \ +       -Wunsuffixed-float-constants -Wsuggest-attribute=const -Wsuggest-attribute=noreturn           \ +       -Wsuggest-attribute=format -Wnormalized=nfkc -fstrict-aliasing -fipa-pure-const -ftree-vrp    \ +       -fstack-usage -funsafe-loop-optimizations -Wshadow -Wredundant-decls -Winline -Wcast-qual     \ +       -Wsign-conversion -Wstrict-overflow=5 -Wconversion -Wsuggest-attribute=pure -Wswitch-default  \ +       -Wstrict-aliasing=1 -fstrict-overflow -Wfloat-equal -Wpadded -Waggregate-return               \ +       -Wtraditional-conversion +endif +ifndef __USING_GCC +WARN = -Wall -Wextra $(_PEDANTIC) +endif +endif +endif + +# Support for internationalisation? +ifndef WITHOUT_GETTEXT +_CPPFLAGS += -D'USE_GETTEXT=1' +endif + +# Add CPP definitions for all directories. +_CPPFLAGS += $(foreach D,$(_ALL_DIRS),-D'$(D)="$($(D))"') + + +# MORE HELP VARIABLES: + +# Compilation and linking flags, and command. +ifndef CPPFLAGS +CPPFLAGS = +endif +ifndef CFLAGS +CFLAGS = $(OPTIMISE) $(WARN) +endif +ifndef LDFLAGS +LDFLAGS = $(OPTIMISE) $(WARN) +endif +__CC = $(CC) -std=$(_C_STD) -c $(_CPPFLAGS) $(_CFLAGS) +__LD = $(CC) -std=$(_C_STD) $(_LDFLAGS) +__CC_POST = $(CPPFLAGS) $(CFLAGS) $(EXTRA_CPPFLAGS) $(EXTRA_CFLAGS) +__LD_POST = $(LDFLAGS) $(EXTRA_LDFLAGS) + +# Header files. +__H = +ifdef _HEADER_DIRLEVELS +ifeq ($(_HEADER_DIRLEVELS),1) +__H += src/*.h +endif +ifneq ($(_HEADER_DIRLEVELS),1) +ifeq ($(_HEADER_DIRLEVELS),2) +__H += src/*.h +__H += src/*/*.h +endif +ifneq ($(_HEADER_DIRLEVELS),2) +ifneq ($(_HEADER_DIRLEVELS),0) +__H += $(foreach W,$(shell $(SEQ) $(_HEADER_DIRLEVELS) | while read n; do $(ECHO) $$($(SEQ) $$n)" " | $(SED) 's/[^ ]* /\/\*/g'; done | $(XARGS) $(ECHO)),src$(W).h) +endif +endif +endif +endif + + +# BUILD RULES: + +.PHONY: cmd-c +cmd-c: $(foreach B,$(_BIN),bin/$(B)) + +# Compile a C file into an object file. +aux/%.o: $(v)src/%.c $(foreach H,$(__H),$(v)$(H)) +	@$(PRINTF_INFO) '\e[00;01;31mCC\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p $(shell $(DIRNAME) $@) +	$(Q)$(__CC) -o $@ $< $(__CC_POST) #$Z +	@$(ECHO_EMPTY) + +# Link object files into a command. +# Dependencies are declared below. +bin/%: +	@$(PRINTF_INFO) '\e[00;01;31mLD\e[34m %s\e[00;32m$A\n' "$@" +	@$(MKDIR) -p bin +	$(Q)$(__LD) -o $@ $^ $(__LD_POST) #$Z +	@$(ECHO_EMPTY) + +# Dependencies for the rule above. +include aux/lang-c.mk +aux/lang-c.mk: Makefile +	@$(MKDIR) -p aux +	@$(ECHO) > aux/lang-c.mk +	@$(foreach B,$(_BIN),$(ECHO) bin/$(B): $(foreach O,$(_OBJ_$(B)),aux/$(O).o) >> aux/lang-c.mk &&) $(TRUE) + + +# INSTALL RULES: + +.PHONY: install-cmd-c +install-cmd-c: $(foreach B,$(_BIN),bin/$(B)) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(BINDIR)" +ifdef COMMAND +	$(Q)$(INSTALL_PROGRAM) $(__STRIP) $^ -- "$(DESTDIR)$(BINDIR)" +endif +ifndef COMMAND +	$(Q)$(INSTALL_PROGRAM) $(__STRIP) $^ -- "$(DESTDIR)$(BINDIR)/$(COMMAND)" +endif +	@$(ECHO_EMPTY) + + +# UNINSTALL RULES: + +.PHONY: uninstall-cmd-c +uninstall-cmd-c: +ifdef COMMAND +	-$(Q)$(RM) -- "$(DESTDIR)$(BINDIR)/$(COMMAND)" +endif +ifndef COMMAND +	-$(Q)$(RM) -- $(foreach B,$(_BIN),"$(DESTDIR)$(BINDIR)/$(B)") +endif + + +endif + diff --git a/mk/lowerpath.mk b/mk/lowerpath.mk new file mode 100644 index 0000000..aadb91f --- /dev/null +++ b/mk/lowerpath.mk @@ -0,0 +1,279 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file overrides values uppercase path variables with values lowercase path variables. ===# + + +ifdef srcdir +VPATH = $(srcdir) +endif + +ifdef prefix +PREFIX = $(prefix) +endif + +ifdef sysconfdir +SYSCONFDIR = $(sysconfdir) +endif + +ifdef sharedstatedir +COMDIR = $(sharedstatedir) +endif + +ifdef localstatedir +VARDIR = $(localstatedir) +endif + +ifdef runstatedir +RUNDIR = $(runstatedir) +endif + +ifdef tmpdir +TMPDIR = $(tmpdir) +endif + +ifdef devdir +DEVDIR = $(devdir) +endif + +ifdef sysdir +SYSDIR = $(sysdir) +endif + +ifdef procdir +PROCDIR = $(procdir) +endif + +ifdef exec_prefix +EXEC_PREFIX = $(exec_prefix) +endif + +ifdef bindir +BINDIR = $(bindir) +endif + +ifdef sbindir +SBINDIR = $(sbindir) +endif + +ifdef libexecdir +LIBEXECDIR = $(libexecdir) +endif + +ifdef libdir +LIBDIR = $(libdir) +endif + +ifdef includedir +INCLUDEDIR = $(includedir) +endif + +ifdef oldincludedir +OLDINCLUDEDIR = $(oldincludedir) +endif + +ifdef datarootdir +DATADIR = $(datarootdir) +endif + +ifdef datadir +RESDIR = $(datadir) +endif + +ifdef libdatarootdir +SYSDEPDATADIR = $(libdatarootdir) +endif + +ifdef libdatadir +SYSDEPRESDIR = $(libdatadir) +endif + +ifdef lispdir +LISPDIR = $(lispdir) +endif + +ifdef localedir +LOCALEDIR = $(localedir) +endif + +ifdef licensedir +LICENSEDIR = $(licensedir) +endif + +ifdef cachedir +CACHEDIR = $(cachedir) +endif + +ifdef spooldir +SPOOLDIR = $(spooldir) +endif + +ifdef emptydir +EMPTYDIR = $(emptydir) +endif + +ifdef logdir +LOGDIR = $(logdir) +endif + +ifdef statedir +STATEDIR = $(statedir) +endif + +ifdef gamedir +GAMEDIR = $(gamedir) +endif + +ifdef sharedcachedir +COMCACHEDIR = $(sharedcachedir) +endif + +ifdef sharedpooldir +COMPOOLDIR = $(sharedpooldir) +endif + +ifdef sharedlogdir +COMLOGDIR = $(sharedlogdir) +endif + +ifdef sharedlogdir +COMSTATEDIR = $(sharedstatedir) +endif + +ifdef sharedgamedir +COMGAMEDIR = $(sharedgamedir) +endif + +ifdef localtmpdir +VARTMPDIR = $(localtmpdir) +endif + +ifdef sharedtmpdir +COMTMPDIR = $(sharedtmpdir) +endif + +ifdef lockdir +LOCKDIR = $(lockdir) +endif + +ifdef skeldir +SKELDIR = $(skeldir) +endif + +ifdef selfprocdir +SELFPROCDIR = $(selfprocdir) +endif + +ifdef docdir +DOCDIR = $(docdir) +endif + +ifdef infodir +INFODIR = $(infodir) +endif + +ifdef dvidir +DVIDIR = $(dvidir) +endif + +ifdef pdfdir +PDFDIR = $(pdfdir) +endif + +ifdef psdir +PSDIR = $(psdir) +endif + +ifdef htmldir +HTMLDIR = $(htmldir) +endif + +ifdef mandir +MANDIR = $(mandir) +endif + +ifdef man0 +MAN0 = $(man0) +endif + +ifdef man1 +MAN1 = $(man1) +endif + +ifdef man2 +MAN2 = $(man2) +endif + +ifdef man3 +MAN3 = $(man3) +endif + +ifdef man4 +MAN4 = $(man4) +endif + +ifdef man5 +MAN5 = $(man5) +endif + +ifdef man6 +MAN6 = $(man6) +endif + +ifdef man7 +MAN7 = $(man7) +endif + +ifdef man8 +MAN8 = $(man8) +endif + +ifdef man9 +MAN9 = $(man9) +endif + +ifdef man0ext +MAN0EXT = $(man0ext) +endif + +ifdef man1ext +MAN1EXT = $(man1ext) +endif + +ifdef man2ext +MAN2EXT = $(man2ext) +endif + +ifdef man3ext +MAN3EXT = $(man3ext) +endif + +ifdef man4ext +MAN4EXT = $(man4ext) +endif + +ifdef man5ext +MAN5EXT = $(man5ext) +endif + +ifdef man6ext +MAN6EXT = $(man6ext) +endif + +ifdef man7ext +MAN7EXT = $(man7ext) +endif + +ifdef man8ext +MAN8EXT = $(man8ext) +endif + +ifdef man9ext +MAN9EXT = $(man9ext) +endif + diff --git a/mk/man.mk b/mk/man.mk new file mode 100644 index 0000000..8105249 --- /dev/null +++ b/mk/man.mk @@ -0,0 +1,111 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for man pages. ===# + + +# Enables the rules: +#   install-man               Install all man page +#   install-man-untranslated  Install untranslated man page +#   install-man-locale        Install translated man page +#  +# This file is ignored unless _MAN_PAGE_SECTIONS +# is defined. _MAN_PAGE_SECTIONS should list all +# used man page sections. For all used sections +# there should also be a variable named +# _MAN_$(SECTION) that lists the suffixless +# basename of all man pages in that section. +#  +# The pathname of a man page should look +# like this: doc/man/$(DOCUMENT).$(SECTION) +# Translations looks like this: +# doc/man/$(DOCUMENT).$(LANGUAGE).$(SECTION) +#  +# For each language and section, there should +# be a variable _MAN_$(LANGUAGE)_$(SECTION) +# that lists all translated documents in that +# section and for that lanuage. These should +# be suffixless basenames. The lanuage counts +# as a suffix. +#  +# The translations of the man pages to +# install should be specified, by language, +# in the variable MAN_LOCALES. + + +ifdef _MAN_PAGE_SECTIONS + + +# WHEN TO BUILD, INSTALL, AND UNINSTALL: + +install: install-man +install-everything: install-man +install-doc: install-man +uninstall: uninstall-man + + +# HELP VARIABLES + +# Customisable man page filename. +ifdef COMMAND +ifeq ($(shell $(PRINTF) '%s\n' $(COMMAND) | $(WC) -l),1) +ifeq ($(shell $(PRINTF) '%s\n' $(_MAN_PAGE_SECTIONS) | $(WC) -l),1) +ifeq ($(shell $(PRINTF) '%s\n' $(_MAN_$(_MAN_PAGE_SECTIONS)) | $(WC) -l),1) +__MAN_COMMAND = $(COMMAND)$(MAN$(_MAN_PAGE_SECTIONS)EXT) +endif +endif +endif +endif + + +# INSTALL RULES: + +.PHONY: install-man +install-man: install-man-untranslated install-man-locale + +.PHONY: install-man-untranslated +install-man-untranslated: +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- $(foreach S,$(_MAN_PAGE_SECTIONS),"$(DESTDIR)$(MANDIR)/$(MAN$(S))") +ifndef __MAN_COMMAND +	$(Q)$(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(S)),$(INSTALL_DATA) $(v)doc/man/$(P).$(S) -- "$(DESTDIR)$(MANDIR)/$(MAN$(S))/$(P)$(MAN$(S)EXT)" &&)) $(TRUE) +endif +ifdef __MAN_COMMAND +	$(Q)$(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(S)),$(INSTALL_DATA) $(v)doc/man/$(P).$(S) -- "$(DESTDIR)$(MANDIR)/$(MAN$(S))/$(__MAN_COMMAND)" &&)) $(TRUE) +endif +	@$(ECHO_EMPTY) + +.PHONY: install-man-locale +install-man-locale: +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(foreach L,$(MAN_LOCALES),$(INSTALL_DIR) -- $(foreach S,$(_MAN_PAGE_SECTIONS),"$(DESTDIR)$(MANDIR)/$(L)/$(MAN$(S))") &&) $(TRUE) +ifndef __MAN_COMMAND +	$(Q)$(foreach L,$(MAN_LOCALES),$(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(L)_$(S)),$(INSTALL_DATA) $(v)doc/man/$(P).$(L).$(S) -- "$(DESTDIR)$(MANDIR)/$(L)/$(MAN$(S))/$(P)$(MAN$(S)EXT)" &&))) $(TRUE) +endif +ifdef __MAN_COMMAND +	$(Q)$(foreach L,$(MAN_LOCALES),$(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(L)_$(S)),$(INSTALL_DATA) $(v)doc/man/$(P).$(L).$(S) -- "$(DESTDIR)$(MANDIR)/$(L)/$(MAN$(S))/$(__MAN_COMMAND)" &&))) $(TRUE) +endif +	@$(ECHO_EMPTY) + + +# UNINSTALL RULES: + +.PHONY: uninstall-man +uninstall-man: +ifndef __MAN_COMMAND +	-$(Q)$(RM) -- $(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(S)),"$(DESTDIR)$(MANDIR)/$(MAN$(S))/$(P).$(MAN$(S)EXT)")) +	-$(Q)$(RM) -- $(foreach L,$(MAN_LOCALES),$(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(L)_$(S)),"$(DESTDIR)$(MANDIR)/$(L)/$(MAN$(S))/$(P)$(MAN$(S)EXT)"))) +endif +ifdef __MAN_COMMAND +	-$(Q)$(RM) -- "$(DESTDIR)$(MANDIR)/$(MAN$(_MAN_PAGE_SECTIONS))/$(__MAN_COMMAND)" +	-$(Q)$(RM) -- $(foreach L,$(MAN_LOCALES),$(foreach S,$(_MAN_PAGE_SECTIONS),$(foreach P,$(_MAN_$(L)_$(S)),"$(DESTDIR)$(MANDIR)/$(L)/$(MAN$(S))/$(__MAN_COMMAND)"))) +endif + + +endif + diff --git a/mk/path.mk b/mk/path.mk new file mode 100644 index 0000000..a65b7b8 --- /dev/null +++ b/mk/path.mk @@ -0,0 +1,176 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file define path variables. ===# + + +ifndef __PATH_MK_INCLUDED +__PATH_MK_INCLUDED = 1 + + +# DIRECTORIES: + +# The package path prefix, if you want to install to another root, set DESTDIR to that root. +PREFIX = /usr +# The package path prefix for /bin, /sbin, /lib and /libexec. +EXEC_PREFIX = /usr +# The command path excluding prefix. +BIN = /bin +# The administration command path excluding prefix. +SBIN = /sbin +# The library path excluding prefix. +LIB = /lib +# The executable library path excluding prefix. +LIBEXEC = /libexec +# The header-file path excluding prefix. +INCLUDE = /include +# The resource path excluding prefix. +DATA = /share +# The man page sections path excluding prefix. +MAN0 = /man0 +MAN1 = /man1 +MAN2 = /man2 +MAN3 = /man3 +MAN4 = /man4 +MAN5 = /man5 +MAN6 = /man6 +MAN7 = /man7 +MAN8 = /man8 +MAN9 = /man9 + +# The command path including prefix. +BINDIR = $(EXEC_PREFIX)$(BIN) +# The administration command path including prefix. +SBINDIR = $(EXEC_PREFIX)$(SBIN) +# The library path including prefix. +LIBDIR = $(EXEC_PREFIX)$(LIB) +# The executable library path including prefix. +LIBEXECDIR = $(EXEC_PREFIX)$(LIBEXEC) +# The header-file path including prefix. +INCLUDEDIR = $(PREFIX)$(INCLUDE) +# The header-file path including prefix. Must not be /usr/local. +ifeq ($(PREFIX),/usr/lcoal) +OLDINCLUDEDIR = /usr$(INCLUDE) +endif +ifneq ($(PREFIX),/usr/lcoal) +OLDINCLUDEDIR = $(PREFIX)$(INCLUDE) +endif +# The data path including prefix. +DATADIR = $(PREFIX)$(DATA) +# The architecture-dependent data path including prefix. +SYSDEPDATADIR = $(DATADIR) +# The resource path including prefix. +RESDIR = $(DATADIR) +# The architecture-dependent resource path including prefix. +SYSDEPRESDIR = $(RESDIR) +# The generic documentation path including prefix. +DOCDIR = $(DATADIR)/doc/$(PKGNAME) +# The info manual documentation path including prefix. +INFODIR = $(DATADIR)/info +# The DVI documentation path including prefix. +DVIDIR = $(DOCDIR) +# The PDF documentation path including prefix. +PDFDIR = $(DOCDIR) +# The PostScript documentation path including prefix. +PSDIR = $(DOCDIR) +# The HTML documentation path including prefix. +HTMLDIR = $(DOCDIR) +# The man page documentation path including prefix. +MANDIR = $(DATADIR)/man +# The Emacs LISP path including prefix. +LISPDIR = $(DATADIR)/emacs/site-lisp +# The locale path including prefix. +LOCALEDIR = $(DATADIR)/locale +# The license base path including prefix. +LICENSEDIR = $(DATADIR)/licenses +# The persistent variable data directory. +VARDIR = /var +# The persistent directory for temporary files. +VARTMPDIR = $(VARDIR)/tmp +# The network-common persistent variable data directory. +COMDIR = /com +# The network-common persistent directory for temporary files. +COMTMPDIR = $(COMDIR)/tmp +# The transient directory for temporary files. +TMPDIR = /tmp +# The transient directory for runtime files. +RUNDIR = /run +# The directory for site-specific configurations. +SYSCONFDIR = /etc +# The directory for pseudo-devices. +DEVDIR = /dev +# The /sys directory. +SYSDIR = /sys +# The /proc directory +PROCDIR = /proc +# The /proc/self directory +SELFPROCDIR = $(PROCDIR)/self +# The cache directory. +CACHEDIR = $(VARDIR)/cache +# The spool directory. +SPOOLDIR = $(VARDIR)/spool +# The empty directory. +EMPTYDIR = $(VARDIR)/empty +# The logfile directory. +LOGDIR = $(VARDIR)/log +# The state directory. +STATEDIR = $(VARDIR)/lib +# The highscore directory. +GAMEDIR = $(VARDIR)/games +# The lockfile directory. +LOCKDIR = $(RUNDIR)/lock +# The user skeleton directory. +SKELDIR = $(SYSCONFDIR)/skel +# The network-common cache directory. +COMCACHEDIR = $(COMDIR)/cache +# The network-common spool directory. +COMSPOOLDIR = $(COMDIR)/spool +# The network-common logfile directory. +COMLOGDIR = $(COMDIR)/log +# The network-common state directory. +COMSTATEDIR = $(COMDIR)/lib +# The network-common highscore directory. +COMGAMEDIR = $(COMDIR)/games + + +# FILENAME SUFFIXES: + +# Filename suffixes for man pages by section. +MAN0EXT = .0 +MAN1EXT = .1 +MAN2EXT = .2 +MAN3EXT = .3 +MAN4EXT = .4 +MAN5EXT = .5 +MAN6EXT = .6 +MAN7EXT = .7 +MAN8EXT = .8 +MAN9EXT = .9 + + +# HELP VARIABLES: + +# All path variables that includes the prefix, +# or are unaffected by the prefix. +_ALL_DIRS = BINDIR SBINDIR LIBDIR LIBEXECDIR INCLUDEDIR DATADIR SYSDEPDATADIR DOCDIR  \ +            INFODIR DVIDIR PDFDIR PSDIR HTMLDIR MANDIR LOCALEDIR LICENSEDIR VARDIR  \ +            RESDIR VARTMPDIR COMDIR COMTMPDIR TMPDIR RUNDIR SYSCONFDIR DEVDIR SYSDIR  \ +            PROCDIR SELFPROCDIR CACHEDIR SPOOLDIR EMPTYDIR LOGDIR STATEDIR GAMEDIR \ +            LOCKDIR SKELDIR COMCACHEDIR COMSPOOLDIR COMLOGDIR COMSTATEDIR COMGAMEDIR \ +            SYSDEPRESDIR OLDINCLUDEDIR + +# ../, ../../, and ../../../, ignored if v is used, which if an absolute path. +ifndef v +__back1unless_v = ../ +__back2unless_v = ../../ +__back3unless_v = ../../../ +endif + + +endif + diff --git a/mk/prologue.mk b/mk/prologue.mk new file mode 100644 index 0000000..525da28 --- /dev/null +++ b/mk/prologue.mk @@ -0,0 +1,16 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file includes rules for automatically rebuilding the makefile. ===# + + +base: Makefile + +Makefile: $(v)Makefile.in config.status $(v)configure $(v)mk/configure +	./config.status + diff --git a/mk/shell.mk b/mk/shell.mk new file mode 100644 index 0000000..853e368 --- /dev/null +++ b/mk/shell.mk @@ -0,0 +1,233 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for shell tab-completion using auto-auto-complete. ===# + + +# Enables the rules: +#   shell          Build tab-completion for all supported shells +#   bash           Build GNU Bash tab-completion +#   fish           Build fish tab-completion +#   zhs            Build Z shell tab-completion +#   install-shell  Install tab-completion for all supported shells +#   install-bash   Install GNU Bash tab-completion +#   install-fish   Install fish tab-completion +#   install-zsh    Install Z shell tab-completion +#  +# This file is ignored unless +# _AUTO_COMPLETE is defined. +#  +# _AUTO_COMPLETE shall list all commands that +# have an auto-auto-complete. These should be +# named src/$(COMMAND).auto-completion, where +# $(COMMAND) is the command with the script. +# If all auto-auto-complete scripts translations +# named src/$(COMMAND).$(LOCALE).auto-completion, +# SHELL_LOCALE can be set to install exactly +# on translation in place of the non-translated +# versions. +#  +# Although not used by this file, you should +# define _SHELL_LOCALES that lists all available +# translations. (it is used by dist.mk.) +#  +# You should also define _WITH_SHELL if you +# want shell tab-completion unless the user +# specifies otherwise. If you want it for +# just some shells, define _WITH_$(SHELL) +# for those shells instead of _WITH_SHELL. + + +ifdef _AUTO_COMPLETE + + +# HELP VARIABLES: + +# Include all that were not explicitly excluded? +ifdef _WITH_SHELL +_WITH_BASH = 1 +_WITH_FISH = 1 +_WITH_ZSH = 1 +endif + +# Include for GNU Bash? +ifdef WITH_BASH +__WITH_BASH = 1 +endif +ifndef WITH_BASH +ifndef WITHOUT_BASH +ifdef _WITH_BASH +__WITH_BASH = 1 +endif +endif +endif + +# Include for fish? +ifdef WITH_FISH +__WITH_FISH = 1 +endif +ifndef WITH_FISH +ifndef WITHOUT_FISH +ifdef _WITH_FISH +__WITH_FISH = 1 +endif +endif +endif + +# Include for Z Shell? +ifdef WITH_ZSH +__WITH_ZSH = 1 +endif +ifndef WITH_ZSH +ifndef WITHOUT_ZSH +ifdef _WITH_ZSH +__WITH_ZSH = 1 +endif +endif +endif + +# WHEN TO BUILD, INSTALL, AND UNINSTALL: + +all: shell +everything: shell +install: install-shell +install-doc: install-info install-dvi install-pdf install-ps install-html +uninstall: uninstall-shell + +shell: +install-shell: + +ifdef __WITH_BASH +shell: bash +install-shell: install-bash +endif +ifdef __WITH_FISH +shell: fish +install-shell: install-fish +endif +ifdef __WITH_ZSH +shell: zsh +install-shell: install-zsh +endif + + +# HELP VARIABLES: + +# Affixes on the source files. +ifdef SHELL_LOCALE +__AAC_L = .$(SHELL_LOCALE) +endif +__AAC = $(__AAC_L).auto-completion + +# Customised command name. +ifdef COMMAND +ifeq ($(shell $(PRINTF) '%s\n' $(COMMAND) | $(WC) -l),1) +ifeq ($(shell $(PRINTF) '%s\n' $(_AUTO_COMPLETE) | $(WC) -l),1) +__SHELL_COMMAND = "command=$(COMMAND)" +endif +endif +endif + + +# BUILD RULES: + +# Built tab-completion scripts for GNU Bash. +.PHONY: bash +bash: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).bash-completion) + +# Built tab-completion scripts for fish. +.PHONY: fish +fish: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).fish-completion) + +# Built tab-completion scripts for Z shell. +.PHONY: zsh +zsh: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).zsh-completion) + +# Built a tab-completion script for GNU Bash. +bin/%.bash-completion: $(v)src/%$(__AAC) +	@$(PRINTF_INFO) '\e[00;01;31mAUTO-AUTO-COMPLETE\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p bin +	$(Q)$(AUTO_AUTO_COMPLETE) bash -o $@ -s $< $(__SHELL_COMMAND) #$Z +	@$(ECHO_EMPTY) + +# Built a tab-completion script for fish. +bin/%.fish-completion: $(v)src/%$(__AAC) +	@$(PRINTF_INFO) '\e[00;01;31mAUTO-AUTO-COMPLETE\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p bin +	$(Q)$(AUTO_AUTO_COMPLETE) fish -o $@ -s $< $(__SHELL_COMMAND) #$Z +	@$(ECHO_EMPTY) + +# Built a tab-completion script for Z shell. +bin/%.zsh-completion: $(v)src/%$(__AAC) +	@$(PRINTF_INFO) '\e[00;01;31mAUTO-AUTO-COMPLETE\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p bin +	$(Q)$(AUTO_AUTO_COMPLETE) zsh -o $@ -s $< $(__SHELL_COMMAND) #$Z +	@$(ECHO_EMPTY) + + +# INSTALL RULES: + +# Install tab-completion scripts for GNU Bash. +.PHONY: install-bash +install-bash: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).bash-completion) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DATADIR)/bash-completion/completions" +ifndef __SHELL_COMMAND +	$(Q)$(foreach F,$(_AUTO_COMPLETE),$(INSTALL_DATA) bin/$(F).bash-completion -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(F)" &&) $(TRUE) +endif +ifdef __SHELL_COMMAND +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(COMMAND)" +endif +	@$(ECHO_EMPTY) + +# Install tab-completion scripts for fish. +.PHONY: install-fish +install-fish: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).fish-completion) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DATADIR)/fish/completions" +ifndef __SHELL_COMMAND +	$(Q)$(foreach F,$(_AUTO_COMPLETE),$(INSTALL_DATA) bin/$(F).fish-completion -- "$(DESTDIR)$(DATADIR)/fish/completions/$(F).fish" &&) $(TRUE) +endif +ifdef __SHELL_COMMAND +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DATADIR)/fish/completions/$(COMMAND).fish" +endif +	@$(ECHO_EMPTY) + +# Install tab-completion scripts for Z shell. +.PHONY: install-zsh +install-zsh: $(foreach F,$(_AUTO_COMPLETE),bin/$(F).zsh-completion) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DATADIR)/zsh/site-functions" +ifndef __SHELL_COMMAND +	$(Q)$(foreach F,$(_AUTO_COMPLETE),$(INSTALL_DATA) bin/$(F).zsh-completion -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(F)" &&) $(TRUE) +endif +ifdef __SHELL_COMMAND +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(COMMAND)" +endif +	@$(ECHO_EMPTY) + + +# UNINSTALL RULES: + +# Uninstall tab-completion. +.PHONY: uninstall-shell +uninstall-shell: +ifndef __SHELL_COMMAND +	-$(Q)$(RM) -- $(foreach F,$(_AUTO_COMPLETE),"$(DESTDIR)$(DATADIR)/bash-completion/completions/$(F)") +	-$(Q)$(RM) -- $(foreach F,$(_AUTO_COMPLETE),"$(DESTDIR)$(DATADIR)/fish/completions/$(F).fish") +	-$(Q)$(RM) -- $(foreach F,$(_AUTO_COMPLETE),"$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(F)") +endif +ifdef __SHELL_COMMAND +	-$(Q)$(RM) -- "$(DESTDIR)$(DATADIR)/bash-completion/completions/$(COMMAND)" +	-$(Q)$(RM) -- "$(DESTDIR)$(DATADIR)/fish/completions/$(COMMAND).fish" +	-$(Q)$(RM) -- "$(DESTDIR)$(DATADIR)/zsh/site-functions/_$(COMMAND)" +endif + + +endif + diff --git a/mk/tags.mk b/mk/tags.mk new file mode 100644 index 0000000..a7c695b --- /dev/null +++ b/mk/tags.mk @@ -0,0 +1,25 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== These rules are used for generate etags- and ctags-tablse. ===# + + +# Generate etags-table. +.PHONY: TAGS +TAGS: +	@$(ECHO) +	@$(ECHO) "TAGS is not implemented. Did not see the need. Feel free to implement if you want." +	@$(ECHO) + +# Generate ctags-table +.PHONY: tags +tags: +	@$(ECHO) +	@$(ECHO) "tags is not implemented. Did not see the need. Feel free to implement if you want." +	@$(ECHO) + diff --git a/mk/texinfo.mk b/mk/texinfo.mk new file mode 100644 index 0000000..e544464 --- /dev/null +++ b/mk/texinfo.mk @@ -0,0 +1,287 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +# TODO ((support translations)) +#=== These rules are used for Texinfo manuals. ===# + + +# Enables the rules: +#   info          Build info manual +#   dvi           Build DVI manual +#   pdf           Build PDF manual +#   ps            Build PostScript manual +#   html          Build HTML manual +#   install-info  Install info manual +#   install-dvi   Install DVI manual +#   install-pdf   Install PDF manual +#   install-ps    Install PostScript manual +#   install-html  Install HTML manual +#  +# This file is ignored unless +# _HAVE_TEXINFO_MANUAL is defined. +#  +# This file can only build output for +# one Texinfo manual. This manual must +# be named doc/info/$(_PROJECT).texinfo. +# Additional sourced are set by specifing +# how man directories deep doc/info nests +# in the variable _TEXINFO_DIRLEVELS. +#  +# If the info manual splits, specify the +# split-number, of the file with the highest +# split-number, in the variable _INFOPARTS. +#  +# If the project has a logo, _LOGO should +# name the suffixless basename of the SVG +# files that contains the logo. This file +# must be located in doc/. +#  +# _HTML_FILES should the basename (with +# suffix) of all files generated by `html`. + + +ifdef _HAVE_TEXINFO_MANUAL + + +# WHEN TO BUILD, INSTALL, AND UNINSTALL: + +all: info +everything: info dvi pdf ps html +doc: info dvi pdf ps html +install: install-info +install-everything: install-info install-dvi install-pdf install-ps install-html +install-doc: install-info install-dvi install-pdf install-ps install-html +uninstall: uninstall-info uninstall-dvi uninstall-pdf uninstall-ps uninstall-html + + +# HELP VARIABLES: + +# Files from which the Texinfo manuals are built. +ifdef _TEXINFO_DIRLEVELS +ifeq ($(_TEXINFO_DIRLEVELS),1) +__TEXI_SRC_ = *.texinfo +endif +ifeq ($(_TEXINFO_DIRLEVELS),2) +__TEXI_SRC_ = *.texinfo */*.texinfo +endif +ifeq ($(_TEXINFO_DIRLEVELS),3) +__TEXI_SRC_ = *.texinfo */*.texinfo */*/*.texinfo +endif +ifneq ($(_TEXINFO_DIRLEVELS),1) +ifneq ($(_TEXINFO_DIRLEVELS),2) +ifneq ($(_TEXINFO_DIRLEVELS),3) +__TEXI_SRC_ = $(foreach W,$(shell $(SEQ) $(_TEXINFO_DIRLEVELS) | while read n; do $(ECHO) $$($(SEQ) $$n)" " | $(SED) 's/[^ ]* /\/\*/g'; done | $(XARGS) $(ECHO)),$(shell $(ECHO) $(W).texinfo | $(SED) 's/^.//')) +endif +endif +endif +__TEXI_SRC = $(foreach S,$(__TEXI_SRC_),$(foreach F,$(shell cd $(v)doc/info && $(ECHO) $(S)),aux/doc/$(F))) +endif + +# Split parts of the info manual. +ifdef _INFOPARTS +ifneq ($(_INFOPARTS),0) +__INFOPARTS = $(shell $(SEQ)) +endif +endif + +# Flags for TeX processed output. +__TEXINFO_FLAGS = $(TEXINFO_FLAGS) +ifdef _LOGO +__TEXINFO_FLAGS += '--texinfo="@set LOGO $(_LOGO)"' +endif + + +# BUILD RULES: + +ifdef _LOGO +# Prepare conversion of logo. +aux/$(_LOGO).svg: $(v)doc/$(_LOGO).svg +	@$(PRINTF_INFO) '\e[00;01;31mCP\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p aux +	$(Q)$(CP) $^ $@ #$Z +	@$(ECHO_EMPTY) + +# Intermediate format for the logo for DVI and PostScript manuals. +aux/$(_LOGO).ps: $(v)doc/$(_LOGO).svg +	@$(PRINTF_INFO) '\e[00;01;31mPS\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p aux +	$(Q)$(SVG2PS) $^ > $@ #$Z +	@$(ECHO_EMPTY) + +# Logo for DVI and PostScript manuals. +aux/$(_LOGO).eps: aux/$(_LOGO).ps +	@$(PRINTF_INFO) '\e[00;01;31mEPS\e[34m %s\e[00m$A\n' "$@" +	$(Q)$(PS2EPS) $^ #$Z +	@$(ECHO_EMPTY) + +# Logo for PDF manual. +aux/$(_LOGO).pdf: $(v)doc/$(_LOGO).svg +	@$(PRINTF_INFO) '\e[00;01;31mPDF\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p aux +	$(Q)$(SVG2PDF) $^ > $@ #$Z +	@$(ECHO_EMPTY) +endif + +# Copy texinfo files to aux/doc. +aux/doc/%.texinfo: $(v)doc/info/%.texinfo +	@$(PRINTF_INFO) '\e[00;01;31mCP\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p $(shell $(DIRNAME) $@) +	$(Q)$(CP) $< $@ #$Z +	@$(ECHO_EMPTY) + +# Build info manual. +.PHONY: info +info: $(__TEXI_SRC) bin/$(_PROJECT).info +bin/%.info $(foreach P,$(__INFOPARTS),bin/%.info-$(P)): aux/doc/%.texinfo $(__TEXI_SRC) +	@$(PRINTF_INFO) '\e[00;01;31mTEXI\e[34m %s\e[00m$A\n' "$@" +	@$(MKDIR) -p bin +	$(Q)$(MAKEINFO) $< #$Z +	@$(PRINTF_INFO) '$A' +	$(Q)$(MV) $*.info $@ #$Z +	@$(ECHO_EMPTY) + +# Build DVI manual. +.PHONY: dvi +dvi: $(__TEXI_SRC) bin/$(_PROJECT).dvi +bin/%.dvi: aux/doc/%.texinfo $(__TEXI_SRC) $(foreach L,$(_LOGO),aux/$(L).eps) +	@$(PRINTF_INFO) '\e[00;01;31mTEXI\e[34m %s\e[00m$A\n' "$@" +	@! $(TEST) -d aux/dvi/$* || $(RM) -rf aux/dvi/$* +	@$(MKDIR) -p aux/dvi/$* bin +	$(Q)cd aux/dvi/$* && $(TEXI2DVI) $(__back3unless_v)$< $(__TEXINFO_FLAGS) < /dev/null #$Z +	@$(PRINTF_INFO) '$A' +	$(Q)$(MV) aux/dvi/$*/$*.dvi $@ #$Z +	@$(ECHO_EMPTY) + +# Build PDF manual. +.PHONY: pdf +pdf: $(__TEXI_SRC) bin/$(_PROJECT).pdf +bin/%.pdf: aux/doc/%.texinfo $(__TEXI_SRC) $(foreach L,$(_LOGO),aux/$(L).pdf) +	@$(PRINTF_INFO) '\e[00;01;31mTEXI\e[34m %s\e[00m$A\n' "$@" +	@! $(TEST) -d aux/pdf/$* || $(RM) -rf aux/pdf/$* +	@$(MKDIR) -p aux/pdf/$* bin +	$(Q)cd aux/pdf/$* && $(TEXI2PDF) $(__back3unless_v)$< $(__TEXINFO_FLAGS) < /dev/null #$Z +	@$(PRINTF_INFO) '$A' +	$(Q)$(MV) aux/pdf/$*/$*.pdf $@ #$Z +	@$(ECHO_EMPTY) + +# Build PostScript manual. +.PHONY: ps +ps: $(__TEXI_SRC) bin/$(_PROJECT).ps +bin/%.ps: aux/doc/%.texinfo $(__TEXI_SRC) $(foreach L,$(_LOGO),aux/$(L).eps) +	@$(PRINTF_INFO) '\e[00;01;31mTEXI\e[34m %s\e[00m$A\n' "$@" +	@! $(TEST) -d aux/ps/$* || $(RM) -rf aux/ps/$* +	@$(MKDIR) -p aux/ps/$* bin +	$(Q)cd aux/ps/$* && $(TEXI2PS) $(__back3unless_v)$< $(__TEXINFO_FLAGS) < /dev/null #$Z +	@$(PRINTF_INFO) '$A' +	$(Q)$(MV) aux/ps/$*/$*.ps $@ #$Z +	@$(ECHO_EMPTY) + +# Build HTML manual. +.PHONY: html +html: $(__TEXI_SRC) bin/html/$(_PROJECT)/index.html +bin/html/%/index.html: aux/doc/%.texinfo $(__TEXI_SRC) +	@$(PRINTF_INFO) '\e[00;01;31mTEXI\e[34m %s\e[00m$A\n' "$@" +	@! $(TEST) -d bin/html/$* || $(RM) -rf bin/html/$* +	@$(MKDIR) -p bin/html +	$(Q)cd bin/html && $(MAKEINFO_HTML) $(__back2unless_v)$< < /dev/null #$Z +	@$(ECHO_EMPTY) + + +# INSTALL RULES: + +# Install info manual. +.PHONY: install-info +install-info: bin/$(_PROJECT).info $(foreach P,$(__INFOPARTS),bin/%.info-$(P)) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(INFODIR)" +	$(Q)$(INSTALL_DATA) bin/$(_PROJECT).info -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info" +	$(Q)$(forearch P,$(__INFOPARTS),$(INSTALL_DATA) bin/$*.info-$(P) -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info-$(P)" &&) $(TRUE) +ifdef POST_INSTALL +	$(POST_INSTALL) +endif +	$(Q)if $(SHELL) -c '$(N) $(INSTALL_INFO) --version' > /dev/null 2>&1; then  \ +	  $(N)$(z) $(INSTALL_INFO) -- "${DESTDIR}${INFODIR}/$(PKGNAME).info" "${DESTDIR}${INFODIR}/dir";  \ +	else  \ +	  $(TRUE);  \ +	fi +ifdef POST_INSTALL +	$(NORMAL_INSTALL) +endif +	@$(ECHO_EMPTY) + +# Install DVI manual. +.PHONY: install-dvi +install-dvi: bin/$(_PROJECT).dvi +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(DVIDIR)" +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(DVIDIR)/$(PKGNAME).dvi" +	@$(ECHO_EMPTY) + +# Install PDF manual. +.PHONY: install-pdf +install-pdf: bin/$(_PROJECT).pdf +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(PDFDIR)" +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(PDFDIR)/$(PKGNAME).pdf" +	@$(ECHO_EMPTY) + +# Install PostScript manual. +.PHONY: install-ps +install-ps: bin/$(_PROJECT).ps +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(PSDIR)" +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(PSDIR)/$(PKGNAME).ps" +	@$(ECHO_EMPTY) + +# Install HTML manual. +.PHONY: install-html +install-html: $(foreach F,$(_HTML_FILES),bin/html/$(_PROJECT)/$(F)) +	@$(PRINTF_INFO) '\e[00;01;31mINSTALL\e[34m %s\e[00m\n' "$@" +	$(Q)$(INSTALL_DIR) -- "$(DESTDIR)$(HTMLDIR)/$(PKGNAME)" +	$(Q)$(INSTALL_DATA) $^ -- "$(DESTDIR)$(HTMLDIR)/$(PKGNAME)/" +	@$(ECHO_EMPTY) + + +# UNINSTALL RULES: + +# Uninstall info manual. +.PHONY: uninstall-info +uninstall-info: +ifdef PRE_UNINSTALL +	$(PRE_UNINSTALL) +endif +	-$(Q)$(N)$(a) $(INSTALL_INFO) --delete -- "${DESTDIR}${INFODIR}/$(PKGNAME).info" "${DESTDIR}${INFODIR}/dir" +ifdef PRE_UNINSTALL +	$(NORMAL_UNINSTALL) +endif +	-$(Q)$(RM) -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info" $(forearch P,$(__INFOPARTS),"$(DESTDIR)$(INFODIR)/$(PKGNAME).info-$(P)") + +# Uninstall DVI manual. +.PHONY: uninstall-dvi +uninstall-dvi: +	-$(Q)$(RM) -- "$(DESTDIR)$(DVIDIR)/$(PKGNAME).dvi" + +# Uninstall PDF manual. +.PHONY: uninstall-pdf +uninstall-pdf: +	-$(Q)$(RM) -- "$(DESTDIR)$(PDFDIR)/$(PKGNAME).pdf" + +# Uninstall PostScript manual. +.PHONY: uninstall-ps +uninstall-ps: +	-$(Q)$(RM) -- "$(DESTDIR)$(PSDIR)/$(PKGNAME).ps" + +# Uninstall HTML manual. +.PHONY: uninstall-html +uninstall-html: +	-$(Q)$(RM) -- $(foreach F,$(_HTML_FILES),"$(DESTDIR)$(HTMLDIR)/$(PKGNAME)/$(F)") +	-$(Q)$(RM) -- "$(DESTDIR)$(HTMLDIR)/$(PKGNAME)" + + +endif + diff --git a/mk/tools.mk b/mk/tools.mk new file mode 100644 index 0000000..63d6d66 --- /dev/null +++ b/mk/tools.mk @@ -0,0 +1,163 @@ +# Copyright (C) 2015  Mattias Andrée <maandree@member.fsf.org> +#  +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved.  This file is offered as-is, +# without any warranty. + + +#=== This file defines variables for all used commands. ===# + + +# Part of GNU Coreutils: +BASENAME ?= basename +CHGRP ?= chgrp +CHMOD ?= chmod +CHOWN ?= chown +CP ?= cp +CPLIT ?= cplit +CUT ?= cut +DATE ?= date +DIRNAME ?= dirname +ECHO ?= echo +ENV ?= env +EXPAND ?= expand +EXPR ?= expr +FALS ?= false +FMT ?= fmt +FOLD ?= fold +HEAD ?= head +INSTALL ?= install +INSTALL_DATA ?= $(INSTALL) -m644 +INSTALL_DIR ?= $(INSTALL) -dm755 +INSTALL_PROGRAM ?= $(INSTALL) -m755 +JOIN ?= join +LN ?= ln +MKDIR ?= mkdir +MKFIFO ?= mkfifo +MKNOD ?= mknod +MV ?= mv +NL ?= nl +NPROC ?= nproc +NUMFMT ?= numfmt +OD ?= od +PASTE ?= paste +PATHCHK ?= pathchk +PR ?= pr +PRINTF ?= printf +READLINK ?= readlink +REALPATH ?= realpath +RM ?= rm +RMDIR ?= rmdir +SEQ ?= seq +SLEEP ?= sleep +SORT ?= sort +SPLIT ?= split +STAT ?= stat +TAC ?= tac +TAIL ?= tail +TEE ?= tee +TEST ?= test +TOUCH ?= touch +TR ?= tr +TRUE ?= true +TRUNCATE ?= truncate +TSORT ?= tsort +UNAME ?= uname +UNEXPAND ?= unexpand +UNIQ ?= uniq +WC ?= wc +YES ?= yes + +# Part of GNU help2man: +HELP2MAN ?= help2man + +# Part of GNU tar: +TAR ?= tar + +# Part of GNU Findutils: +FIND ?= find +XARGS ?= xargs + +# Part of GNU Grep: +GREP ?= grep +EGREP ?= egrep +FGREP ?= fgrep + +# Part of GNU Sed: +SED ?= sed + +# Part of GNU Privacy Guard: +GPG ?= gpg + +# Part of Texinfo: +MAKEINFO ?= makeinfo +MAKEINFO_HTML ?= $(MAKEINFO) --html +INSTALL_INFO ?= install-info + +# Part of Texlive-plainextra: +TEXI2PDF ?= texi2pdf +TEXI2DVI ?= texi2dvi +TEXI2PS ?= texi2pdf --ps + +# Part of Texlive-core: +PS2EPS ?= ps2eps + +# Part of librsvg: +RSVG_CONVERT ?= rsvg-convert +SVG2PS ?= $(RSVG_CONVERT) --format=ps +SVG2PDF ?= $(RSVG_CONVERT) --format=pdf + +# Part of GNU Compiler Collection: +CC ?= cc +CPP ?= cpp +CXX ?= c++ + +# Part of GNU Binutils: +AR ?= ar +LD ?= ld +RANLIB ?= ranlib + +# Part of GNU Bison: +BISON ?= bison +YACC ?= yacc + +# Part of Flex: +FLEX ?= FLEX +LEX ?= lex + +# Part of GNU C Library: +LDCONFIG ?= ldconfig + +# Part of GNU Gettext: +XGETTEXT ?= xgettext +MSGFMT ?= msgfmt +MSGMERGE ?= msgmerge +MSGINIT ?= msginit + +# Part of gzip: +GZIP ?= gzip +GZIP_COMPRESS ?= $(GZIP) -k9 + +# Part of bzip2: +BZIP2 ?= bzip2 +BZIP2_COMPRESS ?= $(BZIP2) -k9 + +# Part of xz: +XZ ?= xz +XZ_COMPRESS ?= $(XZ) -ke9 + +# Part of auto-auto-complete: +AUTO_AUTO_COMPLETE ?= auto-auto-complete + + +# Change to $(TRUE) to suppress the bold red and blue output. +ifndef PRINTF_INFO +PRINTF_INFO = $(PRINTF) +endif + +# Change to $(TRUE) to suppress empty lines +ifndef ECHO_EMPTY +ECHO_EMPTY = $(ECHO) +endif + | 
