From 96bcd4220f1f1313afe12097d8dc62342ac8de0d Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 4 Apr 2016 17:42:24 +0200 Subject: Now build "gpg" binary but install as "gpg2" * configure.ac (USE_GPG2_HACK): New ac_define am_conditional. * common/homedir.c (gnupg_module_name): Replace use of macro NAME_OF_INSTALLED_GPG. * g10/keygen.c (generate_keypair): Ditto. * g10/Makefile.am (bin_PROGRAMS): Remove. (noinst_PROGRAMS): Add gpg or gpg2 and gpgv or gpg2. (gpg2_hack_list): New. (use_gpg2_hack): New. (gpg2_SOURCES): Rename to gpg_SOURCES. (gpgv2_SOURCES): Rename to gpgv_SOURCES. (gpg2_LDADD): Rename to gpg_LDADD. (gpgv2_LDADD): Rename to gpgv_LDADD. (gpg2_LDFLAGS): Rename to gpg_LDFLAGS. (gpgv2_LDFLAGS): Rename to gpgv2_LDFLAGS. (install-exec-hook): Remove WinCE specific rules and add new rules. (uninstall-local): Uninstall gpg/gpg2 and gpgv/gpgv2. * tests/openpgp/Makefile.am (required_pgms): s/gpg2/gpg/. * tests/openpgp/defs.inc: Ditto. * tests/openpgp/gpgtar.test: Ditto. * tests/openpgp/mkdemodirs: Ditto. * tests/openpgp/signdemokey: Ditto. * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Remove obsolete --enable-mailto, add --enable-gpg2-is-gpg. -- Although we need to duplicate some automake generated code this method allows to easily switch the name of the installed target using the configure option "--enable-gpg2-is-gpg". Signed-off-by: Werner Koch --- Makefile.am | 3 +- common/homedir.c | 6 +++- configure.ac | 9 ++--- g10/Makefile.am | 83 +++++++++++++++++++++++++++++++++++++---------- g10/keygen.c | 7 +++- tests/openpgp/Makefile.am | 2 +- tests/openpgp/defs.inc | 2 +- tests/openpgp/gpgtar.test | 2 +- tests/openpgp/mkdemodirs | 2 +- tests/openpgp/signdemokey | 2 +- 10 files changed, 87 insertions(+), 31 deletions(-) diff --git a/Makefile.am b/Makefile.am index 19f13fe63..5527e2438 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,7 +19,8 @@ ## Process this file with automake to produce Makefile.in ACLOCAL_AMFLAGS = -I m4 -DISTCHECK_CONFIGURE_FLAGS = --enable-symcryptrun --enable-mailto --enable-g13 +DISTCHECK_CONFIGURE_FLAGS = --enable-symcryptrun --enable-g13 \ + --enable-gpg2-is-gpg GITLOG_TO_CHANGELOG=gitlog-to-changelog diff --git a/common/homedir.c b/common/homedir.c index e0a88fa17..5bf517360 100644 --- a/common/homedir.c +++ b/common/homedir.c @@ -729,7 +729,11 @@ gnupg_module_name (int which) X(bindir, "gpgsm"); case GNUPG_MODULE_NAME_GPG: - X(bindir, NAME_OF_INSTALLED_GPG); +#if USE_GPG2_HACK + X(bindir, GPG_NAME "2"); +#else + X(bindir, GPG_NAME); +#endif case GNUPG_MODULE_NAME_CONNECT_AGENT: X(bindir, "gpg-connect-agent"); diff --git a/configure.ac b/configure.ac index 0163dde0c..70c1d143d 100644 --- a/configure.ac +++ b/configure.ac @@ -215,13 +215,10 @@ test -n "$GNUPG_DIRMNGR_LDAP_PGM" \ AC_ARG_ENABLE(gpg2-is-gpg, AC_HELP_STRING([--enable-gpg2-is-gpg],[Set installed name of gpg2 to gpg]), gpg2_is_gpg=$enableval) -if test "$gpg2_is_gpg" = "yes"; then - name_of_installed_gpg=gpg -else - name_of_installed_gpg=gpg2 +if test "$gpg2_is_gpg" != "yes"; then + AC_DEFINE(USE_GPG2_HACK, 1, [Define to install gpg as gpg2]) fi -AC_DEFINE_UNQUOTED(NAME_OF_INSTALLED_GPG, "$name_of_installed_gpg", - [The name of the installed GPG tool]) +AM_CONDITIONAL(USE_GPG2_HACK, test "$gpg2_is_gpg" != "yes") # SELinux support includes tracking of sensitive files to avoid diff --git a/g10/Makefile.am b/g10/Makefile.am index a30bc01da..1b52e641d 100644 --- a/g10/Makefile.am +++ b/g10/Makefile.am @@ -32,11 +32,24 @@ AM_CFLAGS = $(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS) \ needed_libs = ../kbx/libkeybox.a $(libcommon) -bin_PROGRAMS = gpg2 +# Because there are no program specific transform macros we need to +# work around that to allow installaing gpg as gpg2. +gpg2_hack_list = gpg gpgv +if USE_GPG2_HACK +gpg2_hack_uninst = gpg2 gpgv2 +use_gpg2_hack = yes +else +gpg2_hack_uninst = $(gpg2_hack_list) +use_gpg2_hack = no +endif + +# NB: We use noinst_ for gpg and gpgv so that we can install them with +# the install-hook target under the name gpg2/gpgv2. +noinst_PROGRAMS = gpg if !HAVE_W32CE_SYSTEM -bin_PROGRAMS += gpgv2 +noinst_PROGRAMS += gpgv endif -noinst_PROGRAMS = gpgcompose $(module_tests) +noinst_PROGRAMS += gpgcompose $(module_tests) TESTS = $(module_tests) if ENABLE_BZIP2_SUPPORT @@ -133,12 +146,12 @@ gpg_sources = server.c \ $(card_source) \ exec.c exec.h -gpg2_SOURCES = gpg.c \ +gpg_SOURCES = gpg.c \ keyedit.c \ $(gpg_sources) gpgcompose_SOURCES = gpgcompose.c $(gpg_sources) -gpgv2_SOURCES = gpgv.c \ +gpgv_SOURCES = gpgv.c \ $(common_source) \ verify.c \ dearmor.c @@ -152,14 +165,14 @@ gpgv2_SOURCES = gpgv.c \ LDADD = $(needed_libs) ../common/libgpgrl.a \ $(ZLIBS) $(LIBINTL) $(CAPLIBS) $(NETLIBS) -gpg2_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \ +gpg_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \ $(LIBASSUAN_LIBS) $(GPG_ERROR_LIBS) \ $(LIBICONV) $(resource_objs) $(extra_sys_libs) -gpg2_LDFLAGS = $(extra_bin_ldflags) -gpgv2_LDADD = $(LDADD) $(LIBGCRYPT_LIBS) \ +gpg_LDFLAGS = $(extra_bin_ldflags) +gpgv_LDADD = $(LDADD) $(LIBGCRYPT_LIBS) \ $(GPG_ERROR_LIBS) \ $(LIBICONV) $(resource_objs) $(extra_sys_libs) -gpgv2_LDFLAGS = $(extra_bin_ldflags) +gpgv_LDFLAGS = $(extra_bin_ldflags) gpgcompose_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \ $(LIBASSUAN_LIBS) $(GPG_ERROR_LIBS) \ @@ -185,6 +198,42 @@ t_stutter_LDADD = $(LDADD) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) \ $(PROGRAMS): $(needed_libs) ../common/libgpgrl.a +# NB: To install gpg and gpgv we use this -hook. This code has to +# duplicate most of the automake generated install-binPROGRAMS target +# so that directories are created and the transform feature works. +install-exec-hook: + @echo "running install-exec-hook"; \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)"; \ + for p in $(gpg2_hack_list); do \ + echo "$$p$(EXEEXT) $$p$(EXEEXT)"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + for f in $$files; do \ + if test $(use_gpg2_hack) = yes ; \ + then f2=`echo "$${f}" | sed 's/$(EXEEXT)$$//'`2$(EXEEXT); \ + else f2="$${f}" ;\ + fi ; \ + echo "$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) \ + $${f} '$(DESTDIR)$(bindir)/$${f2}'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) \ + $${f} "$(DESTDIR)$(bindir)/$${f2}"; \ + done; \ + done + + install-data-local: $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) $(INSTALL_DATA) $(srcdir)/options.skel \ @@ -194,15 +243,15 @@ install-data-local: $(INSTALL_DATA) $(srcdir)/distsigkey.gpg \ $(DESTDIR)$(pkgdatadir)/distsigkey.gpg +# NB: For uninstalling gpg and gpgv we use -local because there is +# no need for a specific order the targets need to be run. uninstall-local: -@rm $(DESTDIR)$(pkgdatadir)/gpg-conf.skel -@rm $(DESTDIR)$(pkgdatadir)/dirmngr-conf.skel -@rm $(DESTDIR)$(pkgdatadir)/distsigkey.gpg - - -# There has never been a gpg for WindowsCE, thus we don't need a gpg2 here -if HAVE_W32CE_SYSTEM -install-exec-hook: - mv -f $(DESTDIR)$(bindir)/gpg2$(EXEEXT) \ - $(DESTDIR)$(bindir)/gpg$(EXEEXT) -endif + -@files=`for p in $(gpg2_hack_uninst); do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files diff --git a/g10/keygen.c b/g10/keygen.c index a7d7d278b..06710eb4b 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -3779,7 +3779,12 @@ generate_keypair (ctrl_t ctrl, int full, const char *fname, { tty_printf ( _("Note: Use \"%s %s\"" " for a full featured key generation dialog.\n"), - NAME_OF_INSTALLED_GPG, "--full-gen-key" ); +#if USE_GPG2_HACK + GPG_NAME "2" +#else + GPG_NAME +#endif + , "--full-gen-key" ); para = quickgen_set_para (para, 0, DEFAULT_STD_ALGO, DEFAULT_STD_KEYSIZE, DEFAULT_STD_CURVE); diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am index 4e09c2327..bab0b7d37 100644 --- a/tests/openpgp/Makefile.am +++ b/tests/openpgp/Makefile.am @@ -20,7 +20,7 @@ # Programs required before we can run these tests. -required_pgms = ../../g10/gpg2$(EXEEXT) ../../agent/gpg-agent$(EXEEXT) \ +required_pgms = ../../g10/gpg$(EXEEXT) ../../agent/gpg-agent$(EXEEXT) \ ../../tools/gpg-connect-agent$(EXEEXT) \ ../../tools/mk-tdata$(EXEEXT) diff --git a/tests/openpgp/defs.inc b/tests/openpgp/defs.inc index 8f969db26..ea86c6919 100755 --- a/tests/openpgp/defs.inc +++ b/tests/openpgp/defs.inc @@ -215,7 +215,7 @@ fi unset GPG_AGENT_INFO # (--no-permission-warning makes only sense on the commandline) -GPG="../../g10/gpg2 --no-permission-warning " +GPG="../../g10/gpg --no-permission-warning " # (We may not use a relative name for gpg-agent.) GPG_AGENT="$(cd ../../agent && /bin/pwd)/gpg-agent" GPG_CONNECT_AGENT="../../tools/gpg-connect-agent" diff --git a/tests/openpgp/gpgtar.test b/tests/openpgp/gpgtar.test index daba514fe..63bed7025 100755 --- a/tests/openpgp/gpgtar.test +++ b/tests/openpgp/gpgtar.test @@ -27,7 +27,7 @@ FILELIST="${TESTDIR}/filelist" PPFILE="${TESTDIR}/passphrase" PPFLAGS="--gpg-args --passphrase-file=$PPFILE" -GPG=../../g10/gpg2 +GPG=../../g10/gpg GPGARGS="$opt_always --no-permission-warning" GPGTAR="../../tools/gpgtar" diff --git a/tests/openpgp/mkdemodirs b/tests/openpgp/mkdemodirs index a381681b0..fd8a7410e 100755 --- a/tests/openpgp/mkdemodirs +++ b/tests/openpgp/mkdemodirs @@ -4,7 +4,7 @@ set -e # We need to use --no-options so that a gpg.conf from an older version # of gpg is not used. -GPG="../../g10/gpg2 --no-options --batch --quiet +GPG="../../g10/gpg --no-options --batch --quiet --no-secmem-warning --allow-secret-key-import" NAMES='Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India diff --git a/tests/openpgp/signdemokey b/tests/openpgp/signdemokey index 9a1257cc4..13c5784de 100755 --- a/tests/openpgp/signdemokey +++ b/tests/openpgp/signdemokey @@ -10,7 +10,7 @@ name="$1" user_id="$2" user_id_no="$3" -echo "abc" | ../g10/gpg2 --options ./gpg.conf --homedir $name \ +echo "abc" | ../g10/gpg --options ./gpg.conf --homedir $name \ --sign-key --batch --yes --passphrase-fd 0 $user_id \ $user_id_no sign save -- cgit v1.2.3