2018-04-08  Mathieu Lirzin  <mthl@gnu.org>

	version 1.1.1
	* NEWS: Record release date.

	maint: Update "maint.mk"
	* maint.mk (gpg_key_ID, gnu_rel_host, noteworthy_changes)
	(gnu_ftp_host-alpha, gnu_ftp_host-beta)
	(gnu_ftp_host-stable): New macros.
	(release, upload, web-manual, web-manual-update): New rules.

	maint: Update README
	* README: Do not include the version number.  Refer to "HACKING" when
	"INSTALL" is not available.  Tell about the "--disable-multi-user"
	configure option.

	maint: Update NEWS
	* NEWS: Update.

	vixie-time: Refactor 'parse-vixie-time'
	* src/mcron/vixie-time.scm (parse-vixie-time): Use 'match' to avoid
	complex 'car' and 'cdr' usage.

	vixie-time: Refactor 'interpolate-weekdays'
	* src/mcron/vixie-time.scm (interpolate-weekdays): Avoid mutation and
	add 'range-wday' inner procedure.

	tests: Add "tests/vixie-time.scm"
	* tests/vixie-time.scm: New test.
	* Makefile.am (TESTS): Add it.

2018-04-01  Mathieu Lirzin  <mthl@gnu.org>

	vixie-time: Adapt to '%find-best-next' possible infinite result
	This is a follow up to commit ae6deb8ea23570c02a7b575a53bba37048aab59f.

	* src/mcron/vixie-time.scm (increment-time-component): Check if
	'%find-best-next' returns '+inf.0' not 9999.

2018-03-27  Mathieu Lirzin  <mthl@gnu.org>

	utils: Check 'show-version' and 'show-package-information'
	* tests/utils.scm ("show-package-information")
	("show-version"): New tests.

2018-03-27  Mathieu Lirzin  <mthl@gnu.org>

	utils: Remove 'parse-args'
	It seems that it is not useful to catch 'misc-error exception when
	calling 'getopt-long'.  Since 'parse-args' purpose was only to catch
	this particular error, it can be deleted.

	* src/mcron/utils.scm (parse-args): Remove.

2018-03-27  Mathieu Lirzin  <mthl@gnu.org>

	job-specifier: Check 'job'
	* tests/job-specifier.scm ("job: procedure timeproc")
	("job: list timeproc", "job: string timeproc", "job: list action")
	("job: invalid string timeproc", "job: invalid timeproc")
	("job: procedure action", "job: string action")
	("job: user name"): New tests.

	job-specifier: Box 'configuration-user' global variable
	* src/mcron/job-specifier.scm (configuration-user): Box it using
	SRFI-111 to be explicit about the mutability of this object.
	(job): Adapt.
	(set-configuration-user): Adapt and use 'get-user'.
	* tests/job-specifier.scm ("set-configuration-user: passwd entry")
	("set-configuration-user: invalid uid", "set-configuration-user: uid")
	("set-configuration-user: invalid spec")
	("set-configuration-user: name"): New tests.

	job-specifier: Check 'next-...' procedures
	* tests/job-specifier.scm ("next-year", "next-month", "next-day")
	("next-hour", "next-minute", "next-second"): New tests.
	("next-hour-from"): Remove.

	job-specifier: Fix typo "implement" => "implementation"
	* src/mcron/job-specifier.scm (%find-best-next): Fix typo.

2018-03-26  Mathieu Lirzin  <mthl@gnu.org>

	base: Check how child processes are handled
	* tests/base.scm ("run-job: basic"): Check the number of children too.
	("child-cleanup: one", "update-number-children!: set value"): New tests.

2018-03-26  Mathieu Lirzin  <mthl@gnu.org>

	job-specifier: Adapt 'bump-time' to 'next-...-from' procedures
	This is a follow-up to commit 913e3c65e4f56476e8ac69f4892cf92c125751ec.

	Since 'next-...-from' procedures now uses an '#:optional' argument
	instead of a dotted optional arguments list, 'bump-time' doesn't need to
	unwrap VALUE-LIST anymore.

	* src/mcron/job-specifier.scm (bump-time): Pass VALUE-LIST directly to
	'%find-best-next'.
	* tests/job-specifier.scm ("next-hour-from"): New test.
	* NEWS: Update.

	Reported-by: Ludovic Courtès <ludo@gnu.org>

2018-03-26  Mathieu Lirzin  <mthl@gnu.org>

	job-specifier: Preserve '%find-best-next' arguments exactness
	The behavior of the 'min' procedure which converts its parameters to
	inexact numbers when at least one of them is inexact was causing
	'%find-best-next' to always return real numbers.

	* src/mcron/job-specifier.scm (%find-best-next): Preserve the exactness
	of numbers in NEXT-LIST.
	* tests/job-specifier.scm ("%find-best-next: exact"): New test.

	Reported-by: Ludovic Courtès <ludo@gnu.org>

2018-03-26  Mathieu Lirzin  <mthl@gnu.org>

	maint: Replace "build-aux/gnu-fetch" with 'fetch' maintainer rule
	Fetching third-party files inside a make rule is convenient and less
	error prone since 'make' has access to '$srcdir'.

	* build-aux/gnu-fetch: Delete.
	* maint.mk (WGET, git_sv_host, sv_git_am, sv_git_gl)
	(fetchfiles): New macros.
	(fetch): New target.
	* HACKING <Updating auxilary scripts>: Update instructions.

2018-03-26  Mathieu Lirzin  <mthl@gnu.org>

	build: Add "maint.mk"
	* maint.mk: New maintainer-only Makefile fragment.
	* Makefile.am: Include it.
	* configure.ac: Substitute "maint.mk" content when it exists.

