Commit graph

185 commits

Author SHA1 Message Date
Mathieu Lirzin
e66f0dcdd6
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 01:46:44 +02:00
Mathieu Lirzin
6c4f93371c
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-26 01:44:22 +02:00
Mathieu Lirzin
9ce38228e8
maint: Document how to get code coverage reports
* HACKING <Code coverage>: New section.
2018-03-25 07:44:01 +02:00
Mathieu Lirzin
5023a8c7ca
maint: Update files from upstream with "build-aux/gnu-fetch"
* build-aux/test-driver.scm: Update.
2018-03-25 07:40:28 +02:00
Mathieu Lirzin
c20e4cc0aa
utils: It's 2018!
* src/mcron/utils.scm (show-version): Update copyright.
2018-03-25 03:09:29 +02:00
Mathieu Lirzin
4d636af876
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.
2018-03-25 03:01:45 +02:00
Mathieu Lirzin
5af999fb20
tests: Add "tests/utils.scm"
* tests/utils.scm: New test.
* Makefile.am (TESTS): Add it.
2018-03-25 00:38:26 +01:00
Mathieu Lirzin
2169f4a7b3
maint: Update files from upstream with "build-aux/gnu-fetch"
* build-aux/gitlog-to-changelog: Update.
* build-aux/test-driver.scm: Likewise.
2018-03-24 23:40:58 +01:00
Mathieu Lirzin
a8511ce35d
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.
2018-03-24 22:06:44 +01:00
Mathieu Lirzin
0159423d15
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.
2018-03-24 21:13:51 +01:00
Mathieu Lirzin
b8cbf635cc
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.
2018-03-24 20:32:13 +01:00
Mathieu Lirzin
e013e2a6d6
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.
2018-03-24 20:29:02 +01:00
Mathieu Lirzin
d1e0d2a8f7
base: Check 'run-job'
* tests/base.scm ("run-job: basic"): New test.
2018-03-24 15:32:56 +01:00
Mathieu Lirzin
526ce502e5
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.
2018-03-24 14:03:54 +01:00
Mathieu Lirzin
d63db1ce4e
base: Rewrite 'child-cleanup'
* src/mcron/base.scm (child-cleanup): Use recursion instead of 'do'.
2018-03-24 01:58:42 +01:00
Mathieu Lirzin
a1f9e3d7a7
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.
2018-03-24 01:33:22 +01:00
Mathieu Lirzin
07017255a1
base: Rewrite 'find-next-jobs' docstring.
* src/mcron/base.scm (find-next-jobs): Don't explain the detail of
implementation in the docstring.
2018-03-24 01:18:21 +01:00
Mathieu Lirzin
6583e83d16
tests: Add "tests/base.scm"
* tests/base.scm: New test.
* Makefile.am (TESTS): Add it.
2018-03-24 01:18:21 +01:00
Mathieu Lirzin
ac39c00859
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-24 01:18:15 +01:00
Mathieu Lirzin
cae2270fd7
build: Check non-standard C functions at configure time
* configure.ac: Check 'argp_parse' and 'asprintf' presence.
2018-03-23 22:13:43 +01:00
Mathieu Lirzin
426f5d7b38
job-specifier: Use 'simple-format'
* src/mcron/job-specifier.scm (job): Use 'simple-format' instead of
'with-output-to-string'.
2018-03-23 20:55:42 +01:00
Mathieu Lirzin
fe9592fd28
maint: Update copyright years 2018-03-20 19:27:59 +01:00
Mathieu Lirzin
f908c5395c
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 19:27:10 +01:00
Mathieu Lirzin
09e452b62a
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 19:25:28 +01:00
Mathieu Lirzin
44f4fab641
maint: Update NEWS
* NEWS: Announce the availability of 'make installcheck'.
2018-03-20 02:28:10 +01:00
Mathieu Lirzin
64ff2b1ddf
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 02:18:05 +01:00
Mathieu Lirzin
624ceb4480
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 02:17:11 +01:00
Mathieu Lirzin
dd9d6a6b06
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-20 00:11:28 +01:00
Mathieu Lirzin
22ba12d1aa
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 23:08:46 +01:00
Mathieu Lirzin
98eaa3fb9c
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.
2018-03-19 22:37:54 +01:00
Mathieu Lirzin
bb8414e00d
maint: Post-release administrivia
* NEWS: Add header line for next release.
* .prev-version: Record previous version.
2018-03-19 00:37:25 +01:00
Mathieu Lirzin
2961ae8033
version 1.1
* NEWS: Record release date.
2018-03-19 00:19:13 +01:00
Mathieu Lirzin
28624af154
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 22:05:15 +01:00
Mathieu Lirzin
b7640b81ed
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-18 21:58:41 +01:00
Mathieu Lirzin
d1fdb14a8a
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-17 16:37:42 +01:00
Mathieu Lirzin
2b9b54b729
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 21:41:52 +01:00
Mathieu Lirzin
5f83aef90f
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 21:41:14 +01:00
Mathieu Lirzin
b80020ef78
crontab: Extract procedures from 'main'
* src/mcron/scripts/crontab.scm (in-access-file?)
(hit-server): New procedures.
2018-03-16 21:41:06 +01:00
Mathieu Lirzin
266bcf8405
maint: Remove old mailing-lists from README
* README: Remove non-existing mailing-lists.
2017-09-29 18:01:01 +02:00
Mathieu Lirzin
319a1dbe4e
maint: Replace "README--git" with "HACKING"
* README--git: Delete.
* HACKING: New file documenting how to contribute to Mcron.
* Makefile.am (EXTRA_DIST): Distribute it.
2017-09-29 17:53:37 +02:00
Mathieu Lirzin
dc5a7a500e
maint: Add Ludovic Courtès to the authors
* AUTHORS: Add Ludovic Courtès.
2017-09-29 17:50:45 +02:00
Mathieu Lirzin
a0b896c9d5
maint: Update NEWS
* NEWS: Update with changes made since last release.
2017-09-29 17:50:45 +02:00
Mathieu Lirzin
4802dc976b
maint: Rewrite old NEWS
* NEWS: Follow the format used by GNU Coreutils.
2017-09-28 23:23:06 +02:00
Mathieu Lirzin
c285d36ab2
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.
2017-09-28 18:48:49 +02:00
Mathieu Lirzin
811ad9167a
doc: Use 'unless' form
* doc/mcron.texi (Invoking cron or crond): Use 'unless' form and put
"/etc/crontab" inside a @code command.
2017-09-28 18:13:08 +02:00
Mathieu Lirzin
dd30cb9e54
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 18:13:08 +02:00
Mathieu Lirzin
d011957843
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 18:12:27 +02:00
Mathieu Lirzin
c01106387f
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.
2017-09-28 15:57:21 +02:00
Mathieu Lirzin
9b52c0d454
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 15:50:58 +02:00
Mathieu Lirzin
2b9828f303
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 15:43:21 +02:00