maint: Use gnulib modules in src/ tools. Closes: #37.
Partially reverts 9b6c6519.
Signed-off-by: Simon Josefsson <simon@josefsson.org>
diff --git a/.gitignore b/.gitignore
index d96a4d0..f726bcd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -165,6 +165,7 @@
/src/asn1Parser
/src/asn1Parser.o
/src/benchmark.o
+/src/gl/
/stamp-h1
/tags
/tests-gl/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 81611de..1ea42df 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -182,6 +182,7 @@
- build/tests/*/*.log
gnutls:
+ when: manual # takes ~1 hour...
image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
script:
- yum remove -y libtasn1-devel
diff --git a/Makefile.am b/Makefile.am
index 86cca65..87ac3c6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -35,7 +35,7 @@
include $(top_srcdir)/aminclude_static.am
-ACLOCAL_AMFLAGS = -I m4
+ACLOCAL_AMFLAGS = -I m4 -I src/gl/m4
ABIDW_COMMON = --no-show-locs --no-corpus-path
ABIGNORE_FILE = "$(top_srcdir)/devel/libtasn1.abignore"
diff --git a/NEWS b/NEWS
index 7ce3b1b..f2ab665 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@
* Noteworthy changes in release ?.? (????-??-??) [?]
- Improve GTK-DOC manual. Closes: #35.
+- Improve --help and --version for tools with gnulib. Closes: #37.
* Noteworthy changes in release 4.17.0 (2021-05-13) [stable]
- Print deprecation messages for deprecated macros, thanks to Tim Rühsen.
diff --git a/bootstrap.conf b/bootstrap.conf
index 514988c..64e64f5 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -39,6 +39,13 @@
valgrind-tests
"
+src_gnulib_modules="
+gettime
+progname
+read-file
+version-etc-fsf
+"
+
# Build prerequisites
buildreq="\
autoconf 2.64
@@ -62,6 +69,8 @@
bootstrap_post_import_hook ()
{
+ ${GNULIB_SRCDIR}/gnulib-tool --import --libtool --m4-base=src/gl/m4 --macro-prefix=sgl --lib=libsgl --source-base=src/gl --local-dir=src/gl --tests-base=src/gl/tests --no-conditional-dependencies --without-tests $src_gnulib_modules
+
# Automake requires that ChangeLog exist.
touch ChangeLog || return 1
}
diff --git a/configure.ac b/configure.ac
index bb33e23..5389656 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,6 +44,7 @@
AC_PROG_CC
gl_EARLY
+sgl_EARLY
AC_PROG_YACC
AC_ARG_ENABLE(doc,
@@ -61,6 +62,7 @@
AC_CHECK_SIZEOF(unsigned int, 4)
gl_INIT
+sgl_INIT
AX_CODE_COVERAGE
@@ -123,6 +125,7 @@
lib/includes/libtasn1.h
lib/libtasn1.pc
src/Makefile
+ src/gl/Makefile
tests/Makefile
])
AC_OUTPUT
diff --git a/gnulib b/gnulib
index 8f7615a..e20b35c 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 8f7615ad790cb837e1888dc4064c6540ecb1f72d
+Subproject commit e20b35c9167ff7c051d0314b356d7e7a304f828f
diff --git a/src/Makefile.am b/src/Makefile.am
index a172947..d0e84d5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -16,11 +16,18 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CODE_COVERAGE_CFLAGS)
-AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes \
- -I$(top_builddir)/lib/gl -I$(top_srcdir)/lib/gl $(CODE_COVERAGE_CPPFLAGS)
+SUBDIRS = gl
-LDADD = ../lib/libtasn1.la ../lib/gl/libgnu.la
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_builddir)/lib/includes -I$(top_srcdir)/lib/includes
+AM_CPPFLAGS += -I$(top_builddir)/lib/gl -I$(top_srcdir)/lib/gl
+AM_CPPFLAGS += -I$(builddir)/gl -I$(srcdir)/gl
+
+AM_CFLAGS += $(CODE_COVERAGE_CFLAGS)
+AM_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS)
+
+LDADD = ../lib/libtasn1.la ../lib/gl/libgnu.la gl/libsgl.la
+LDADD += $(LIB_CLOCK_GETTIME) $(LTLIBINTL)
AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS)
bin_PROGRAMS = asn1Parser asn1Coding asn1Decoding
diff --git a/src/asn1Coding.c b/src/asn1Coding.c
index 9b54a75..e8927a8 100644
--- a/src/asn1Coding.c
+++ b/src/asn1Coding.c
@@ -29,7 +29,8 @@
#include <libtasn1.h>
-#define program_name "asn1Coding"
+#include "progname.h"
+#include "version-etc.h"
/* This feature is available in gcc versions 2.5 and later. */
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
@@ -57,7 +58,7 @@
-o, --output=FILE output file\n\
-h, --help display this help and exit\n\
-v, --version output version information and exit\n");
- printf ("Report bugs to "PACKAGE_BUGREPORT);
+ emit_bug_reporting_address ();
}
exit (status);
}
@@ -152,6 +153,8 @@
int k;
int last_ra;
+ set_program_name (argv[0]);
+
opterr = 0; /* disable error messages from getopt */
while (1)
@@ -170,9 +173,8 @@
usage (EXIT_SUCCESS);
break;
case 'v': /* VERSION */
- printf(program_name" "PACKAGE" " VERSION"\n");
- printf("Copyright (C) 2017-2021 Free Software Foundation, Inc.\n\n");
- printf("Written by Fabio Fiorina\n");
+ version_etc (stdout, program_name, PACKAGE, VERSION,
+ "Fabio Fiorina", NULL);
free (outputFileName);
exit (0);
break;
diff --git a/src/asn1Decoding.c b/src/asn1Decoding.c
index f16c5b9..c453cb3 100644
--- a/src/asn1Decoding.c
+++ b/src/asn1Decoding.c
@@ -32,7 +32,9 @@
#include "benchmark.h"
-#define program_name "asn1Decoding"
+#include "progname.h"
+#include "read-file.h"
+#include "version-etc.h"
static int decode (asn1_node definitions, const char *typeName, void *der,
int der_len, int benchmark, int strict);
@@ -63,51 +65,11 @@
-t, --no-time-strict use strict DER decoding but not in time fields\n\
-h, --help display this help and exit\n\
-v, --version output version information and exit\n");
- printf ("Report bugs to "PACKAGE_BUGREPORT);
+ emit_bug_reporting_address ();
}
exit (status);
}
-static char *read_binary_file(const char *file, size_t *l)
-{
- FILE *fp;
- struct stat st;
- char *out;
-
- if (stat(file, &st) == -1)
- {
- fprintf(stderr, "Error reading file size!\n");
- exit(1);
- }
-
- fp = fopen(file, "rb");
- if (fp == NULL)
- {
- fprintf(stderr, "Error reading file!\n");
- exit(1);
- }
-
- out = malloc(st.st_size+1);
- if (out == NULL)
- {
- fprintf(stderr, "Memory error!\n");
- exit(1);
- }
-
- *l = fread(out, 1, st.st_size, fp);
- if ((off_t)*l != st.st_size)
- {
- fprintf(stderr, "Error reading contents (got: %ld, expected %ld)!\n",
- (long)*l, (long)st.st_size);
- exit(1);
- }
-
- out[*l] = 0;
-
- fclose(fp);
- return out;
-}
-
int
main (int argc, char *argv[])
{
@@ -133,6 +95,8 @@
int flags = 0, debug = 0;
/* FILE *outputFile; */
+ set_program_name (argv[0]);
+
opterr = 0; /* disable error messages from getopt */
while (1)
@@ -162,9 +126,8 @@
flags |= ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME;
break;
case 'v': /* VERSION */
- printf(program_name" "PACKAGE" " VERSION"\n");
- printf("Copyright (C) 2017-2021 Free Software Foundation, Inc.\n\n");
- printf("Written by Fabio Fiorina\n");
+ version_etc (stdout, program_name, PACKAGE, VERSION,
+ "Fabio Fiorina", NULL);
exit (0);
break;
case '?': /* UNKNOW OPTION */
@@ -231,7 +194,7 @@
{
size_t tmplen;
- der = (unsigned char *) read_binary_file (inputFileDerName, &tmplen);
+ der = (unsigned char *) read_file (inputFileDerName, RF_BINARY, &tmplen);
der_len = tmplen;
}
diff --git a/src/asn1Parser.c b/src/asn1Parser.c
index adb1274..fdcca68 100644
--- a/src/asn1Parser.c
+++ b/src/asn1Parser.c
@@ -29,7 +29,8 @@
#include <libtasn1.h>
-#define program_name "asn1Parser"
+#include "progname.h"
+#include "version-etc.h"
/* This feature is available in gcc versions 2.5 and later. */
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
@@ -58,7 +59,7 @@
-n, --name=NAME array name\n\
-h, --help display this help and exit\n\
-v, --version output version information and exit\n");
- printf ("Report bugs to "PACKAGE_BUGREPORT);
+ emit_bug_reporting_address ();
}
exit (status);
}
@@ -84,6 +85,8 @@
char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
int parse_result = ASN1_SUCCESS;
+ set_program_name (argv[0]);
+
opterr = 0; /* disable error messages from getopt */
while (1)
@@ -109,9 +112,8 @@
usage (EXIT_SUCCESS);
break;
case 'v': /* VERSION */
- printf(program_name" "PACKAGE" " VERSION"\n");
- printf("Copyright (C) 2017-2021 Free Software Foundation, Inc.\n\n");
- printf("Written by Fabio Fiorina\n");
+ version_etc (stdout, program_name, PACKAGE, VERSION,
+ "Fabio Fiorina", NULL);
free (outputFileName);
free (vectorName);
exit (0);
diff --git a/src/benchmark.c b/src/benchmark.c
index 3f8ef41..d5802cc 100644
--- a/src/benchmark.c
+++ b/src/benchmark.c
@@ -87,12 +87,8 @@
#ifndef _WIN32
st->old_handler = signal (SIGALRM, alarm_handler);
#endif
+ gettime (&st->start);
-#ifdef HAVE_CLOCK_GETTIME
- clock_gettime (CLOCK_MONOTONIC, &st->start);
-#else
- gettimeofday(&st->start, NULL);
-#endif
benchmark_must_finish = 0;
#if defined _WIN32
@@ -127,11 +123,7 @@
{
double secs;
unsigned long lsecs;
-#ifdef HAVE_CLOCK_GETTIME
struct timespec stop;
-#else
- struct timeval stop;
-#endif
double dspeed, ddata;
char imetric[16];
@@ -144,17 +136,10 @@
signal (SIGALRM, st->old_handler);
#endif
-#ifdef HAVE_CLOCK_GETTIME
- clock_gettime (CLOCK_MONOTONIC, &stop);
+ gettime (&stop);
lsecs = (stop.tv_sec * 1000 + stop.tv_nsec / (1000 * 1000) -
(st->start.tv_sec * 1000 + st->start.tv_nsec / (1000 * 1000)));
-#else
- gettimeofday(&stop, NULL);
- lsecs = (stop.tv_sec * 1000 + stop.tv_usec / (1000) -
- (st->start.tv_sec * 1000 + st->start.tv_usec / (1000)));
-#endif
-
secs = lsecs;
secs /= 1000;
diff --git a/src/benchmark.h b/src/benchmark.h
index 05cea9c..52ed1a4 100644
--- a/src/benchmark.h
+++ b/src/benchmark.h
@@ -20,7 +20,6 @@
#ifndef BENCHMARK_H
# define BENCHMARK_H
-#include <config.h>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
@@ -28,16 +27,13 @@
#include <windows.h>
#endif
#include <time.h>
+#include "timespec.h" /* gnulib gettime */
typedef void (*sighandler_t) (int);
struct benchmark_st
{
-#ifdef HAVE_CLOCK_GETTIME
struct timespec start;
-#else
- struct timeval start;
-#endif
unsigned long size;
sighandler_t old_handler;
#if defined _WIN32