2018-03-25  Mathieu Lirzin  <mthl@gnu.org>

	maint: Document how to get code coverage reports
	* HACKING <Code coverage>: New section.

	maint: Update files from upstream with "build-aux/gnu-fetch"
	* build-aux/test-driver.scm: Update.

	utils: It's 2018!
	* src/mcron/utils.scm (show-version): Update copyright.

	utils: Check 'mcron-error'
	* tests/utils.scm ("mcron-error: exit code", "mcron-error: output")
	("mcron-error: output no-exit", "mcron-error: only stderr"): New tests.

	tests: Add "tests/utils.scm"
	* tests/utils.scm: New test.
	* Makefile.am (TESTS): Add it.

2018-03-24  Mathieu Lirzin  <mthl@gnu.org>

	maint: Update files from upstream with "build-aux/gnu-fetch"
	* build-aux/gitlog-to-changelog: Update.
	* build-aux/test-driver.scm: Likewise.

	maint: Add "build-aux/gnu-fetch" script.
	* build-aux/gnu-fetch: New script for fetching auxilary scripts
	maintained in other GNU repositories.
	* HACKING: Document how to run it.

	tests: Remove unused schedule stubs
	* tests/base.scm ("number-children: init")
	("update-number-children!: 1+", "update-number-children!: 1-"): Remove
	'let' form defining the schedule stub.

	environment: Check configuration environment
	* tests/environment.scm ("current-environment-mods-copy: empty")
	("current-environment-mods: init", "append-environment-mods: basic")
	("append-environment-mods: twice", "clear-environment-mods: effect")
	("current-environment-mods-copy: basic"): New tests.

	environment: Refactor configuration environment handling
	* src/mcron/environment.scm (current-environment-mods): Rename to ...
	(%current-environment-mods): ... this.  Box it using SRFI-111 to be
	explicit about the mutability of this object.
	(get-current-environment-mods-copy, clear-environment-mods)
	(append-environment-mods): New '#:ENVIRON' argument.

	base: Check 'run-job'
	* tests/base.scm ("run-job: basic"): New test.

	base: Box 'number-children'
	* src/mcron/base.scm (number-children): Box it using SRFI-111 to be
	explicit about the mutability of this object.
	(update-number-children!): New procedure.
	(run-job, child-cleanup): Use it.
	* tests/base.scm ("update-number-children!: 1+")
	("number-children: init", "update-number-children!: 1-"): New tests.

	base: Rewrite 'child-cleanup'
	* src/mcron/base.scm (child-cleanup): Use recursion instead of 'do'.

	utils: Add 'get-user'
	* src/mcron/utils.scm (get-user): New procedure.
	* src/mcron/job-specifier.scm (job): Use it.
	* src/mcron/base.scm (remove-user-jobs): Likewise.

	base: Rewrite 'find-next-jobs' docstring.
	* src/mcron/base.scm (find-next-jobs): Don't explain the detail of
	implementation in the docstring.

	tests: Add "tests/base.scm"
	* tests/base.scm: New test.
	* Makefile.am (TESTS): Add it.

2018-03-24  Mathieu Lirzin  <mthl@gnu.org>

	base: Add '<schedule>' record data type
	Reifying the notion of a schedule helps reasoning about the code.
	Passing a schedule as an argument to related procedures allows writing
	simpler unit tests.

	* src/mcron/base.scm(<schedule>): New record data type.
	(make-schedule, schedule-user, set-schedule-user!)
	(schedule-system, set-schedule-system!)
	(schedule-current, set-schedule-current!): New procedures.
	(system-job-list, user-job-list, configuration-source): Replace those
	global variables with ...
	(%global-schedule): ... this global <schedule> instance.
	* src/mcron/base.scm (use-system-job-list, use-user-job-list)
	(remove-user-jobs, clear-system-jobs, add-job, find-next-jobs)
	(display-schedule, run-job-loop): Add '#:SCHEDULE' keyword argument.
	* doc/mcron.texi (The base module): Update documentation.

2018-03-23  Mathieu Lirzin  <mthl@gnu.org>

	build: Check non-standard C functions at configure time
	* configure.ac: Check 'argp_parse' and 'asprintf' presence.

	job-specifier: Use 'simple-format'
	* src/mcron/job-specifier.scm (job): Use 'simple-format' instead of
	'with-output-to-string'.

2018-03-20  Mathieu Lirzin  <mthl@gnu.org>

	maint: Update copyright years

2018-03-20  Mathieu Lirzin  <mthl@gnu.org>

	utils: Use 'scandir' instead of custom 'for-each-file'
	* src/mcron/utils.scm (for-each-file): Delete.
	* src/mcron/scripts/cron.scm (process-files-in-system-directory): Use
	'scandir' which has the benefit of being deterministic.
	* src/mcron/scripts/mcron.scm (process-files-in-user-directory):
	Likewise.
	* tests/schedule.sh: Update expected output which is now more reliable.
	* NEWS: Update.

	Suggested-by: Ludovic Courtès <ludo@gnu.org>

2018-03-20  Mathieu Lirzin  <mthl@gnu.org>

	tests: Set timezone in "schedule.sh"
	Previously the test environment was implicitly expecting the current
	timezone to be UTC+1.

	* tests/schedule.sh: Set TZ environment variable to 'UTC0'.
	Update expected result.

	Reported-by: Ludovic Courtès <ludo@gnu.org>

2018-03-20  Mathieu Lirzin  <mthl@gnu.org>

	maint: Update NEWS
	* NEWS: Announce the availability of 'make installcheck'.

	build: Support 'make installcheck'
	* configure.ac: Pass 'std-options' to AM_INIT_AUTOMAKE to check that the
	"--help" and "--version" options can be passed to installed programs.
	* Makefile.am (installcheck-local): New rule which checks the programs
	presence and configuration.

2018-03-20  Mathieu Lirzin  <mthl@gnu.org>

	build: Properly set Guile load paths in programs
	This fixes an issue where the installed Guile load paths were set by the
	undefined 'moduledir' Make macro.

	* Makefile.am (AM_CPPFLAGS): Define PACKAGE_LOAD_PATH with
	'guilesitedir' macro and PACKAGE_LOAD_COMPILED_PATH with
	'guilesitegodir'.
	* NEWS: Update.

2018-03-20  Mathieu Lirzin  <mthl@gnu.org>

	build: Handle all programs names transformations
	Previously only prepending a prefix was handled when installing 'crontab'.
	Using the 'transform' Make macro allows the installation process to support
	generic transformations as defined by the '--program-suffix' and
	'--program-transform-name' configure options.

	* configure.ac: Don't substitue '@real_program_prefix@'.
	* Makefile.am (fpp): Remove.
	(transform_exe): New macro.
	[MULTI_USER] (install-exec-hook): Use it when installing 'crontab'.

2018-03-19  Mathieu Lirzin  <mthl@gnu.org>

	build: Reverse '--disable-multi-user' effect
	This fixes a bug where the '--disable-multi-user' was actually having the
	reverse effect of installing 'cron' and 'crontab'.

	* configure.ac: Reverse equality test when setting 'MULTI_USER' Automake
	conditional.

2018-03-19  Mathieu Lirzin  <mthl@gnu.org>

	maint: Remove obsolete configure checks
	* configure.ac: Don't check for 'sed' and 'cp' programs which are
	considered portable.  Don't check for 'head' and 'which' programs which
	are not required.

	maint: Post-release administrivia
	* NEWS: Add header line for next release.
	* .prev-version: Record previous version.

	version 1.1
	* NEWS: Record release date.

2018-03-18  Mathieu Lirzin  <mthl@gnu.org>

	maint: Add ".prev-version"
	This file is used by the "build-aux/do-release-commit-and-tag" script.

	* .prev-version: New file

2018-03-18  Mathieu Lirzin  <mthl@gnu.org>

	maint: Include maintainer scripts from Gnulib
	* build-aux/announce-gen: New script.
	* build-aux/do-release-commit-and-tag: Likewise.
	* build-aux/gnu-web-doc-update: Likewise.
	* build-aux/gnupload: Likewise.

2018-03-17  Mathieu Lirzin  <mthl@gnu.org>

	build: Programs are not implicitly depending on libraries
	Before that change, it was possible for 'make' to try linking programs
	before 'src/libmcron.a' was built.

	* Makefile.am (bin_mcron_DEPENDENCIES, bin_cron_DEPENDENCIES)
	(bin_crontab_DEPENDENCIES): Add '$(noinst_LIBRARIES)'.

2018-03-16  Mathieu Lirzin  <mthl@gnu.org>

	tests: Add 'schedule.sh'
	* tests/schedule.sh: New test.
	* Makefile.am (TESTS): Add it.
	* src/mcron/job-specifier.scm (configuration-time): Use
	SOURCE_DATE_EPOCH for reproducible tests.

2018-03-16  Mathieu Lirzin  <mthl@gnu.org>

	base: Add 'display-schedule' procedure
	This procedure is a more generic and less coupled version of
	'get-schedule' which has been kept for backward compatibility and
	deprecated.

	* src/mcron/base.scm (display-schedule): New procedure.
	(get-schedule): Move to ...
	* src/mcron/core.scm: ... here.
	* src/mcron/scripts/cron.scm (main): Use 'display-schedule'.
	* src/mcron/scripts/mcron.scm (main): Likewise.
	* doc/mcron.texi (The base module): Document it.

2018-03-16  Mathieu Lirzin  <mthl@gnu.org>

	crontab: Extract procedures from 'main'
	* src/mcron/scripts/crontab.scm (in-access-file?)
	(hit-server): New procedures.

2017-09-29  Mathieu Lirzin  <mthl@gnu.org>

	maint: Remove old mailing-lists from README
	* README: Remove non-existing mailing-lists.

	maint: Replace "README--git" with "HACKING"
	* README--git: Delete.
	* HACKING: New file documenting how to contribute to Mcron.
	* Makefile.am (EXTRA_DIST): Distribute it.

	maint: Add Ludovic Courtès to the authors
	* AUTHORS: Add Ludovic Courtès.

	maint: Update NEWS
	* NEWS: Update with changes made since last release.

2017-09-28  Mathieu Lirzin  <mthl@gnu.org>

	maint: Rewrite old NEWS
	* NEWS: Follow the format used by GNU Coreutils.

	tests: Add 'basic.sh'
	* tests/init.sh: New test framework from Gnulib.
	* tests/basic.sh: New test.
	* Makefile.am (TESTS): Add it.
	(TEST_EXTENSIONS): Add '.sh'.
	(SH_LOG_COMPILER): Use 'pre-inst-env'.
	(EXTRA_DIST): Add 'tests/init.sh'.
	* build-aux/pre-inst-env.in: export $srcdir for shell tests.

	doc: Use 'unless' form
	* doc/mcron.texi (Invoking cron or crond): Use 'unless' form and put
	"/etc/crontab" inside a @code command.

	utils: Add 'assq_symbol_set_x' function
	* src/utils.c (assq_symbol_set_x): New function.
	* src/mcron.c (parse_opt): Use it.

2017-09-28  Mathieu Lirzin  <mthl@gnu.org>

	mcron: Handle command line arguments in C with argp
	'argp' is a convenient and maintainable way to parse command line arguments.
	Guile doesn't offer an equivalent of this, so the command line handling has
	been moved to C.

	* src/mcron.c (parse_args, parse_opt): New functions.
	(inner_main): Call 'parse_args'.
	* src/mcron/scripts/mcron.scm (show-help, %options): Delete.
	(main): Remove command line handling.

2017-09-28  Mathieu Lirzin  <mthl@gnu.org>

	Replace generic C wrapper with individual programs
	* src/wrapper.c: Delete.
	* src/crontab.c: New file.
	* src/mcron.c: Likewise.
	* src/cron.c: Likewise.
	* configure.ac: Adapt 'AC_CONFIG_DIR' to use "src/mcron.c".
	* Makefile.am (bin_crontab_SOURCES, bin_cron_SOURCES)
	(bin_mcron_SOURCES): Use new files.
	(bin_cron_CPPFLAGS, bin_mcron_CPPFLAGS, bin_crontab_CPPFLAGS): Delete.

	wrapper: Move 'wrap_env_path' to a new 'utils' module.
	* src/wrapper.c: Move 'wrap_env_path' to ...
	* src/utils.h: ... here.  New module.
	* src/utils.c: New file.
	* configure.ac: Use AC_PROG_RANLIB and AM_PROG_AR.
	* Makefile.am (noinst_LIBRARIES, src_libmcron_a_SOURCES): New variables.
	(LDADD): Add 'src/libmcron.a'.

2017-09-28  Mathieu Lirzin  <mthl@gnu.org>

	build: Remove "--enable-debug" configure option
	Unlike C code where debugging impose the "-g" compilation flags.  This
	debugging option only affects Guile code, so using an environment variable
	works better since it doesn't impose to recompile Mcron or to edit
	"config.scm".

	* configure.ac: Remove "--enable-debug" configure option.
	* src/mcron/config.scm.in (config-debug): Use MCRON_DEBUG environment variable
	to trigger the debug mode at runtime.

2017-09-28  Mathieu Lirzin  <mthl@gnu.org>

	build: Remove "maintainer-mode" configure option.
	* configure.ac: Remove "maintainer-mode" configure option.

	build: Replace "--enable-no-vixie-clobber" with "--disable-multi-user".
	* configure.ac: Define "--disable-multi-user" option instead of
	"--enable-no-vixie-clobber".
	* Makefile.am (install-exec-hook) [MULTI_USER]: Only set crontab setuid bit.
	(bin_PROGRAMS): Keep only 'mcron' by default.
	(bin_PROGRAMS) [MULTI_USER]: Add 'crontab'
	(sbin_PROGRAMS) [MULTI_USER]: Add 'cron'.
	(noinst_PROGRAMS) [!MULTI_USER]: Add 'cron' and 'crontab'.
	(dist_man_MANS): Move 'crontab.1' and 'cron.8' ...
	(extra_mans): here.  New variable.
	(dist_man_MANS) [MULTI_USER]: Add it.
	(all-local) [!MULTI_USER]: New target.  Depend on it.
	(EXTRA_DIST) [!MULTI_USER]: Distribute it.
	(MAINTAINERCLEANFILES): Clean it.

	build: Separate "Makefile.am" into more sections.
	* Makefile.am: Add "Installation", "Distribution", "Test suite",
	"Programs", and "Guile modules" sections.

	build: Add 'bootstrap' script.
	* bootstrap: New file.
	* Makefile.am (EXTRA_DIST): Add it.

	Add (mcron core) module.
	This module is an alias for (mcron base) module.  This modules is added to
	keep backward compatibility with Mcron 1.x.

	base: Add 'run-job' procedure.
	* src/mcron/base.scm (run-jobs): Delete.
	(run-job): New procedure.
	(run-job-loop): Use it.

	job-specifier: Remove dependency on SRFI-26.
	* src/mcron/job-specifier.scm (range): Use plain lambda instead of 'cut' and
	'cute'.

	build: Install '.go' files under LIBDIR.
	* Makefile.am (compiled_modules): New variable.
	(bin_mcron_DEPENDENCIES, bin_cron_DEPENDENCIES)
	(bin_crontab_DEPENDENCIES): Use it.
	(guilesitegodir, pkgmodulegodir, pkgmodulego_DATA)
	(pkgscriptgodir, pkgscriptgo_DATA): New variables
	(pkgmodule_DATA): Remove compiled modules.
	(pkgscript_DATA): Delete.
	(DISTCLEANFILES, CLEANFILES): Update.

	build: Don't generate '.version' file.
	* Makefile.am (.version): Remove target which has no use.
	(EXTRA_DIST): Adapt.
	(BUILT_SOURCES): Delete.
	* .gitignore: Update.

	build: Rename variables for Guile install directories.
	* configure.ac (moduledir, mcronmoduledir): Rename to ...
	* Makefile.am (guilesitedir, pkgmoduledir): ... these.
	(dist_mcronmodule_DATA, mcronmodule_DATA, mcronscriptdir)
	(dist_mcronscript_DATA, mcronscript_DATA): Rename to ...
	(dist_pkgmodule_DATA, pkgmodule_DATA, pkgscriptdir, dist_pkgscript_DATA)
	(pkgscript_DATA): ... these.
	(modules): Adapt.

	build: Support Guile 2.2.
	* configure.ac: Use 'GUILE_PKG' and 'GUILE_PROGS'.  Remove explicit Guile
	version check and check for 'guild'.  Honor $GUILE_EFFECTIVE_VERSION in
	'moduledir'.

2017-09-27  Mathieu Lirzin  <mthl@gnu.org>

	build: Define PACKAGE_LOAD_COMPILED_PATH macro.
	* Makefile.am (AM_CPPFLAGS): Define PACKAGE_LOAD_COMPILED_PATH macro.
	* src/wrapper.c (main): Use it.

	wrapper: Avoid 'scm_c_eval_string' usage.
	* src/wrapper.c (wrap_env_path): New function.
	(main): Use it.
	(inner_main): Let 'wrap_env_path' set the environment variables.
	Don't use 'scm_c_eval_string' when calling 'main' procedure.
	* Makefile.am (AM_CPPFLAGS): Define _GNU_SOURCE for 'asprintf'.

	Merge branch 'devel'

	Revert "Add missing 'makefile.am'."
	This reverts commit 2039060a1de3cca3aa3e9a1035ce08b430ff5ea6.

	Revert "Fix build of the manual."
	This reverts commit e6a94adeb3384cb883f49ec5a4cc589df6b40d10.

	Revert "Remove derived doc/mcron.1 with maintainer-clean."
	This reverts commit eca341bd824c5cfe39fb0001014e5b86933719d9.

	Revert "Fix package name and bug reports email address."
	This reverts commit df4fa60a031e30eff00c2fa06b0ea23d4e50b057.

	Revert "Have a new directory to get rid of with maintainer-clean."
	This reverts commit 024027ae2dcc425f7a3bf5bf3ff3671833b02ce6.

	Revert "Taken on board suggestions of Mathieu Lirzin as per e-mails to the bug-mcron@gnu.org mailing list around September 2015."
	This reverts commit c0a6eb14c257a47e9573631e5ac09e6528fba377.

2016-12-28  Mathieu Lirzin  <mthl@gnu.org>

	build: Use portable substitution references.
	* Makefile.am (bin_mcron_DEPENDENCIES, bin_cron_DEPENDENCIES)
	(bin_crontab_DEPENDENCIES, mcronmodule_DATA, mcronscript_DATA)
	(CLEANFILES): Use portable substitution references.

	build: Add "build-aux/guix.scm".
	* build-aux/guix.scm: New file.
	* Makefile.am (EXTRA_DIST): Add it.

	build: Move executable to "bin" directory.
	* Makefile.am (bin_PROGRAMS, sbin_PROGRAMS): Prepend "bin/" to every program.
	(mcron_SOURCES, mcron_CPPFLAGS, mcron_DEPENDENCIES): Rename to ...
	(bin_mcron_SOURCES, bin_mcron_CPPFLAGS, bin_mcron_DEPENDENCIES): ... this.
	(cron_SOURCES, cron_CPPFLAGS, cron_DEPENDENCIES): Rename to ...
	(bin_cron_SOURCES, bin_cron_CPPFLAGS, bin_cron_DEPENDENCIES): ... this.
	(crontab_SOURCES, crontab_CPPFLAGS, crontab_DEPENDENCIES): Rename to ...
	(bin_crontab_SOURCES, bin_crontab_CPPFLAGS, bin_crontab_DEPENDENCIES):
	($(srcdir)/doc/cron.8, $(srcdir)/doc/crontab.1, $(srcdir)/doc/mcron.1): Update
	prerequisite.
	* build-aux/pre-inst-env.in (PATH): Use "bin" directory.
	* .gitignore: Update.

	maint: Generate version number.
	* build-aux/git-version-gen: New script.
	* configure.ac (AC_INIT): Use it.
	(AC_REQUIRE_AUX_FILE): Distribute it.
	* Makefile.am (.version): New target.
	(BUILT_SOURCES, EXTRA_DIST): Add it.
	(dist-hook): Generate ".tarball-version".
	* .gitignore: Update.

	base: find-next-jobs: Use functional style.
	* src/mcron/base.scm (find-next-jobs): Rewrite it using functional
	style.  Add docstring.

	vixie-specification: Do not use 'and-let*'.
	* src/mcron/vixie-specification.scm (parse-vixie-environment): Use
	'and=>' instead of 'and-let*'

	all: Gather module imports.
	* src/mcron/base.scm: Gather module imports.
	* src/mcron/redirect.scm: Likewise.
	* src/mcron/vixie-specification.scm: Likewise.
	* src/mcron/vixie-time.scm: Likewise.

	utils: Remove unneeded 'stdin->string' procedure.
	* src/mcron/utils.scm: Re-export 'read-string'.
	(stdin->string): Delete.
	* src/mcron/scripts/crontab.scm (main): Use 'read-string' instead.
	* src/mcron/scripts/mcron.scm (process-user-file): Likewise.

	utils: for-each-file: Use named let.
	* src/mcron/utils.scm (for-each-file): Use named 'let' instead of 'do'.

	build: Rename (mcron main) to (mcron utils).
	* src/mcron/main.scm: Rename to ...
	* src/mcron/utils.scm: ... this.
	* src/mcron/scripts/cron.scm: Adapt.
	* src/mcron/scripts/crontab.scm: Likewise.
	* src/mcron/scripts/mcron.scm: Likewise.
	* Makefile.am (dist_mcronmodule_DATA): Likewise.

	maint: Delete BUGS.
	* BUGS: Delete.
	* Makefile.am (EXTRA_DIST): Adapt.
	* README: Likewise.

	maint: Update AUTHORS.
	* AUTHORS: Add 'Sergey Poznyakoff' and 'Mathieu Lirzin'.

	maint: Reformat copyright notices and copying permission statements.

	build: Rename 'mcron.c' to 'wrapper.c'.
	* src/mcron.c: Rename to ...
	* src/wrapper.c: ... this.
	* Makefile.am (mcron_SOURCES, cron_SOURCES, crontab_SOURCES): Adapt to it.
	* configure.ac (AC_CONFIG_SRCDIR): Likewise.

	base: Rewrite 'run-job-loop'.
	* src/mcron/base.scm (run-job-loop): Use #:optional keyword argument, and
	'match'.

	job-specifier: Use #:optional keyword argument.
	* src/mcron/job-specifier.scm (next-year, next-year-from, next-month)
	(next-month-from, next-day, next-day-from, next-hour, next-hour-from)
	(next-minute, next-minute-from, next-second, next-second-from): Use #:optional
	keyword argument.
	(maybe-args): Remove unneeded procedure.

	job-specifier: Add %current-action-time parameter object.
	* src/mcron/job-specifier.scm (current-action-time): Rename to ...
	(%current-action-time): ... this.  Make it a parameter object.
	(job, maybe-args): Adapt.

	job-specifier: Rewrite 'bump-time'.
	* src/mcron/job-specifier.scm (bump-time): Use 'match'.

2016-12-01  Mathieu Lirzin  <mthl@gnu.org>

	job-specifier: Use 'inf' thunk.
	* src/mcron/job-specifier.scm (%find-best-next): Call 'inf' thunk
	instead of defining an arbitrary high integer.
	(bump-time): Adapt to it.

2016-12-01  Mathieu Lirzin  <mthl@gnu.org>

	build: Define PACKAGE_LOAD_PATH in Makefile.
	Previously PACKAGE_LOAD_PATH was set in config header which wasn't correctly
	expanded due to the presence of ${prefix} in ${moduledir}.  Let 'make' handle
	the expansion.

	* Makefile.am (AM_CPPFLAGS): New variable.
	(cron_CPPFLAGS, crontab_CPPFLAGS, mcron_CPPFLAGS): Use it.
	* configure.ac (PACKAGE_LOAD_PATH): Undefine it.
	(AC_CONFIG_HEADER): Remove macro.
	* src/mcron.c: Adapt to it.

2016-12-01  Mathieu Lirzin  <mthl@gnu.org>

	build: Silence 'guild compile' output.
	* Makefile.am (devnull_verbose, devnull_verbose_, devnull_verbose_0):
	New variables
	(.scm.go): Use $(devnull_verbose).

	build: Use Automake warnings.
	* configure.ac (AM_INIT_AUTOMAKE): Add more warnings.
	* Makefile.am (AM_V_GUILEC, AM_V_GUILEC_, AM_V_GUILEC_0): Rename to ...
	(guilec_verbose, guilec_verbose_, guilec_verbose_0): ... these.  Make them
	more portable.  This follows an example from Automake manual.

	doc: Generate a man page for every program.
	* Makefile.am (dist_man_MANS): Add 'cron' and 'crontab' man page.
	Generate man pages in $(srcdir).
	(MAINTAINERCLEANFILES, gen_man): New variables.
	(AM_V_HELP2MAN, AM_V_HELP2MAN_, AM_V_HELP2MAN_0): Delete unneeded variables.
	($(srcdir)/doc/crontab.1, $(srcdir)/doc/cron.8): New targets.
	(doc/mcron.1): Rename to ...
	($(srcdir)/doc/mcron.1)): ... this.

	environment: modify-environment: Add tests.
	* tests/environment.scm: New test.
	* Makefile.am (TESTS): Add it.

	job-specifier: range: Add tests.
	* build-aux/test-driver.scm: New script.
	* configure.ac (AC_REQUIRE_AUX_FILE): Add it.
	* tests/job-specifier.scm: New test.
	* Makefile.am (TEST_EXTENSIONS, AM_TESTS_ENVIRONMENT, SCM_LOG_DRIVER)
	(TESTS): New variables.
	(EXTRA_DIST): Update.
	* .gitignore: Likewise.

	build: Fix prerequisite for mcron man page.
	* Makefile.am (doc/mcron.1): Depend on the Guile script instead of the C
	wrapper.

2016-12-01  Mathieu Lirzin  <mthl@gnu.org>

	all: Separate programs in different executables.
	This improves readability and complies with the GNU Coding Standards by
	making the behavior of the programs independent of the name used to
	invoke them.

	* src/mcron/scripts/cron.scm: New file.
	* src/mcron/scripts/crontab.scm: Likewise.
	* src/mcron/scripts/mcron.scm: Likewise.
	* Makefile.am (dist_mcronmodule_DATA): Remove 'src/mcron/crontab.scm'.
	(bin_PROGRAMS): Add 'crontab'.
	(sbin_PROGRAMS): Add 'cron'.
	(mcron_CFLAGS, mcron_LDADD): Rename to ...
	(AM_CFLAGS, LDADD): ... these.
	(cron_SOURCES, cron_CPPFLAGS, cron_DEPENDENCIES)
	(crontab_SOURCES, crontab_CPPFLAGS, crontab_DEPENDENCIES)
	(mcron_CPPFLAGS, mcronscriptdir, dist_mcronscript_DATA): New variables.
	(modules): Redefine it in terms of other '_DATA' variables.
	* src/mcron/crontab.scm: Remove file.
	* src/mcron/main.scm (parse-args): New procedure.
	(command-name, command-type, options): Remove.
	(show-version): Adapt.
	(show-help, process-files-in-system-directory, cron-file-descriptors)
	(main, process-user-file, process-files-in-user-directory): Move
	procedures in the new files.
	* src/mcron.c (inner_main): Define the current module at compile time.
	* TODO: Update.
	* .gitignore: Likewise.

2016-11-14  Mathieu Lirzin  <mthl@gnu.org>

	build: Install 'config.scm' file.
	* Makefile.am (mcronmodule_DATA): Add 'src/mcron/config.scm'.
	(CLEANFILES): Don't clean it.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	job-specifier: job: Add #:user keyword argument.
	* src/mcron/job-specifier.scm (job): Add #:user keyword argument.
	* doc/mcron.texi (Job specification): Document it.

2016-05-07  Ludovic Courtès  <ludo@gnu.org>

	base: run-jobs: Ensure that the child process always terminates.
	* src/mcron/base.scm (run-jobs): Use 'dynamic-wind' instead of 'begin'.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	build: Use lowercase names for local variables.
	This helps distinguish variable names with a special Automake semantic.

	* Makefile.am (MODULES): Rename to ...
	(modules): ... this.
	(mcronmodule_DATA, dist_mcronmodule_DATA): Adapt to it.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	build: Remove GOBJECTS and GEN_MODULES variables.
	* Makefile.am (GOBJECTS, GEN_MODULES): Remove variables.
	(mcronmodule_DATA, DISTCLEANFILES): Inline their contents.
	(mcron_DEPENDENCIES, CLEANFILES): Use 'mcronmodule_DATA'.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	base: Rename (mcron core) module to (mcron base).
	The 'configure' script deletes the 'core.*' files.  Having a file named
	'base.scm' instead of 'core.scm' simplifies the build process without
	changing the semantics.

	* src/mcron/mcron-core.scm: Rename to ...
	* src/mcron/base.scm: ... this.
	All module users changed.
	* Makefile.am (MODULES): Add 'src/mcron/base.scm'.
	(CP): Remove variable.
	(src/mcron/core.scm): Remove target.
	(GEN_MODULES): Remove 'src/mcron/core.scm'.
	(dist_mcronmodule_DATA): Remove 'src/mcron/mcron-core.scm'
	* doc/mcron.texi: Adapt to name change.
	* .gitignore: Update.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	build: Use AC_CONFIG_SRCDIR safety check.
	* configure.ac (AC_CONFIG_SCRDIR): Set it to 'src/mcron.c'.

	all: Rename 'scm' directory to 'src'.
	* scm/mcron/config.scm.in: Rename to ...
	* src/mcron/config.scm.in: ... this.
	* scm/mcron/crontab.scm: Rename to ...
	* src/mcron/crontab.scm: ... this.
	* scm/mcron/environment.scm: Rename to ...
	* src/mcron/environment.scm: ... this.
	* scm/mcron/job-specifier.scm: Rename to ...
	* src/mcron/job-specifier.scm: ... this.
	* scm/mcron/main.scm: Rename to ...
	* src/mcron/main.scm: ... this.
	* scm/mcron/mcron-core.scm: Rename to ...
	* src/mcron/mcron-core.scm: ... this.
	* scm/mcron/redirect.scm: Rename to ...
	* src/mcron/redirect.scm: ... this.
	* scm/mcron/vixie-specification.scm: Rename to ...
	* src/mcron/vixie-specification.scm: ... this.
	* scm/mcron/vixie-time.scm: Rename to ...
	* src/mcron/vixie-time.scm: ... this.
	* mcron.c: Rename to ...
	* src/mcron.c: ... this.
	* Makefile.am: Adapt to them.
	* build-aux/pre-inst-env.in: Likewise.
	* configure.ac (AC_CONFIG_FILES): Likewise.
	(AC_CONFIG_HEADER): Set to 'src/config.h'.
	* .gitignore: Update.

	build: Do not auto-compile 'guild'.
	* Makefile.am (.scm.go): Set GUILE_AUTO_COMPILE to 0.

	job-specifier: Add '%find-best-next' procedure.
	* scm/mcron/job-specifier.scm (find-best-next): Rename to ...
	(%find-best-next): ... this.  Rewrite it using a functional style.
	All callers changed.

	job-specifier: Rewrite 'range' procedure.
	* scm/mcron/job-specifier.scm (range): Use 'unfold'.

	build: Fix 'distcheck' target failures.
	* Makefile.am (TEXI2DVI, DISTCLEANFILES, doc_mcron_TEXINFOS)
	(nodist_doc_mcron_TEXINFOS): New variables.  This fixes the build of the
	dvi/pdf documentation.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	build: Support VPATH builds.
	This allows using 'mcron' before it is installed without hardcoding the
	local build environment in the executable.

	* build-aux/pre-inst-env.in: New script.
	* configure.ac (AC_CONFIG_FILES): Create it.
	(AC_CONFIG_HEADER): Add 'config.h'.
	(moduledir): New variable.
	(PACKAGE_LOAD_PATH): new C preprocessor macro.
	* mcron.c: Include "config.h".
	(main): Don't overwrite Guile load paths.
	(inner_main): Prepend Mcron modules load paths.
	* Makefile.am (.scm.go, doc/mcron.1): Use 'pre-inst-env'.
	(mcron_CFLAGS): Remove GUILE_LOAD_PATH macro.
	(noinst_SCRIPTS): New variable.
	* .gitignore: Update.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	build: Use a non-recursive makefile.
	* configure.ac (AM_INIT_AUTOMAKE): Use 'subdir-objects' option.
	(AC_CONFIG_FILES): Remove 'scm/mcron/makefile' and 'makefile'.  Add
	'Makefile'.
	* makefile.am: Delete file.  Move its content into ...
	* scm/mcron/makefile.am: Likewise.
	* Makefile.am: ... this.  New file.
	* .gitignore: Update.

	core: Use SRFI-9 records for the job data structure.
	* scm/mcron/mcron-core.scm <job>: New record type.  This Replaces a
	vector data structure.  All consumers changed.

	main: Remove 'valid-user' procedure.
	* scm/mcron/main.scm (valid-user): Delete procedure.
	(process-files-in-system-directory): Adjust accordingly by using a local
	definition.

	main: Add 'for-each-file' procedure.
	* scm/mcron/main.scm (for-each-file): New procedure.
	(process-files-in-user-directory, process-files-in-system-directory):
	Use it.

	all: Add a custom indentation rule for 'mcron-error'.
	* .dir-locals.el: Define a custom indentation rule for 'mcron-error'.
	* scm/mcron/crontab.scm: Use it.
	* scm/mcron/job-specifier.scm: Likewise.
	* scm/mcron/main.scm: Likewise.
	* scm/mcron/vixie-specification.scm: Likewise.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	maint: Define directory-local variables for Emacs.
	This configures Emacs automatically.

	* .dir-locals.el: New file.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	environment: Redefine 'modify-environment'.
	* scm/mcron/environment.scm (modify-environment): Add docstring.
	Compute 'passwd:dir' and 'passwd:name' only once.
	(impose-default-environment): Merge it into 'modify-environment'.

	main: Remove unused 'regular-file?' procedure.
	* scm/mcron/main.scm (regular-file?): Delete procedure.

	main: Improve 'process-user-file' definition.
	* scm/mcron/main.scm (process-user-file): Rename parameters 'file-path'
	to 'file-name' and 'assume-guile' to 'guile-syntax?'.  Capture
	'guile-regexp' and 'vixie-regexp' bindings in the procedure scope.
	(guile-file-regexp, vixie-file-regexp): Delete variables.

	mcron: Mark local functions as static.
	* mcron.c (inner_main, react_to_terminal_signal, set_cron_signals):
	Declare static.

	mcron: Rework comments.
	* mcron.c: Rework comments.

	mcron: Use symbolic constants.
	* mcron.c (main, react_to_terminal_signal): Use EXIT_SUCCESS and
	EXIT_FAILURE macros instead of magic numbers.

	mcron: Add forward declarations.
	* mcron.c: Reorder function definitions sequentially.

	redirect: Use module (ice-9 regex).
	* scm/mcron/redirect.scm: Use module (ice-9 regex) to prevent variables
	'match:prefix', 'match:substring', and 'match:prefix' to be unbound.

	main: Remove obsolete Guile debug option.
	* scm/mcron/main.scm (main): Remove obsolete invocation of
	'debug-enable'.

	build: Enable silent rules by default.
	* configure.ac (AM_SILENT_RULES): Use macro.
	* makefile.am (doc/mcron.1): Use $(AM_V_HELP2MAN).
	(AM_V_HELP2MAN, AM_V_HELP2MAN_, AM_V_HELP2MAN_): New variables.
	* scm/mcron/makefile.am (.scm.go): Use $(AM_V_GUILEC).
	(AM_V_GUILEC, AM_V_GUILEC_, AM_V_GUILEC_): New variables.

	build: Compile and install '.go' files.
	* configure.ac: Set and substitute 'mcronmoduledir'.  Check for 'guild'
	which requires Guile >= 2.0.7.  Use 'AC_CANONICAL_HOST'.
	* scm/mcron/makefile.am (.scm.go): New target.
	(MODULES, GEN_MODULES, GOBJECTS, CLEANFILES, SUFFIXES)
	(dist_mcronmodule_DATA, mcronmodule_DATA): New variables.
	(pkgdata_DATA, EXTRA_DIST): Remove variables.
	* .gitignore: Adjust accordingly.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	main: Add (mcron main) module.
	Remove 'ed' hack to eval content of scm/mcron/main.scm in the C wrapper.
	Use proper libguile functions instead.

	* scm/mcron/main.scm (mcron main): New module.
	(show-version, show-package-information, show-help, main): Remove
	extra newline characters in strings.
	* mcron.c.template: Rename to ...
	* mcron.c: ... this.
	(inner_main): Set current module to (mcron main).
	* makefile.ed: Delete file.
	* configure.ac: Remove check for 'ed'.
	* makefile.am: Adjust accordingly.
	* .gitignore: Likewise.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	main: Add 'main' procedure.
	* scm/mcron/main.scm (main): New Thunk.  Move remaining top-level
	code to it.

	main: Add 'cron-file-descriptors' procedure.
	* scm/mcron/main.scm (fd-list): Delete variable.
	(cron-file-descriptors): New procedure.  Return a list instead of
	mutating 'fd-list'.
	(process-update-request): Add 'fdes-list' parameter.  Adapt caller by
	using 'cron-file-descriptors' as an effective parameter.

	main: Add docstrings.
	* scm/mcron/main.scm (delete-run-file, mcron-error)
	(process-files-in-system-directory, process-files-in-user-directory)
	(process-update-request, process-user-file, regular-file?)
	(stdin->string, valid-user): Turn comments into docstrings.
	(command-type, options): Move comments inside the definitions.

	main: Make 'catch-mcron-error' macro hygienic.
	* scm/mcron/main.scm (catch-mcron-error): Use 'define-syntax-rule'
	instead of 'defmacro'.

	main: Turn 'command-name' into a thunk.
	* scm/mcron/main.scm (command-name): Turn into a thunk.
	All callers changed.

	main: Use 'when' and 'unless' special forms.
	* scm/mcron/main.scm: Use 'when' and 'unless' special forms.

	main: Import the modules all together.
	* scm/mcron/main.scm: Gather module imports.

	build: Generate 'ChangeLog' upon 'make dist'.
	* ChangeLog: Rename to ...
	* ChangeLog.old: ... this.
	* ChangeLog: New file.
	* Makefile.am (gen_start_date): New variable.
	(gen-ChangeLog, dist-hook): New targets.
	(EXTRA_DIST): Add 'ChangeLog.old'.
	* build-aux/gitlog-to-changelog: New file, from Gnulib.

	build: Remove MAINTAINERCLEANFILES variable.
	* makefile.am (MAINTAINERCLEANFILES): Delete unneeded variable.  Using
	'git clean -xdf' is more reliable than 'make maintainer-clean'

	maint: Augment TODO.
	* TODO <Maybe in the near future>: Add items.

	main: Add 'show-help' procedure.
	* scm/mcron/main.scm (show-help): New procedure.

	main: Add 'show-package-information' procedure.
	* scm/mcron/main.scm (show-package-information): New procedure.

	main: Add 'show-version' procedure.
	* scm/mcron/main.scm (show-version): New procedure.

	build: Add package variables.
	* scm/mcron/config.scm.in (config-package-name)
	(configure-package-version, configure-package-url): New variables.

2016-05-07  Mathieu Lirzin  <mthl@openmailbox.org>

	doc: Include a copy of the GNU FDL.
	* doc/fdl.texi: New file.
	* doc/mcron.texi: Include it.
	* makefile.am (doc_mcron_TEXINFOS): New variable.

2016-05-07  Mathieu Lirzin  <mthl@gnu.org>

	maint: Fix package name and bug reports email address.
	* configure.ac (AC_INIT): Fix package name and bug reports email
	address.

	maint: Use 'build-aux' directory for auxiliary build tools.
	* configure.ac (AC_CONFIG_AUX_DIR): Set it to 'build-aux'.
	* .gitignore: Adapt to it.

	build: Fix build of the manual.
	* mcron.texinfo.in: Rename to ...
	* doc/mcron.texi: ... this.
	* doc/config.texi.in: New file.
	* configure.ac: Adapt to it.
	* makefile.am: Likewise.
	* .gitignore: Likewise.
	* README--git: Likewise.

2016-05-04  Mathieu Lirzin  <mthl@gnu.org>

	build: Add missing 'makefile.am'.
	* scm/mcron/makefile.am: New file.
	* .gitignore: Ignore 'mcron' only in the top-level directory.

2015-10-22  Dale Mellor  <dale@rdmp.org>

	Taken on board suggestions of Mathieu Lirzin as per e-mails to the bug-mcron@gnu.org mailing list around September 2015.

2015-07-06  Dale Mellor  <dale@rdmp.org>

	Have a new directory to get rid of with maintainer-clean.

2015-07-06  Mathieu Lirzin  <mthl@openmailbox.org>

	Fix package name and bug reports email address.
	Conflicts:
		ChangeLog
		configure.ac

2015-07-05  Dale Mellor  <dale@rdmp.org>

	Remove derived doc/mcron.1 with maintainer-clean.

2015-07-04  Mathieu Lirzin  <mthl@openmailbox.org>

	Fix build of the manual.

	Add missing 'makefile.am'.
