├── .gitignore ├── ABOUT-NLS ├── AUTHORS ├── COPYING.LESSER ├── ChangeLog ├── INSTALL ├── Makefile.am ├── NEWS ├── README ├── TODO ├── autogen.rc ├── autogen.sh ├── build-aux ├── compile ├── config.guess ├── config.rpath ├── config.sub ├── depcomp ├── install-sh ├── mdate-sh ├── missing ├── mkinstalldirs └── texinfo.tex ├── configure.ac ├── doc ├── Makefile.am ├── gpgex-de.html ├── gpgex-en.html ├── gpgex.texi └── gpl.texi ├── m4 ├── Makefile.am ├── codeset.m4 ├── gettext.m4 ├── glibc21.m4 ├── gpg-error.m4 ├── iconv.m4 ├── intdiv0.m4 ├── inttypes-pri.m4 ├── inttypes.m4 ├── inttypes_h.m4 ├── isc-posix.m4 ├── lcmessage.m4 ├── lib-ld.m4 ├── lib-link.m4 ├── lib-prefix.m4 ├── libassuan.m4 ├── nls.m4 ├── po.m4 ├── progtest.m4 ├── stdint_h.m4 ├── uintmax_t.m4 └── ulonglong.m4 ├── po ├── .gitattributes ├── LINGUAS ├── Makefile.in.in ├── Makevars ├── POTFILES.in ├── Rules-quot ├── ar.po ├── boldquot.sed ├── de.po ├── en@boldquot.header ├── en@quot.header ├── es.po ├── fr.po ├── insert-header.sin ├── it.po ├── nl.po ├── pl.po ├── pt.po ├── quot.sed ├── remove-potcdate.sin ├── ru.po ├── zh_CN.po └── zh_TW.po └── src ├── ChangeLog ├── GNU.GnuPG.Gcc64Support.manifest ├── Makefile.am ├── README.ext ├── client.cc ├── client.h ├── debug.h ├── exechelp.c ├── exechelp.h ├── gnupg.ico ├── gpgex-class.cc ├── gpgex-class.h ├── gpgex-factory.cc ├── gpgex-factory.h ├── gpgex.cc ├── gpgex.def ├── gpgex.h ├── gpgex.manifest.in ├── gpgex_logo.svg ├── icon-16.png ├── main.cc ├── main.h ├── registry.c ├── registry.h ├── resource.h ├── standalone.svg └── versioninfo.rc.in /.gitignore: -------------------------------------------------------------------------------- 1 | /Makefile.in 2 | /aclocal.m4 3 | /autom4te.cache/ 4 | /config.h.in 5 | /configure 6 | /doc/Makefile.in 7 | /doc/gpgex.info 8 | /doc/mdate-sh 9 | /doc/stamp-vti 10 | /doc/version.texi 11 | /m4/Makefile.in 12 | /po/gpgex.pot 13 | /src/Makefile.in 14 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Package: gpgex 2 | Contact: info-gpgex@g10code.com 3 | Bugs: https://bugs.gnupg.org 4 | Security related bug reports: 5 | Maintainer: Andre Heinecke 6 | License: LGPLv2.1 7 | 8 | g10 Code GmbH 9 | New code and package maintainer. 10 | 11 | أحمد غربية 12 | Arabic translations. 13 | 14 | Diego Escalante Urrelo 15 | Spanish translations. 16 | 17 | Sergei Smirnov 18 | Russian translations. 19 | 20 | Marco A.G.Pinto 21 | Portuguese translations. 22 | 23 | Tomasz Krawczyk 24 | Polish translation 25 | -------------------------------------------------------------------------------- /ChangeLog: -------------------------------------------------------------------------------- 1 | 2010-07-21 Werner Koch 2 | 3 | Release 0.9.7. 4 | 5 | 2010-07-21 Marco A.G.Pinto (wk) 6 | 7 | * po/pt.po: New. 8 | * po/LINGUAS: Add pt. 9 | 10 | 2010-07-21 Werner Koch 11 | 12 | * configure.ac: Require libgpg-error 1.9. 13 | 14 | 2010-04-21 Marcus Brinkmann 15 | 16 | Release 0.9.6. 17 | 18 | 2010-04-20 Marcus Brinkmann 19 | 20 | * configure.ac: Bump version to 0.9.6. 21 | (NEED_LIBASSUAN_API): Bump to 2. 22 | (NEED_LIBASSAUN_VERSION): Bump to 2.0.0. 23 | 24 | 2010-04-20 Emanuel Schütze 25 | 26 | * po/de.po: Use "pruefen" instead "ueberpruefen" for signatures. 27 | 28 | 2010-01-08 Marcus Brinkmann 29 | 30 | * Release 0.9.5. 31 | 32 | 2009-12-26 Marcus Brinkmann 33 | 34 | * Release 0.9.4. 35 | 36 | 2009-08-04 Marcus Brinkmann 37 | 38 | * doc/gpgex-en.html, doc/gpgex-de.html: Add link to Kleo manual. 39 | 40 | 2009-07-31 Emanuel Schütze 41 | 42 | * doc/gpgex-de.html, doc/gpgex-en.html: Remove checksum text, 43 | improve documentation for debug message. 44 | 45 | 2009-03-24 Werner Koch 46 | 47 | Release 0.9.3. 48 | 49 | 2009-03-10 Marcus Brinkmann 50 | 51 | * po/de.po, po/es.po, po/ru.po, po/ar.po: Change encrypt&sign to 52 | sign&encrypt everywhere. 53 | 54 | 2009-01-28 Werner Koch 55 | 56 | Release 0.9.2. 57 | 58 | 2009-01-22 Werner Koch 59 | 60 | * po/de.po: Change "verifizeren" to "überprüfen". 61 | 62 | 2008-06-04 Werner Koch 63 | 64 | * doc/gpgex.texi (Assuan Protocol): Replace the spec by a 65 | reference to the gpgme manual. 66 | 67 | 2008-03-26 Marcus Brinkmann 68 | 69 | Released 0.9.0. 70 | 71 | * po/LINGUAS: Add ar, es, ru. 72 | 73 | * Makefile.am (AUTOMAKE_OPTIONS): Add no-dist-gzip. 74 | 75 | * configure.ac: Prepare for release of 0.9.0. 76 | 77 | * po/ar.po, po/es.po, po/ru.po: New files. 78 | * po/de.po: Fix newline. 79 | 80 | 2007-11-26 Marcus Brinkmann 81 | 82 | * doc/gpgex-de.html, doc/gpgex-en.html: Add FIXME entries for 83 | missing hyperlinks. 84 | 85 | 2007-11-12 Marcus Brinkmann 86 | 87 | * configure.ac (WINVER): New symbol. 88 | 89 | 2007-11-08 Marcus Brinkmann 90 | 91 | * po/de.po: Update. 92 | 93 | * doc/gpgex-de.html, doc/gpgex-en.html: New files. 94 | * doc/Makefile.am (dist_doc_DATA): New variable. 95 | 96 | * doc/gpgex.texi: Complete protocol change from INPUT FILE to 97 | FILE. Also from IMPORT to IMPORT_FILES. 98 | 99 | 2007-11-02 Werner Koch 100 | 101 | * autogen.sh: Add --force option. 102 | 103 | * doc/gpgex.texi: Protocol change s/"INPUT FILE"/"FILE"/. 104 | 105 | 2007-10-08 Marcus Brinkmann 106 | 107 | * doc/gpgex.texi (Certificate management): New section 108 | 109 | * po/de.po: Convert to UTF-8. 110 | 111 | * autogen.sh: Add --add-missing to automake invocation. 112 | * configure.ac (AC_CONFIG_FILES): Add doc/Makefile. 113 | * Makefile.am (SUBDIRS): Add doc. 114 | * doc/: New directory. 115 | 116 | 2007-10-05 Marcus Brinkmann 117 | 118 | * po/de.po: Fix translation. 119 | 120 | * po/de.po: Update. 121 | 122 | 2007-09-11 Marcus Brinkmann 123 | 124 | * po/de.po: Update. 125 | 126 | * po/de.po: New file. 127 | 128 | * po/LINGUAS: Add de. 129 | * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Add 130 | --with-libassuan-prefix and --with-gpg-error-prefix. 131 | 132 | 2007-09-04 Marcus Brinkmann 133 | 134 | * m4/libassuan.m4, m4/gpg-error.m4: New files. 135 | * configure.ac: Check for libgpg-error and libassuan. 136 | * po/POTFILES.in: Add src/client.cc, src/gpgex.h and src/gpgex.cc. 137 | 138 | 2007-09-03 Marcus Brinkmann 139 | 140 | * m4/Makefile.am (EXTRA_DIST): Remove gpgme.m4 and gpg-error.m4. 141 | 142 | 2007-08-23 Marcus Brinkmann 143 | 144 | * Initial commit. 145 | 146 | 147 | Copyright 2007 g10 Code GmbH 148 | 149 | This file is free software; as a special exception the author gives 150 | unlimited permission to copy and/or distribute it, with or without 151 | modifications, as long as this notice is preserved. 152 | 153 | This file is distributed in the hope that it will be useful, but 154 | WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 155 | implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 156 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | Installation Instructions 2 | ************************* 3 | 4 | Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free 5 | Software Foundation, Inc. 6 | 7 | This file is free documentation; the Free Software Foundation gives 8 | unlimited permission to copy, distribute and modify it. 9 | 10 | Basic Installation 11 | ================== 12 | 13 | These are generic installation instructions. 14 | 15 | The `configure' shell script attempts to guess correct values for 16 | various system-dependent variables used during compilation. It uses 17 | those values to create a `Makefile' in each directory of the package. 18 | It may also create one or more `.h' files containing system-dependent 19 | definitions. Finally, it creates a shell script `config.status' that 20 | you can run in the future to recreate the current configuration, and a 21 | file `config.log' containing compiler output (useful mainly for 22 | debugging `configure'). 23 | 24 | It can also use an optional file (typically called `config.cache' 25 | and enabled with `--cache-file=config.cache' or simply `-C') that saves 26 | the results of its tests to speed up reconfiguring. (Caching is 27 | disabled by default to prevent problems with accidental use of stale 28 | cache files.) 29 | 30 | If you need to do unusual things to compile the package, please try 31 | to figure out how `configure' could check whether to do them, and mail 32 | diffs or instructions to the address given in the `README' so they can 33 | be considered for the next release. If you are using the cache, and at 34 | some point `config.cache' contains results you don't want to keep, you 35 | may remove or edit it. 36 | 37 | The file `configure.ac' (or `configure.in') is used to create 38 | `configure' by a program called `autoconf'. You only need 39 | `configure.ac' if you want to change it or regenerate `configure' using 40 | a newer version of `autoconf'. 41 | 42 | The simplest way to compile this package is: 43 | 44 | 1. `cd' to the directory containing the package's source code and type 45 | `./configure' to configure the package for your system. If you're 46 | using `csh' on an old version of System V, you might need to type 47 | `sh ./configure' instead to prevent `csh' from trying to execute 48 | `configure' itself. 49 | 50 | Running `configure' takes awhile. While running, it prints some 51 | messages telling which features it is checking for. 52 | 53 | 2. Type `make' to compile the package. 54 | 55 | 3. Optionally, type `make check' to run any self-tests that come with 56 | the package. 57 | 58 | 4. Type `make install' to install the programs and any data files and 59 | documentation. 60 | 61 | 5. You can remove the program binaries and object files from the 62 | source code directory by typing `make clean'. To also remove the 63 | files that `configure' created (so you can compile the package for 64 | a different kind of computer), type `make distclean'. There is 65 | also a `make maintainer-clean' target, but that is intended mainly 66 | for the package's developers. If you use it, you may have to get 67 | all sorts of other programs in order to regenerate files that came 68 | with the distribution. 69 | 70 | Compilers and Options 71 | ===================== 72 | 73 | Some systems require unusual options for compilation or linking that the 74 | `configure' script does not know about. Run `./configure --help' for 75 | details on some of the pertinent environment variables. 76 | 77 | You can give `configure' initial values for configuration parameters 78 | by setting variables in the command line or in the environment. Here 79 | is an example: 80 | 81 | ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix 82 | 83 | *Note Defining Variables::, for more details. 84 | 85 | Compiling For Multiple Architectures 86 | ==================================== 87 | 88 | You can compile the package for more than one kind of computer at the 89 | same time, by placing the object files for each architecture in their 90 | own directory. To do this, you must use a version of `make' that 91 | supports the `VPATH' variable, such as GNU `make'. `cd' to the 92 | directory where you want the object files and executables to go and run 93 | the `configure' script. `configure' automatically checks for the 94 | source code in the directory that `configure' is in and in `..'. 95 | 96 | If you have to use a `make' that does not support the `VPATH' 97 | variable, you have to compile the package for one architecture at a 98 | time in the source code directory. After you have installed the 99 | package for one architecture, use `make distclean' before reconfiguring 100 | for another architecture. 101 | 102 | Installation Names 103 | ================== 104 | 105 | By default, `make install' will install the package's files in 106 | `/usr/local/bin', `/usr/local/man', etc. You can specify an 107 | installation prefix other than `/usr/local' by giving `configure' the 108 | option `--prefix=PREFIX'. 109 | 110 | You can specify separate installation prefixes for 111 | architecture-specific files and architecture-independent files. If you 112 | give `configure' the option `--exec-prefix=PREFIX', the package will 113 | use PREFIX as the prefix for installing programs and libraries. 114 | Documentation and other data files will still use the regular prefix. 115 | 116 | In addition, if you use an unusual directory layout you can give 117 | options like `--bindir=DIR' to specify different values for particular 118 | kinds of files. Run `configure --help' for a list of the directories 119 | you can set and what kinds of files go in them. 120 | 121 | If the package supports it, you can cause programs to be installed 122 | with an extra prefix or suffix on their names by giving `configure' the 123 | option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. 124 | 125 | Optional Features 126 | ================= 127 | 128 | Some packages pay attention to `--enable-FEATURE' options to 129 | `configure', where FEATURE indicates an optional part of the package. 130 | They may also pay attention to `--with-PACKAGE' options, where PACKAGE 131 | is something like `gnu-as' or `x' (for the X Window System). The 132 | `README' should mention any `--enable-' and `--with-' options that the 133 | package recognizes. 134 | 135 | For packages that use the X Window System, `configure' can usually 136 | find the X include and library files automatically, but if it doesn't, 137 | you can use the `configure' options `--x-includes=DIR' and 138 | `--x-libraries=DIR' to specify their locations. 139 | 140 | Specifying the System Type 141 | ========================== 142 | 143 | There may be some features `configure' cannot figure out automatically, 144 | but needs to determine by the type of machine the package will run on. 145 | Usually, assuming the package is built to be run on the _same_ 146 | architectures, `configure' can figure that out, but if it prints a 147 | message saying it cannot guess the machine type, give it the 148 | `--build=TYPE' option. TYPE can either be a short name for the system 149 | type, such as `sun4', or a canonical name which has the form: 150 | 151 | CPU-COMPANY-SYSTEM 152 | 153 | where SYSTEM can have one of these forms: 154 | 155 | OS KERNEL-OS 156 | 157 | See the file `config.sub' for the possible values of each field. If 158 | `config.sub' isn't included in this package, then this package doesn't 159 | need to know the machine type. 160 | 161 | If you are _building_ compiler tools for cross-compiling, you should 162 | use the `--target=TYPE' option to select the type of system they will 163 | produce code for. 164 | 165 | If you want to _use_ a cross compiler, that generates code for a 166 | platform different from the build platform, you should specify the 167 | "host" platform (i.e., that on which the generated programs will 168 | eventually be run) with `--host=TYPE'. 169 | 170 | Sharing Defaults 171 | ================ 172 | 173 | If you want to set default values for `configure' scripts to share, you 174 | can create a site shell script called `config.site' that gives default 175 | values for variables like `CC', `cache_file', and `prefix'. 176 | `configure' looks for `PREFIX/share/config.site' if it exists, then 177 | `PREFIX/etc/config.site' if it exists. Or, you can set the 178 | `CONFIG_SITE' environment variable to the location of the site script. 179 | A warning: not all `configure' scripts look for a site script. 180 | 181 | Defining Variables 182 | ================== 183 | 184 | Variables not defined in a site shell script can be set in the 185 | environment passed to `configure'. However, some packages may run 186 | configure again during the build, and the customized values of these 187 | variables may be lost. In order to avoid this problem, you should set 188 | them in the `configure' command line, using `VAR=value'. For example: 189 | 190 | ./configure CC=/usr/local2/bin/gcc 191 | 192 | will cause the specified gcc to be used as the C compiler (unless it is 193 | overridden in the site shell script). 194 | 195 | `configure' Invocation 196 | ====================== 197 | 198 | `configure' recognizes the following options to control how it operates. 199 | 200 | `--help' 201 | `-h' 202 | Print a summary of the options to `configure', and exit. 203 | 204 | `--version' 205 | `-V' 206 | Print the version of Autoconf used to generate the `configure' 207 | script, and exit. 208 | 209 | `--cache-file=FILE' 210 | Enable the cache: use and save the results of the tests in FILE, 211 | traditionally `config.cache'. FILE defaults to `/dev/null' to 212 | disable caching. 213 | 214 | `--config-cache' 215 | `-C' 216 | Alias for `--cache-file=config.cache'. 217 | 218 | `--quiet' 219 | `--silent' 220 | `-q' 221 | Do not print messages saying which checks are being made. To 222 | suppress all normal output, redirect it to `/dev/null' (any error 223 | messages will still be shown). 224 | 225 | `--srcdir=DIR' 226 | Look for the package's source code in directory DIR. Usually 227 | `configure' can determine that directory automatically. 228 | 229 | `configure' also accepts some other, not widely useful, options. Run 230 | `configure --help' for more details. 231 | 232 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | # Makefile.am - main makefile for GpgEX 2 | # Copyright (C) 2005 g10 Code GmbH 3 | # 4 | # This file is free software; as a special exception the author gives 5 | # unlimited permission to copy and/or distribute it, with or without 6 | # modifications, as long as this notice is preserved. 7 | # 8 | # This program is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 10 | # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | 12 | ## Process this file with automake to produce Makefile.in 13 | 14 | ACLOCAL_AMFLAGS = -I m4 15 | AUTOMAKE_OPTIONS = no-dist-gzip dist-bzip2 16 | # Because we can only build the w32 version we need to help automake. 17 | DISTCHECK_CONFIGURE_FLAGS = --host=@host@ --build=@build@ \ 18 | --prefix=@prefix@ 19 | 20 | EXTRA_DIST = autogen.sh autogen.rc 21 | 22 | 23 | SUBDIRS = doc src po m4 24 | 25 | dist-hook: 26 | echo "$(VERSION)" > $(distdir)/VERSION 27 | 28 | distcheck-hook: 29 | set -e; ( \ 30 | pref="#+macro: gpgex_" ;\ 31 | reldate="$$(date -u +%Y-%m-%d)" ;\ 32 | echo "$${pref}ver $(PACKAGE_VERSION)" ;\ 33 | echo "$${pref}date $${reldate}" ;\ 34 | list='$(DIST_ARCHIVES)'; for i in $$list; do \ 35 | case "$$i" in *.tar.bz2) \ 36 | echo "$${pref}size $$(wc -c <$$i|awk '{print int($$1/1024)}')k" ;\ 37 | echo "$${pref}sha1 $$(sha1sum <$$i|cut -d' ' -f1)" ;\ 38 | echo "$${pref}sha2 $$(sha256sum <$$i|cut -d' ' -f1)" ;;\ 39 | esac;\ 40 | done ) | tee $(distdir).swdb 41 | -------------------------------------------------------------------------------- /NEWS: -------------------------------------------------------------------------------- 1 | Noteworthy changes for version 1.0.12 (unreleased) 2 | ------------------------------------------------- 3 | 4 | 5 | Noteworthy changes for version 1.0.11 (2024-07-03) 6 | ------------------------------------------------- 7 | 8 | * Build system updates 9 | 10 | 11 | Noteworthy changes for version 1.0.10 (2023-12-01) 12 | ------------------------------------------------- 13 | 14 | * Removed outdated help entry. 15 | 16 | * General build system maintenance. 17 | 18 | 19 | Noteworthy changes for version 1.0.9 (2022-04-21) 20 | ------------------------------------------------- 21 | 22 | * Added possibility for registry configuration. 23 | 24 | 25 | Noteworthy changes for version 1.0.8 (2021-09-22) 26 | ------------------------------------------------- 27 | 28 | * Take the UI-Server socket directory from information provided by 29 | gpgconf. This matches the changes to the used socket directory 30 | introduced with GnuPG 2.2.30. 31 | 32 | 33 | Noteworthy changes for version 1.0.7 (2021-01-26) 34 | ------------------------------------------------- 35 | 36 | * Added dutch translation. 37 | 38 | * Moved icon to most important menu item. 39 | 40 | 41 | Noteworthy changes for version 1.0.6 (2018-04-11) 42 | ------------------------------------------------- 43 | 44 | * Updated portugese translation. 45 | 46 | * Nicer PNG based Icon. 47 | 48 | 49 | Noteworthy changes for version 1.0.5 (2017-09-12) 50 | ------------------------------------------------- 51 | 52 | * Fixed localisation for the 64bit version. 53 | 54 | * Added c++ hardending flags by default. 55 | 56 | 57 | Noteworthy changes for version 1.0.4 (2016-03-30) 58 | ------------------------------------------------- 59 | 60 | * Updated Portuguese translation. 61 | 62 | * Improved UI Server startup. 63 | 64 | 65 | Noteworthy changes for version 1.0.3 (2015-11-23) 66 | ------------------------------------------------- 67 | 68 | * Added Chinese translation. 69 | 70 | * Added French translation. 71 | 72 | 73 | Noteworthy changes for version 1.0.2 (2014-11-05) 74 | ------------------------------------------------- 75 | 76 | * Added Polish translation. 77 | 78 | * Add configure option --enable-gpa-only 79 | 80 | 81 | Noteworthy changes for version 1.0.1 (2014-07-30) 82 | ------------------------------------------------- 83 | 84 | * Fixed segv in case GNUPGHOME is set. 85 | 86 | * Fixed possible double starting of the UI-server. 87 | 88 | 89 | Noteworthy changes for version 1.0.0 (2013-07-30) 90 | ------------------------------------------------- 91 | 92 | * Support 64 bit Windows. 93 | 94 | * Improved help file detection. 95 | 96 | * Updated Arabian, German, Portuguese, Russian, and Spanish translations. 97 | 98 | 99 | Noteworthy changes for version 0.9.7 (2010-07-21) 100 | ------------------------------------------------- 101 | 102 | * Fix building with latest libgpg-error. 103 | 104 | * Add Portuguese translation. 105 | 106 | 107 | Noteworthy changes for version 0.9.6 (2010-04-21) 108 | ------------------------------------------------- 109 | 110 | * Update to libassuan 2.0.0. 111 | 112 | * Improve German translation. 113 | 114 | * Fix default menu item. 115 | 116 | 117 | Noteworthy changes for version 0.9.5 (2010-01-08) 118 | ------------------------------------------------- 119 | 120 | * Fixed icon. 121 | 122 | 123 | Noteworthy changes for version 0.9.4 (2009-12-26) 124 | ------------------------------------------------- 125 | 126 | * New icon. 127 | 128 | 129 | Noteworthy changes for version 0.9.3 (2009-03-24) 130 | ------------------------------------------------- 131 | 132 | * Fixed build problems with newer WINDRES. 133 | 134 | 135 | Noteworthy changes for version 0.9.2 (2009-01-28) 136 | ------------------------------------------------- 137 | 138 | * Translation changes. 139 | 140 | 141 | Noteworthy changes for version 0.9.1 (2008-09-09) 142 | ------------------------------------------------- 143 | 144 | * Take care of CMS file suffixes. 145 | 146 | 147 | Noteworthy changes for version 0.9.0 (2008-03-26) 148 | ------------------------------------------------- 149 | 150 | * Initial release. 151 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | GPG Explorer Extensions 2 | ======================= 3 | 4 | This package contains GpgEX, the GNU Privacy Guard extensions for the 5 | Windows Explorer shell. 6 | 7 | 8 | Registry Settings 9 | ================= 10 | 11 | The following registry entries are read by GpgEX and affect its 12 | operation: 13 | 14 | HKCU\Software\GNU\GnuPG:UI Server 15 | HKLM\Software\GNU\GnuPG:UI Server 16 | The path to the executable binary of the UI server, relative to 17 | INSTDIR. Absolute paths are currently not supported. It defaults 18 | to the empty sting, so that the UI server is expected in INSTDIR. 19 | If the configure option --enable-gpa-only is used these registry 20 | entries have no effect. 21 | 22 | HKCU\Software\GNU\GnuPG:Install Directory 23 | HKLM\Software\GNU\GnuPG:Install Directory 24 | The directory where GnuPG is installed. This is set by the GnuPG or 25 | Gpg4win installer and used to locate the gpgconf.exe binary. If 26 | this is not set that binary is searched starting at the installation 27 | directory of gpgex.dll in this order: 28 | .\gpgconf.exe 29 | ..\bin\gpgconf.exe 30 | ..\GnuPG\\bin\\gpgconf.exe 31 | ..\..\GnuPG\bin\gpgconf.exe 32 | 33 | HKLM\Software\GNU\GnuPG:GpgEX Debug File 34 | HKLM\Software\Wow6432Node\GNU\GnuPG:GpgEX Debug File 35 | See below. 36 | 37 | The following registry entries are set by GpgEX at installation time 38 | to register it as a shell extension: 39 | 40 | HKCR\CLSID\CCD955E4-5C16-4A33-AFDA-A8947A94946B 41 | HKCR\*\ShellEx\ContextMenuHandlers\GpgEX 42 | HKCR\Directory\ShellEx\ContextMenuHandlers\GpgEX 43 | 44 | 45 | Debugging 46 | ========= 47 | 48 | A debug file path can be specified with the registry value "GpgEX 49 | Debug File" in the HKLM\Software\GNU\GnuPG key. To this file logging 50 | information is appended. The above key is used for the legacy 32 bit 51 | version of Windows. For the current 64 bit version the key is 52 | HKLM\Software\Wow6432Node\GNU\GnuPG - and yes, this is twisted but we 53 | won't change it anymore. 54 | 55 | To increase the frequency at which extensions are unloaded, create the 56 | following registry key with default value "1". 57 | 58 | HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\AlwaysUnloadDLL 59 | 60 | On NT, you can run the taskbar, the Desktop and each explorer window 61 | in a separate process by creating a DWORD "DesktopProcess" with value 62 | 1 under: 63 | 64 | HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer 65 | 66 | You can also terminate the explorer process and restart it from a 67 | previously opened console window. 68 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | * Documentation is missing links to UI server documentation. 2 | -------------------------------------------------------------------------------- /autogen.rc: -------------------------------------------------------------------------------- 1 | # autogen.sh configuration for gpgex -*- sh -*- 2 | 3 | case "$myhost:$myhostsub" in 4 | w32:64) 5 | extraoptions= 6 | ;; 7 | w32:) 8 | extraoptions= 9 | ;; 10 | esac 11 | 12 | 13 | final_info="./configure --build-{w32,w64} && make" 14 | -------------------------------------------------------------------------------- /build-aux/compile: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | # Wrapper for compilers which do not understand '-c -o'. 3 | 4 | scriptversion=2018-03-07.03; # UTC 5 | 6 | # Copyright (C) 1999-2021 Free Software Foundation, Inc. 7 | # Written by Tom Tromey . 8 | # 9 | # This program is free software; you can redistribute it and/or modify 10 | # it under the terms of the GNU General Public License as published by 11 | # the Free Software Foundation; either version 2, or (at your option) 12 | # any later version. 13 | # 14 | # This program is distributed in the hope that it will be useful, 15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | # GNU General Public License for more details. 18 | # 19 | # You should have received a copy of the GNU General Public License 20 | # along with this program. If not, see . 21 | 22 | # As a special exception to the GNU General Public License, if you 23 | # distribute this file as part of a program that contains a 24 | # configuration script generated by Autoconf, you may include it under 25 | # the same distribution terms that you use for the rest of that program. 26 | 27 | # This file is maintained in Automake, please report 28 | # bugs to or send patches to 29 | # . 30 | 31 | nl=' 32 | ' 33 | 34 | # We need space, tab and new line, in precisely that order. Quoting is 35 | # there to prevent tools from complaining about whitespace usage. 36 | IFS=" "" $nl" 37 | 38 | file_conv= 39 | 40 | # func_file_conv build_file lazy 41 | # Convert a $build file to $host form and store it in $file 42 | # Currently only supports Windows hosts. If the determined conversion 43 | # type is listed in (the comma separated) LAZY, no conversion will 44 | # take place. 45 | func_file_conv () 46 | { 47 | file=$1 48 | case $file in 49 | / | /[!/]*) # absolute file, and not a UNC file 50 | if test -z "$file_conv"; then 51 | # lazily determine how to convert abs files 52 | case `uname -s` in 53 | MINGW*) 54 | file_conv=mingw 55 | ;; 56 | CYGWIN* | MSYS*) 57 | file_conv=cygwin 58 | ;; 59 | *) 60 | file_conv=wine 61 | ;; 62 | esac 63 | fi 64 | case $file_conv/,$2, in 65 | *,$file_conv,*) 66 | ;; 67 | mingw/*) 68 | file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` 69 | ;; 70 | cygwin/* | msys/*) 71 | file=`cygpath -m "$file" || echo "$file"` 72 | ;; 73 | wine/*) 74 | file=`winepath -w "$file" || echo "$file"` 75 | ;; 76 | esac 77 | ;; 78 | esac 79 | } 80 | 81 | # func_cl_dashL linkdir 82 | # Make cl look for libraries in LINKDIR 83 | func_cl_dashL () 84 | { 85 | func_file_conv "$1" 86 | if test -z "$lib_path"; then 87 | lib_path=$file 88 | else 89 | lib_path="$lib_path;$file" 90 | fi 91 | linker_opts="$linker_opts -LIBPATH:$file" 92 | } 93 | 94 | # func_cl_dashl library 95 | # Do a library search-path lookup for cl 96 | func_cl_dashl () 97 | { 98 | lib=$1 99 | found=no 100 | save_IFS=$IFS 101 | IFS=';' 102 | for dir in $lib_path $LIB 103 | do 104 | IFS=$save_IFS 105 | if $shared && test -f "$dir/$lib.dll.lib"; then 106 | found=yes 107 | lib=$dir/$lib.dll.lib 108 | break 109 | fi 110 | if test -f "$dir/$lib.lib"; then 111 | found=yes 112 | lib=$dir/$lib.lib 113 | break 114 | fi 115 | if test -f "$dir/lib$lib.a"; then 116 | found=yes 117 | lib=$dir/lib$lib.a 118 | break 119 | fi 120 | done 121 | IFS=$save_IFS 122 | 123 | if test "$found" != yes; then 124 | lib=$lib.lib 125 | fi 126 | } 127 | 128 | # func_cl_wrapper cl arg... 129 | # Adjust compile command to suit cl 130 | func_cl_wrapper () 131 | { 132 | # Assume a capable shell 133 | lib_path= 134 | shared=: 135 | linker_opts= 136 | for arg 137 | do 138 | if test -n "$eat"; then 139 | eat= 140 | else 141 | case $1 in 142 | -o) 143 | # configure might choose to run compile as 'compile cc -o foo foo.c'. 144 | eat=1 145 | case $2 in 146 | *.o | *.[oO][bB][jJ]) 147 | func_file_conv "$2" 148 | set x "$@" -Fo"$file" 149 | shift 150 | ;; 151 | *) 152 | func_file_conv "$2" 153 | set x "$@" -Fe"$file" 154 | shift 155 | ;; 156 | esac 157 | ;; 158 | -I) 159 | eat=1 160 | func_file_conv "$2" mingw 161 | set x "$@" -I"$file" 162 | shift 163 | ;; 164 | -I*) 165 | func_file_conv "${1#-I}" mingw 166 | set x "$@" -I"$file" 167 | shift 168 | ;; 169 | -l) 170 | eat=1 171 | func_cl_dashl "$2" 172 | set x "$@" "$lib" 173 | shift 174 | ;; 175 | -l*) 176 | func_cl_dashl "${1#-l}" 177 | set x "$@" "$lib" 178 | shift 179 | ;; 180 | -L) 181 | eat=1 182 | func_cl_dashL "$2" 183 | ;; 184 | -L*) 185 | func_cl_dashL "${1#-L}" 186 | ;; 187 | -static) 188 | shared=false 189 | ;; 190 | -Wl,*) 191 | arg=${1#-Wl,} 192 | save_ifs="$IFS"; IFS=',' 193 | for flag in $arg; do 194 | IFS="$save_ifs" 195 | linker_opts="$linker_opts $flag" 196 | done 197 | IFS="$save_ifs" 198 | ;; 199 | -Xlinker) 200 | eat=1 201 | linker_opts="$linker_opts $2" 202 | ;; 203 | -*) 204 | set x "$@" "$1" 205 | shift 206 | ;; 207 | *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) 208 | func_file_conv "$1" 209 | set x "$@" -Tp"$file" 210 | shift 211 | ;; 212 | *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) 213 | func_file_conv "$1" mingw 214 | set x "$@" "$file" 215 | shift 216 | ;; 217 | *) 218 | set x "$@" "$1" 219 | shift 220 | ;; 221 | esac 222 | fi 223 | shift 224 | done 225 | if test -n "$linker_opts"; then 226 | linker_opts="-link$linker_opts" 227 | fi 228 | exec "$@" $linker_opts 229 | exit 1 230 | } 231 | 232 | eat= 233 | 234 | case $1 in 235 | '') 236 | echo "$0: No command. Try '$0 --help' for more information." 1>&2 237 | exit 1; 238 | ;; 239 | -h | --h*) 240 | cat <<\EOF 241 | Usage: compile [--help] [--version] PROGRAM [ARGS] 242 | 243 | Wrapper for compilers which do not understand '-c -o'. 244 | Remove '-o dest.o' from ARGS, run PROGRAM with the remaining 245 | arguments, and rename the output as expected. 246 | 247 | If you are trying to build a whole package this is not the 248 | right script to run: please start by reading the file 'INSTALL'. 249 | 250 | Report bugs to . 251 | EOF 252 | exit $? 253 | ;; 254 | -v | --v*) 255 | echo "compile $scriptversion" 256 | exit $? 257 | ;; 258 | cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ 259 | icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) 260 | func_cl_wrapper "$@" # Doesn't return... 261 | ;; 262 | esac 263 | 264 | ofile= 265 | cfile= 266 | 267 | for arg 268 | do 269 | if test -n "$eat"; then 270 | eat= 271 | else 272 | case $1 in 273 | -o) 274 | # configure might choose to run compile as 'compile cc -o foo foo.c'. 275 | # So we strip '-o arg' only if arg is an object. 276 | eat=1 277 | case $2 in 278 | *.o | *.obj) 279 | ofile=$2 280 | ;; 281 | *) 282 | set x "$@" -o "$2" 283 | shift 284 | ;; 285 | esac 286 | ;; 287 | *.c) 288 | cfile=$1 289 | set x "$@" "$1" 290 | shift 291 | ;; 292 | *) 293 | set x "$@" "$1" 294 | shift 295 | ;; 296 | esac 297 | fi 298 | shift 299 | done 300 | 301 | if test -z "$ofile" || test -z "$cfile"; then 302 | # If no '-o' option was seen then we might have been invoked from a 303 | # pattern rule where we don't need one. That is ok -- this is a 304 | # normal compilation that the losing compiler can handle. If no 305 | # '.c' file was seen then we are probably linking. That is also 306 | # ok. 307 | exec "$@" 308 | fi 309 | 310 | # Name of file we expect compiler to create. 311 | cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` 312 | 313 | # Create the lock directory. 314 | # Note: use '[/\\:.-]' here to ensure that we don't use the same name 315 | # that we are using for the .o file. Also, base the name on the expected 316 | # object file name, since that is what matters with a parallel build. 317 | lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d 318 | while true; do 319 | if mkdir "$lockdir" >/dev/null 2>&1; then 320 | break 321 | fi 322 | sleep 1 323 | done 324 | # FIXME: race condition here if user kills between mkdir and trap. 325 | trap "rmdir '$lockdir'; exit 1" 1 2 15 326 | 327 | # Run the compile. 328 | "$@" 329 | ret=$? 330 | 331 | if test -f "$cofile"; then 332 | test "$cofile" = "$ofile" || mv "$cofile" "$ofile" 333 | elif test -f "${cofile}bj"; then 334 | test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" 335 | fi 336 | 337 | rmdir "$lockdir" 338 | exit $ret 339 | 340 | # Local Variables: 341 | # mode: shell-script 342 | # sh-indentation: 2 343 | # eval: (add-hook 'before-save-hook 'time-stamp) 344 | # time-stamp-start: "scriptversion=" 345 | # time-stamp-format: "%:y-%02m-%02d.%02H" 346 | # time-stamp-time-zone: "UTC0" 347 | # time-stamp-end: "; # UTC" 348 | # End: 349 | -------------------------------------------------------------------------------- /build-aux/mdate-sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Get modification time of a file or directory and pretty-print it. 3 | 4 | scriptversion=2010-08-21.06; # UTC 5 | 6 | # Copyright (C) 1995-2013 Free Software Foundation, Inc. 7 | # written by Ulrich Drepper , June 1995 8 | # 9 | # This program is free software; you can redistribute it and/or modify 10 | # it under the terms of the GNU General Public License as published by 11 | # the Free Software Foundation; either version 2, or (at your option) 12 | # any later version. 13 | # 14 | # This program is distributed in the hope that it will be useful, 15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | # GNU General Public License for more details. 18 | # 19 | # You should have received a copy of the GNU General Public License 20 | # along with this program. If not, see . 21 | 22 | # As a special exception to the GNU General Public License, if you 23 | # distribute this file as part of a program that contains a 24 | # configuration script generated by Autoconf, you may include it under 25 | # the same distribution terms that you use for the rest of that program. 26 | 27 | # This file is maintained in Automake, please report 28 | # bugs to or send patches to 29 | # . 30 | 31 | if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 32 | emulate sh 33 | NULLCMD=: 34 | # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 35 | # is contrary to our usage. Disable this feature. 36 | alias -g '${1+"$@"}'='"$@"' 37 | setopt NO_GLOB_SUBST 38 | fi 39 | 40 | case $1 in 41 | '') 42 | echo "$0: No file. Try '$0 --help' for more information." 1>&2 43 | exit 1; 44 | ;; 45 | -h | --h*) 46 | cat <<\EOF 47 | Usage: mdate-sh [--help] [--version] FILE 48 | 49 | Pretty-print the modification day of FILE, in the format: 50 | 1 January 1970 51 | 52 | Report bugs to . 53 | EOF 54 | exit $? 55 | ;; 56 | -v | --v*) 57 | echo "mdate-sh $scriptversion" 58 | exit $? 59 | ;; 60 | esac 61 | 62 | error () 63 | { 64 | echo "$0: $1" >&2 65 | exit 1 66 | } 67 | 68 | 69 | # Prevent date giving response in another language. 70 | LANG=C 71 | export LANG 72 | LC_ALL=C 73 | export LC_ALL 74 | LC_TIME=C 75 | export LC_TIME 76 | 77 | # GNU ls changes its time format in response to the TIME_STYLE 78 | # variable. Since we cannot assume 'unset' works, revert this 79 | # variable to its documented default. 80 | if test "${TIME_STYLE+set}" = set; then 81 | TIME_STYLE=posix-long-iso 82 | export TIME_STYLE 83 | fi 84 | 85 | save_arg1=$1 86 | 87 | # Find out how to get the extended ls output of a file or directory. 88 | if ls -L /dev/null 1>/dev/null 2>&1; then 89 | ls_command='ls -L -l -d' 90 | else 91 | ls_command='ls -l -d' 92 | fi 93 | # Avoid user/group names that might have spaces, when possible. 94 | if ls -n /dev/null 1>/dev/null 2>&1; then 95 | ls_command="$ls_command -n" 96 | fi 97 | 98 | # A 'ls -l' line looks as follows on OS/2. 99 | # drwxrwx--- 0 Aug 11 2001 foo 100 | # This differs from Unix, which adds ownership information. 101 | # drwxrwx--- 2 root root 4096 Aug 11 2001 foo 102 | # 103 | # To find the date, we split the line on spaces and iterate on words 104 | # until we find a month. This cannot work with files whose owner is a 105 | # user named "Jan", or "Feb", etc. However, it's unlikely that '/' 106 | # will be owned by a user whose name is a month. So we first look at 107 | # the extended ls output of the root directory to decide how many 108 | # words should be skipped to get the date. 109 | 110 | # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. 111 | set x`$ls_command /` 112 | 113 | # Find which argument is the month. 114 | month= 115 | command= 116 | until test $month 117 | do 118 | test $# -gt 0 || error "failed parsing '$ls_command /' output" 119 | shift 120 | # Add another shift to the command. 121 | command="$command shift;" 122 | case $1 in 123 | Jan) month=January; nummonth=1;; 124 | Feb) month=February; nummonth=2;; 125 | Mar) month=March; nummonth=3;; 126 | Apr) month=April; nummonth=4;; 127 | May) month=May; nummonth=5;; 128 | Jun) month=June; nummonth=6;; 129 | Jul) month=July; nummonth=7;; 130 | Aug) month=August; nummonth=8;; 131 | Sep) month=September; nummonth=9;; 132 | Oct) month=October; nummonth=10;; 133 | Nov) month=November; nummonth=11;; 134 | Dec) month=December; nummonth=12;; 135 | esac 136 | done 137 | 138 | test -n "$month" || error "failed parsing '$ls_command /' output" 139 | 140 | # Get the extended ls output of the file or directory. 141 | set dummy x`eval "$ls_command \"\\\$save_arg1\""` 142 | 143 | # Remove all preceding arguments 144 | eval $command 145 | 146 | # Because of the dummy argument above, month is in $2. 147 | # 148 | # On a POSIX system, we should have 149 | # 150 | # $# = 5 151 | # $1 = file size 152 | # $2 = month 153 | # $3 = day 154 | # $4 = year or time 155 | # $5 = filename 156 | # 157 | # On Darwin 7.7.0 and 7.6.0, we have 158 | # 159 | # $# = 4 160 | # $1 = day 161 | # $2 = month 162 | # $3 = year or time 163 | # $4 = filename 164 | 165 | # Get the month. 166 | case $2 in 167 | Jan) month=January; nummonth=1;; 168 | Feb) month=February; nummonth=2;; 169 | Mar) month=March; nummonth=3;; 170 | Apr) month=April; nummonth=4;; 171 | May) month=May; nummonth=5;; 172 | Jun) month=June; nummonth=6;; 173 | Jul) month=July; nummonth=7;; 174 | Aug) month=August; nummonth=8;; 175 | Sep) month=September; nummonth=9;; 176 | Oct) month=October; nummonth=10;; 177 | Nov) month=November; nummonth=11;; 178 | Dec) month=December; nummonth=12;; 179 | esac 180 | 181 | case $3 in 182 | ???*) day=$1;; 183 | *) day=$3; shift;; 184 | esac 185 | 186 | # Here we have to deal with the problem that the ls output gives either 187 | # the time of day or the year. 188 | case $3 in 189 | *:*) set `date`; eval year=\$$# 190 | case $2 in 191 | Jan) nummonthtod=1;; 192 | Feb) nummonthtod=2;; 193 | Mar) nummonthtod=3;; 194 | Apr) nummonthtod=4;; 195 | May) nummonthtod=5;; 196 | Jun) nummonthtod=6;; 197 | Jul) nummonthtod=7;; 198 | Aug) nummonthtod=8;; 199 | Sep) nummonthtod=9;; 200 | Oct) nummonthtod=10;; 201 | Nov) nummonthtod=11;; 202 | Dec) nummonthtod=12;; 203 | esac 204 | # For the first six month of the year the time notation can also 205 | # be used for files modified in the last year. 206 | if (expr $nummonth \> $nummonthtod) > /dev/null; 207 | then 208 | year=`expr $year - 1` 209 | fi;; 210 | *) year=$3;; 211 | esac 212 | 213 | # The result. 214 | echo $day $month $year 215 | 216 | # Local Variables: 217 | # mode: shell-script 218 | # sh-indentation: 2 219 | # eval: (add-hook 'write-file-hooks 'time-stamp) 220 | # time-stamp-start: "scriptversion=" 221 | # time-stamp-format: "%:y-%02m-%02d.%02H" 222 | # time-stamp-time-zone: "UTC" 223 | # time-stamp-end: "; # UTC" 224 | # End: 225 | -------------------------------------------------------------------------------- /build-aux/missing: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | # Common wrapper for a few potentially missing GNU programs. 3 | 4 | scriptversion=2013-10-28.13; # UTC 5 | 6 | # Copyright (C) 1996-2013 Free Software Foundation, Inc. 7 | # Originally written by Fran,cois Pinard , 1996. 8 | 9 | # This program is free software; you can redistribute it and/or modify 10 | # it under the terms of the GNU General Public License as published by 11 | # the Free Software Foundation; either version 2, or (at your option) 12 | # any later version. 13 | 14 | # This program is distributed in the hope that it will be useful, 15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | # GNU General Public License for more details. 18 | 19 | # You should have received a copy of the GNU General Public License 20 | # along with this program. If not, see . 21 | 22 | # As a special exception to the GNU General Public License, if you 23 | # distribute this file as part of a program that contains a 24 | # configuration script generated by Autoconf, you may include it under 25 | # the same distribution terms that you use for the rest of that program. 26 | 27 | if test $# -eq 0; then 28 | echo 1>&2 "Try '$0 --help' for more information" 29 | exit 1 30 | fi 31 | 32 | case $1 in 33 | 34 | --is-lightweight) 35 | # Used by our autoconf macros to check whether the available missing 36 | # script is modern enough. 37 | exit 0 38 | ;; 39 | 40 | --run) 41 | # Back-compat with the calling convention used by older automake. 42 | shift 43 | ;; 44 | 45 | -h|--h|--he|--hel|--help) 46 | echo "\ 47 | $0 [OPTION]... PROGRAM [ARGUMENT]... 48 | 49 | Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due 50 | to PROGRAM being missing or too old. 51 | 52 | Options: 53 | -h, --help display this help and exit 54 | -v, --version output version information and exit 55 | 56 | Supported PROGRAM values: 57 | aclocal autoconf autoheader autom4te automake makeinfo 58 | bison yacc flex lex help2man 59 | 60 | Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 61 | 'g' are ignored when checking the name. 62 | 63 | Send bug reports to ." 64 | exit $? 65 | ;; 66 | 67 | -v|--v|--ve|--ver|--vers|--versi|--versio|--version) 68 | echo "missing $scriptversion (GNU Automake)" 69 | exit $? 70 | ;; 71 | 72 | -*) 73 | echo 1>&2 "$0: unknown '$1' option" 74 | echo 1>&2 "Try '$0 --help' for more information" 75 | exit 1 76 | ;; 77 | 78 | esac 79 | 80 | # Run the given program, remember its exit status. 81 | "$@"; st=$? 82 | 83 | # If it succeeded, we are done. 84 | test $st -eq 0 && exit 0 85 | 86 | # Also exit now if we it failed (or wasn't found), and '--version' was 87 | # passed; such an option is passed most likely to detect whether the 88 | # program is present and works. 89 | case $2 in --version|--help) exit $st;; esac 90 | 91 | # Exit code 63 means version mismatch. This often happens when the user 92 | # tries to use an ancient version of a tool on a file that requires a 93 | # minimum version. 94 | if test $st -eq 63; then 95 | msg="probably too old" 96 | elif test $st -eq 127; then 97 | # Program was missing. 98 | msg="missing on your system" 99 | else 100 | # Program was found and executed, but failed. Give up. 101 | exit $st 102 | fi 103 | 104 | perl_URL=https://www.perl.org/ 105 | flex_URL=http://flex.sourceforge.net/ 106 | gnu_software_URL=https://www.gnu.org/software 107 | 108 | program_details () 109 | { 110 | case $1 in 111 | aclocal|automake) 112 | echo "The '$1' program is part of the GNU Automake package:" 113 | echo "<$gnu_software_URL/automake>" 114 | echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" 115 | echo "<$gnu_software_URL/autoconf>" 116 | echo "<$gnu_software_URL/m4/>" 117 | echo "<$perl_URL>" 118 | ;; 119 | autoconf|autom4te|autoheader) 120 | echo "The '$1' program is part of the GNU Autoconf package:" 121 | echo "<$gnu_software_URL/autoconf/>" 122 | echo "It also requires GNU m4 and Perl in order to run:" 123 | echo "<$gnu_software_URL/m4/>" 124 | echo "<$perl_URL>" 125 | ;; 126 | esac 127 | } 128 | 129 | give_advice () 130 | { 131 | # Normalize program name to check for. 132 | normalized_program=`echo "$1" | sed ' 133 | s/^gnu-//; t 134 | s/^gnu//; t 135 | s/^g//; t'` 136 | 137 | printf '%s\n' "'$1' is $msg." 138 | 139 | configure_deps="'configure.ac' or m4 files included by 'configure.ac'" 140 | case $normalized_program in 141 | autoconf*) 142 | echo "You should only need it if you modified 'configure.ac'," 143 | echo "or m4 files included by it." 144 | program_details 'autoconf' 145 | ;; 146 | autoheader*) 147 | echo "You should only need it if you modified 'acconfig.h' or" 148 | echo "$configure_deps." 149 | program_details 'autoheader' 150 | ;; 151 | automake*) 152 | echo "You should only need it if you modified 'Makefile.am' or" 153 | echo "$configure_deps." 154 | program_details 'automake' 155 | ;; 156 | aclocal*) 157 | echo "You should only need it if you modified 'acinclude.m4' or" 158 | echo "$configure_deps." 159 | program_details 'aclocal' 160 | ;; 161 | autom4te*) 162 | echo "You might have modified some maintainer files that require" 163 | echo "the 'autom4te' program to be rebuilt." 164 | program_details 'autom4te' 165 | ;; 166 | bison*|yacc*) 167 | echo "You should only need it if you modified a '.y' file." 168 | echo "You may want to install the GNU Bison package:" 169 | echo "<$gnu_software_URL/bison/>" 170 | ;; 171 | lex*|flex*) 172 | echo "You should only need it if you modified a '.l' file." 173 | echo "You may want to install the Fast Lexical Analyzer package:" 174 | echo "<$flex_URL>" 175 | ;; 176 | help2man*) 177 | echo "You should only need it if you modified a dependency" \ 178 | "of a man page." 179 | echo "You may want to install the GNU Help2man package:" 180 | echo "<$gnu_software_URL/help2man/>" 181 | ;; 182 | makeinfo*) 183 | echo "You should only need it if you modified a '.texi' file, or" 184 | echo "any other file indirectly affecting the aspect of the manual." 185 | echo "You might want to install the Texinfo package:" 186 | echo "<$gnu_software_URL/texinfo/>" 187 | echo "The spurious makeinfo call might also be the consequence of" 188 | echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" 189 | echo "want to install GNU make:" 190 | echo "<$gnu_software_URL/make/>" 191 | ;; 192 | *) 193 | echo "You might have modified some files without having the proper" 194 | echo "tools for further handling them. Check the 'README' file, it" 195 | echo "often tells you about the needed prerequisites for installing" 196 | echo "this package. You may also peek at any GNU archive site, in" 197 | echo "case some other package contains this missing '$1' program." 198 | ;; 199 | esac 200 | } 201 | 202 | give_advice "$1" | sed -e '1s/^/WARNING: /' \ 203 | -e '2,$s/^/ /' >&2 204 | 205 | # Propagate the correct exit status (expected to be 127 for a program 206 | # not found, 63 for a program that failed due to version mismatch). 207 | exit $st 208 | 209 | # Local variables: 210 | # eval: (add-hook 'write-file-hooks 'time-stamp) 211 | # time-stamp-start: "scriptversion=" 212 | # time-stamp-format: "%:y-%02m-%02d.%02H" 213 | # time-stamp-time-zone: "UTC" 214 | # time-stamp-end: "; # UTC" 215 | # End: 216 | -------------------------------------------------------------------------------- /build-aux/mkinstalldirs: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | # mkinstalldirs --- make directory hierarchy 3 | 4 | scriptversion=2006-05-11.19 5 | 6 | # Original author: Noah Friedman 7 | # Created: 1993-05-16 8 | # Public domain. 9 | # 10 | # This file is maintained in Automake, please report 11 | # bugs to or send patches to 12 | # . 13 | 14 | nl=' 15 | ' 16 | IFS=" "" $nl" 17 | errstatus=0 18 | dirmode= 19 | 20 | usage="\ 21 | Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... 22 | 23 | Create each directory DIR (with mode MODE, if specified), including all 24 | leading file name components. 25 | 26 | Report bugs to ." 27 | 28 | # process command line arguments 29 | while test $# -gt 0 ; do 30 | case $1 in 31 | -h | --help | --h*) # -h for help 32 | echo "$usage" 33 | exit $? 34 | ;; 35 | -m) # -m PERM arg 36 | shift 37 | test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 38 | dirmode=$1 39 | shift 40 | ;; 41 | --version) 42 | echo "$0 $scriptversion" 43 | exit $? 44 | ;; 45 | --) # stop option processing 46 | shift 47 | break 48 | ;; 49 | -*) # unknown option 50 | echo "$usage" 1>&2 51 | exit 1 52 | ;; 53 | *) # first non-opt arg 54 | break 55 | ;; 56 | esac 57 | done 58 | 59 | for file 60 | do 61 | if test -d "$file"; then 62 | shift 63 | else 64 | break 65 | fi 66 | done 67 | 68 | case $# in 69 | 0) exit 0 ;; 70 | esac 71 | 72 | # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and 73 | # mkdir -p a/c at the same time, both will detect that a is missing, 74 | # one will create a, then the other will try to create a and die with 75 | # a "File exists" error. This is a problem when calling mkinstalldirs 76 | # from a parallel make. We use --version in the probe to restrict 77 | # ourselves to GNU mkdir, which is thread-safe. 78 | case $dirmode in 79 | '') 80 | if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then 81 | echo "mkdir -p -- $*" 82 | exec mkdir -p -- "$@" 83 | else 84 | # On NextStep and OpenStep, the `mkdir' command does not 85 | # recognize any option. It will interpret all options as 86 | # directories to create, and then abort because `.' already 87 | # exists. 88 | test -d ./-p && rmdir ./-p 89 | test -d ./--version && rmdir ./--version 90 | fi 91 | ;; 92 | *) 93 | if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && 94 | test ! -d ./--version; then 95 | echo "mkdir -m $dirmode -p -- $*" 96 | exec mkdir -m "$dirmode" -p -- "$@" 97 | else 98 | # Clean up after NextStep and OpenStep mkdir. 99 | for d in ./-m ./-p ./--version "./$dirmode"; 100 | do 101 | test -d $d && rmdir $d 102 | done 103 | fi 104 | ;; 105 | esac 106 | 107 | for file 108 | do 109 | case $file in 110 | /*) pathcomp=/ ;; 111 | *) pathcomp= ;; 112 | esac 113 | oIFS=$IFS 114 | IFS=/ 115 | set fnord $file 116 | shift 117 | IFS=$oIFS 118 | 119 | for d 120 | do 121 | test "x$d" = x && continue 122 | 123 | pathcomp=$pathcomp$d 124 | case $pathcomp in 125 | -*) pathcomp=./$pathcomp ;; 126 | esac 127 | 128 | if test ! -d "$pathcomp"; then 129 | echo "mkdir $pathcomp" 130 | 131 | mkdir "$pathcomp" || lasterr=$? 132 | 133 | if test ! -d "$pathcomp"; then 134 | errstatus=$lasterr 135 | else 136 | if test ! -z "$dirmode"; then 137 | echo "chmod $dirmode $pathcomp" 138 | lasterr= 139 | chmod "$dirmode" "$pathcomp" || lasterr=$? 140 | 141 | if test ! -z "$lasterr"; then 142 | errstatus=$lasterr 143 | fi 144 | fi 145 | fi 146 | fi 147 | 148 | pathcomp=$pathcomp/ 149 | done 150 | done 151 | 152 | exit $errstatus 153 | 154 | # Local Variables: 155 | # mode: shell-script 156 | # sh-indentation: 2 157 | # eval: (add-hook 'write-file-hooks 'time-stamp) 158 | # time-stamp-start: "scriptversion=" 159 | # time-stamp-format: "%:y-%02m-%02d.%02H" 160 | # time-stamp-end: "$" 161 | # End: 162 | -------------------------------------------------------------------------------- /doc/Makefile.am: -------------------------------------------------------------------------------- 1 | # doc - Automake template 2 | # Copyright (C) 2007 g10 Code GmbH 3 | # 4 | # This file is free software; as a special exception the author gives 5 | # unlimited permission to copy and/or distribute it, with or without 6 | # modifications, as long as this notice is preserved. 7 | # 8 | # This program is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 10 | # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | 12 | ## Process this file with automake to produce Makefile.in 13 | 14 | DISTCLEANFILES = gpgex.cps 15 | 16 | info_TEXINFOS = gpgex.texi 17 | gpgex_TEXINFOS = gpl.texi 18 | 19 | dist_doc_DATA = gpgex-en.html gpgex-de.html 20 | -------------------------------------------------------------------------------- /doc/gpgex-de.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Hilfe für die GnuPG Shell Extension (GpgEX) 6 | 7 | 8 |

GnuPG Shell Extension

9 |

10 | (Verfügbare Sprachen: English, Deutsch) 11 |

12 |

13 | Die GNU Privacy Guard Erweiterungen für die Windows Explorer 14 | Umgebung erlaubt es ihnen, kryptographische Funktionen in 15 | Kleopatra über die Kontext-Menüs von Dateien aufzurufen. 16 |

17 |

Befehle

18 |

Entschlüsseln und überprüfen, Entschlüsseln, Überprüfen

19 |

20 | Entschlüsselt und/oder überprüft die ausgewählten Dateien. 21 | FIXME: Einen Link zur Gpg4win Dokumentation für die 22 | Entschlüssel- und Verifizier-Funktionen einbauen. 23 |

24 |

Signieren und verschlüsseln, Signieren, Verschlüsseln

25 |

26 | Signiert und/oder verschlüsselt die ausgewählten Dateien. 27 | FIXME: Einen Link zur Gpg4win Dokumentation für die 28 | Verschlüssel- und Signier-Funktionen einbauen. 29 |

30 |

Zertifikate importieren

31 |

32 | Import die Zertifikate in den ausgewählten Dateien. 33 |

34 |

Hilfe zu GpgEX

35 |

36 | Stellt diese Hilfe dar. 37 |

38 |

Über GpgEX

39 |

40 | Zeigt die Version von GpgEX an. 41 |

42 | 43 |

Debugging

44 |

45 | Falls nicht auf die GnuPG Benutzerschnittstelle zugegriffen werden kann, wird ein 46 | Nachrichtenfenster mit einer Fehlermeldung angezeigt. Um mehr 47 | Informationen zu erhalten, kann der Fehlerbericht von Kleopatra 48 | oder GPA eingesehen werden (Anleitung siehe Gpg4win-Kompendium), 49 | oder es kann eine GpgEX-Diagnosedatei angegeben werden. Dazu 50 | im Registrierungs-Editor den Schlüssel 51 | HKLM\Software\GNU\GnuPG 52 | auswählen, eine neue "Zeichenfolge" mit dem Namen GpgEX 53 | Debug File anlegen und als Wert einen Dateinamen 54 | (z.B. c:\temp\gpgex-debug-file.log) 55 | angeben. Informationen zum Protokoll werden dann nach einem 56 | Neustart von Windows an diese Datei angehangen. 57 |

58 |

Hinweis

59 |

60 | Mehr Informationen und aktuelle Programmversionen sind auf der 61 | Gpg4win Webpräsenz 62 | verfügbar. 63 |

64 | 65 | 66 | -------------------------------------------------------------------------------- /doc/gpgex-en.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Help for GnuPG Shell Extension (GpgEX) 6 | 7 | 8 |

GnuPG Shell Extension

9 |

10 | (Available languages: English, Deutsch) 11 |

12 |

13 | The GNU Privacy Guard extensions for the Windows Explorer shell 14 | allow you to access cryptographic functions of the GnuPG user 15 | interface using the context menu to files. 16 |

17 |

Commands

18 |

Decrypt and verify, Decrypt, Verify

19 |

20 | Decrypt and/or verify the selected files. FIXME: Add a link 21 | to the Gpg4win documentation for the decrypt and verify 22 | functions. 23 |

24 |

Encrypt and sign, Encrypt, Sign

25 |

26 | Encrypt and/or sign the selected files. FIXME: Add a link to the 27 | Gpg4win documentation for the sign and encrypt 28 | functions. 29 |

30 |

Import keys

31 |

32 | Import certificates in the selected files. FIXME: Add a link to the 33 | Gpg4win documentation for the import function. 34 |

35 |

Help on GpgEX

36 |

37 | Display this help. 38 |

39 |

About GpgEX

40 |

41 | Display the version number. 42 |

43 | 44 |

Debugging

45 |

46 | If the GnuPG user interface (either GPA or Kleopatra) can not be 47 | accessed, a message box with an error message will be displayed. 48 | To get more information, you can either check the error log, or 49 | specify a debug file: Select the 50 | key HKLM\Software\GNU\GnuPG 51 | in the registry editor, create a new string value with the name 52 | GpgEX Debug File and the value of the debug filename 53 | (e.g. c:\temp\gpgex-debug-file.log). To this file 54 | logging information is appended, after a restart if necessary. 55 |

56 |

Reference

57 |

58 | Please find more information and new software versions at 59 | the Gpg4win website. 60 |

61 | 62 | 63 | -------------------------------------------------------------------------------- /doc/gpgex.texi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpg/gpgex/2ea0a9c911d62d15c9fb1b1844d432c4f28bf329/doc/gpgex.texi -------------------------------------------------------------------------------- /m4/Makefile.am: -------------------------------------------------------------------------------- 1 | EXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 \ 2 | inttypes-pri.m4 inttypes.m4 inttypes_h.m4 isc-posix.m4 \ 3 | lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 \ 4 | po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 5 | -------------------------------------------------------------------------------- /m4/codeset.m4: -------------------------------------------------------------------------------- 1 | # codeset.m4 serial AM1 (gettext-0.10.40) 2 | dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Bruno Haible. 10 | 11 | AC_DEFUN([AM_LANGINFO_CODESET], 12 | [ 13 | AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, 14 | [AC_TRY_LINK([#include ], 15 | [char* cs = nl_langinfo(CODESET);], 16 | am_cv_langinfo_codeset=yes, 17 | am_cv_langinfo_codeset=no) 18 | ]) 19 | if test $am_cv_langinfo_codeset = yes; then 20 | AC_DEFINE(HAVE_LANGINFO_CODESET, 1, 21 | [Define if you have and nl_langinfo(CODESET).]) 22 | fi 23 | ]) 24 | -------------------------------------------------------------------------------- /m4/glibc21.m4: -------------------------------------------------------------------------------- 1 | # glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) 2 | dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | # Test for the GNU C Library, version 2.1 or newer. 10 | # From Bruno Haible. 11 | 12 | AC_DEFUN([jm_GLIBC21], 13 | [ 14 | AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, 15 | ac_cv_gnu_library_2_1, 16 | [AC_EGREP_CPP([Lucky GNU user], 17 | [ 18 | #include 19 | #ifdef __GNU_LIBRARY__ 20 | #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) 21 | Lucky GNU user 22 | #endif 23 | #endif 24 | ], 25 | ac_cv_gnu_library_2_1=yes, 26 | ac_cv_gnu_library_2_1=no) 27 | ] 28 | ) 29 | AC_SUBST(GLIBC21) 30 | GLIBC21="$ac_cv_gnu_library_2_1" 31 | ] 32 | ) 33 | -------------------------------------------------------------------------------- /m4/gpg-error.m4: -------------------------------------------------------------------------------- 1 | # gpg-error.m4 - autoconf macro to detect libgpg-error. 2 | # Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018, 2020, 2021, 2022, 2024 3 | # g10 Code GmbH 4 | # 5 | # This file is free software; as a special exception the author gives 6 | # unlimited permission to copy and/or distribute it, with or without 7 | # modifications, as long as this notice is preserved. 8 | # 9 | # This file is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 11 | # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # 13 | # Last-changed: 2024-06-13 14 | 15 | dnl 16 | dnl Find gpg-error-config, for backward compatibility 17 | dnl 18 | dnl _AM_PATH_POSSIBLE_GPG_ERROR_CONFIG 19 | AC_DEFUN([_AM_PATH_POSSIBLE_GPG_ERROR_CONFIG],[dnl 20 | gpg_error_config_prefix="" 21 | dnl --with-libgpg-error-prefix=PFX is the preferred name for this option, 22 | dnl since that is consistent with how our three siblings use the directory/ 23 | dnl package name in --with-$dir_name-prefix=PFX. 24 | AC_ARG_WITH(libgpg-error-prefix, 25 | AS_HELP_STRING([--with-libgpg-error-prefix=PFX], 26 | [prefix where GPG Error is installed (optional)]), 27 | [gpg_error_config_prefix="$withval"]) 28 | 29 | dnl Accept --with-gpg-error-prefix and make it work the same as 30 | dnl --with-libgpg-error-prefix above, for backwards compatibility, 31 | dnl but do not document this old, inconsistently-named option. 32 | AC_ARG_WITH(gpg-error-prefix,, 33 | [gpg_error_config_prefix="$withval"]) 34 | 35 | if test x"${GPG_ERROR_CONFIG}" = x ; then 36 | if test x"${gpg_error_config_prefix}" != x ; then 37 | GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config" 38 | else 39 | case "${SYSROOT}" in 40 | /*) 41 | if test -x "${SYSROOT}/bin/gpg-error-config" ; then 42 | GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config" 43 | fi 44 | ;; 45 | '') 46 | ;; 47 | *) 48 | AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.]) 49 | ;; 50 | esac 51 | fi 52 | fi 53 | 54 | AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no) 55 | ]) 56 | 57 | dnl 58 | dnl Find gpgrt-config, which uses .pc file 59 | dnl (minimum pkg-config functionality, supporting cross build) 60 | dnl 61 | dnl _AM_PATH_GPGRT_CONFIG 62 | AC_DEFUN([_AM_PATH_GPGRT_CONFIG],[dnl 63 | AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no, [$prefix/bin:$PATH]) 64 | if test "$GPGRT_CONFIG" != "no"; then 65 | # Determine gpgrt_libdir 66 | # 67 | # Get the prefix of gpgrt-config assuming it's something like: 68 | # /bin/gpgrt-config 69 | gpgrt_prefix=${GPGRT_CONFIG%/*/*} 70 | possible_libdir1=${gpgrt_prefix}/lib 71 | # Determine by using system libdir-format with CC, it's like: 72 | # Normal style: /usr/lib 73 | # GNU cross style: /usr//lib 74 | # Debian style: /usr/lib/ 75 | # Fedora/openSUSE style: /usr/lib, /usr/lib32 or /usr/lib64 76 | # It is assumed that CC is specified to the one of host on cross build. 77 | if libdir_candidates=$(${CC:-cc} -print-search-dirs | \ 78 | sed -n -e "/^libraries/{s/libraries: =//;s/:/\\ 79 | /g;p;}"); then 80 | # From the output of -print-search-dirs, select valid pkgconfig dirs. 81 | libdir_candidates=$(for dir in $libdir_candidates; do 82 | if p=$(cd $dir 2>/dev/null && pwd); then 83 | test -d "$p/pkgconfig" && echo $p; 84 | fi 85 | done) 86 | 87 | for possible_libdir0 in $libdir_candidates; do 88 | # possible_libdir0: 89 | # Fallback candidate, the one of system-installed (by $CC) 90 | # (/usr//lib, /usr/lib/ or /usr/lib32) 91 | # possible_libdir1: 92 | # Another candidate, user-locally-installed 93 | # (/lib) 94 | # possible_libdir2 95 | # Most preferred 96 | # (//lib, 97 | # /lib/ or /lib32) 98 | if test "${possible_libdir0##*/}" = "lib"; then 99 | possible_prefix0=${possible_libdir0%/lib} 100 | possible_prefix0_triplet=${possible_prefix0##*/} 101 | if test -z "$possible_prefix0_triplet"; then 102 | continue 103 | fi 104 | possible_libdir2=${gpgrt_prefix}/$possible_prefix0_triplet/lib 105 | else 106 | possible_prefix0=${possible_libdir0%%/lib*} 107 | possible_libdir2=${gpgrt_prefix}${possible_libdir0#$possible_prefix0} 108 | fi 109 | if test -f ${possible_libdir2}/pkgconfig/gpg-error.pc; then 110 | gpgrt_libdir=${possible_libdir2} 111 | elif test -f ${possible_libdir1}/pkgconfig/gpg-error.pc; then 112 | gpgrt_libdir=${possible_libdir1} 113 | elif test -f ${possible_libdir0}/pkgconfig/gpg-error.pc; then 114 | gpgrt_libdir=${possible_libdir0} 115 | fi 116 | if test -n "$gpgrt_libdir"; then break; fi 117 | done 118 | fi 119 | if test -z "$gpgrt_libdir"; then 120 | # No valid pkgconfig dir in any of the system directories, fallback 121 | gpgrt_libdir=${possible_libdir1} 122 | fi 123 | else 124 | unset GPGRT_CONFIG 125 | fi 126 | 127 | if test -n "$gpgrt_libdir"; then 128 | # Add the --libdir option to GPGRT_CONFIG 129 | GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir" 130 | # Make sure if gpgrt-config really works, by testing config gpg-error 131 | if ! $GPGRT_CONFIG gpg-error --exists; then 132 | # If it doesn't work, clear the GPGRT_CONFIG variable. 133 | unset GPGRT_CONFIG 134 | fi 135 | else 136 | # GPGRT_CONFIG found but no suitable dir for --libdir found. 137 | # This is a failure. Clear the GPGRT_CONFIG variable. 138 | unset GPGRT_CONFIG 139 | fi 140 | ]) 141 | 142 | dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION, 143 | dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) 144 | dnl 145 | dnl Test for libgpg-error and define GPG_ERROR_CFLAGS, GPG_ERROR_LIBS, 146 | dnl GPG_ERROR_MT_CFLAGS, and GPG_ERROR_MT_LIBS. The _MT_ variants are 147 | dnl used for programs requiring real multi thread support. 148 | dnl 149 | dnl If a prefix option is not used, the config script is first 150 | dnl searched in $SYSROOT/bin and then along $PATH. If the used 151 | dnl config script does not match the host specification the script 152 | dnl is added to the gpg_config_script_warn variable. 153 | dnl 154 | AC_DEFUN([AM_PATH_GPG_ERROR], 155 | [ AC_REQUIRE([AC_CANONICAL_HOST])dnl 156 | AC_REQUIRE([_AM_PATH_POSSIBLE_GPG_ERROR_CONFIG])dnl 157 | AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl 158 | if test x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then 159 | GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error" 160 | AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config]) 161 | gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion` 162 | elif test x"$GPG_ERROR_CONFIG" != x -a "$GPG_ERROR_CONFIG" != "no"; then 163 | gpg_error_config_version=`$GPG_ERROR_CONFIG --version` 164 | else 165 | gpg_error_config_version="0.0" 166 | fi 167 | 168 | min_gpg_error_version=ifelse([$1], ,1.33,$1) 169 | ok=no 170 | if test "$GPG_ERROR_CONFIG" != "no"; then 171 | req_major=`echo $min_gpg_error_version | \ 172 | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` 173 | req_minor=`echo $min_gpg_error_version | \ 174 | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` 175 | major=`echo $gpg_error_config_version | \ 176 | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` 177 | minor=`echo $gpg_error_config_version | \ 178 | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` 179 | if test "$major" -gt "$req_major"; then 180 | ok=yes 181 | else 182 | if test "$major" -eq "$req_major"; then 183 | if test "$minor" -ge "$req_minor"; then 184 | ok=yes 185 | fi 186 | fi 187 | fi 188 | fi 189 | AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version) 190 | if test $ok = yes; then 191 | GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG --cflags` 192 | GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG --libs` 193 | if test -z "$GPGRT_CONFIG"; then 194 | GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --mt --cflags 2>/dev/null` 195 | GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --mt --libs 2>/dev/null` 196 | else 197 | GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --variable=mtcflags 2>/dev/null` 198 | GPG_ERROR_MT_CFLAGS="$GPG_ERROR_CFLAGS${GPG_ERROR_CFLAGS:+ }$GPG_ERROR_MT_CFLAGS" 199 | GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --variable=mtlibs 2>/dev/null` 200 | GPG_ERROR_MT_LIBS="$GPG_ERROR_LIBS${GPG_ERROR_LIBS:+ }$GPG_ERROR_MT_LIBS" 201 | fi 202 | AC_MSG_RESULT([yes ($gpg_error_config_version)]) 203 | ifelse([$2], , :, [$2]) 204 | if test -z "$GPGRT_CONFIG"; then 205 | gpg_error_config_host=`$GPG_ERROR_CONFIG --host 2>/dev/null || echo none` 206 | else 207 | gpg_error_config_host=`$GPG_ERROR_CONFIG --variable=host 2>/dev/null || echo none` 208 | fi 209 | if test x"$gpg_error_config_host" != xnone ; then 210 | if test x"$gpg_error_config_host" != x"$host" ; then 211 | AC_MSG_WARN([[ 212 | *** 213 | *** The config script "$GPG_ERROR_CONFIG" was 214 | *** built for $gpg_error_config_host and thus may not match the 215 | *** used host $host. 216 | *** You may want to use the configure option --with-libgpg-error-prefix 217 | *** to specify a matching config script or use \$SYSROOT. 218 | ***]]) 219 | gpg_config_script_warn="$gpg_config_script_warn libgpg-error" 220 | fi 221 | fi 222 | else 223 | GPG_ERROR_CFLAGS="" 224 | GPG_ERROR_LIBS="" 225 | GPG_ERROR_MT_CFLAGS="" 226 | GPG_ERROR_MT_LIBS="" 227 | AC_MSG_RESULT(no) 228 | ifelse([$3], , :, [$3]) 229 | fi 230 | AC_SUBST(GPG_ERROR_CFLAGS) 231 | AC_SUBST(GPG_ERROR_LIBS) 232 | AC_SUBST(GPG_ERROR_MT_CFLAGS) 233 | AC_SUBST(GPG_ERROR_MT_LIBS) 234 | ]) 235 | -------------------------------------------------------------------------------- /m4/iconv.m4: -------------------------------------------------------------------------------- 1 | # iconv.m4 serial AM4 (gettext-0.11.3) 2 | dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Bruno Haible. 10 | 11 | AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], 12 | [ 13 | dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. 14 | AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 15 | AC_REQUIRE([AC_LIB_RPATH]) 16 | 17 | dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV 18 | dnl accordingly. 19 | AC_LIB_LINKFLAGS_BODY([iconv]) 20 | ]) 21 | 22 | AC_DEFUN([AM_ICONV_LINK], 23 | [ 24 | dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and 25 | dnl those with the standalone portable GNU libiconv installed). 26 | 27 | dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV 28 | dnl accordingly. 29 | AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) 30 | 31 | dnl Add $INCICONV to CPPFLAGS before performing the following checks, 32 | dnl because if the user has installed libiconv and not disabled its use 33 | dnl via --without-libiconv-prefix, he wants to use it. The first 34 | dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. 35 | am_save_CPPFLAGS="$CPPFLAGS" 36 | AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) 37 | 38 | AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ 39 | am_cv_func_iconv="no, consider installing GNU libiconv" 40 | am_cv_lib_iconv=no 41 | AC_TRY_LINK([#include 42 | #include ], 43 | [iconv_t cd = iconv_open("",""); 44 | iconv(cd,NULL,NULL,NULL,NULL); 45 | iconv_close(cd);], 46 | am_cv_func_iconv=yes) 47 | if test "$am_cv_func_iconv" != yes; then 48 | am_save_LIBS="$LIBS" 49 | LIBS="$LIBS $LIBICONV" 50 | AC_TRY_LINK([#include 51 | #include ], 52 | [iconv_t cd = iconv_open("",""); 53 | iconv(cd,NULL,NULL,NULL,NULL); 54 | iconv_close(cd);], 55 | am_cv_lib_iconv=yes 56 | am_cv_func_iconv=yes) 57 | LIBS="$am_save_LIBS" 58 | fi 59 | ]) 60 | if test "$am_cv_func_iconv" = yes; then 61 | AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) 62 | fi 63 | if test "$am_cv_lib_iconv" = yes; then 64 | AC_MSG_CHECKING([how to link with libiconv]) 65 | AC_MSG_RESULT([$LIBICONV]) 66 | else 67 | dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV 68 | dnl either. 69 | CPPFLAGS="$am_save_CPPFLAGS" 70 | LIBICONV= 71 | LTLIBICONV= 72 | fi 73 | AC_SUBST(LIBICONV) 74 | AC_SUBST(LTLIBICONV) 75 | ]) 76 | 77 | AC_DEFUN([AM_ICONV], 78 | [ 79 | AM_ICONV_LINK 80 | if test "$am_cv_func_iconv" = yes; then 81 | AC_MSG_CHECKING([for iconv declaration]) 82 | AC_CACHE_VAL(am_cv_proto_iconv, [ 83 | AC_TRY_COMPILE([ 84 | #include 85 | #include 86 | extern 87 | #ifdef __cplusplus 88 | "C" 89 | #endif 90 | #if defined(__STDC__) || defined(__cplusplus) 91 | size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); 92 | #else 93 | size_t iconv(); 94 | #endif 95 | ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") 96 | am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) 97 | am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` 98 | AC_MSG_RESULT([$]{ac_t:- 99 | }[$]am_cv_proto_iconv) 100 | AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, 101 | [Define as const if the declaration of iconv() needs const.]) 102 | fi 103 | ]) 104 | -------------------------------------------------------------------------------- /m4/intdiv0.m4: -------------------------------------------------------------------------------- 1 | # intdiv0.m4 serial 1 (gettext-0.11.3) 2 | dnl Copyright (C) 2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Bruno Haible. 10 | 11 | AC_DEFUN([gt_INTDIV0], 12 | [ 13 | AC_REQUIRE([AC_PROG_CC])dnl 14 | AC_REQUIRE([AC_CANONICAL_HOST])dnl 15 | 16 | AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], 17 | gt_cv_int_divbyzero_sigfpe, 18 | [ 19 | AC_TRY_RUN([ 20 | #include 21 | #include 22 | 23 | static void 24 | #ifdef __cplusplus 25 | sigfpe_handler (int sig) 26 | #else 27 | sigfpe_handler (sig) int sig; 28 | #endif 29 | { 30 | /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ 31 | exit (sig != SIGFPE); 32 | } 33 | 34 | int x = 1; 35 | int y = 0; 36 | int z; 37 | int nan; 38 | 39 | int main () 40 | { 41 | signal (SIGFPE, sigfpe_handler); 42 | /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ 43 | #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) 44 | signal (SIGTRAP, sigfpe_handler); 45 | #endif 46 | /* Linux/SPARC yields signal SIGILL. */ 47 | #if defined (__sparc__) && defined (__linux__) 48 | signal (SIGILL, sigfpe_handler); 49 | #endif 50 | 51 | z = x / y; 52 | nan = y / y; 53 | exit (1); 54 | } 55 | ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, 56 | [ 57 | # Guess based on the CPU. 58 | case "$host_cpu" in 59 | alpha* | i[34567]86 | m68k | s390*) 60 | gt_cv_int_divbyzero_sigfpe="guessing yes";; 61 | *) 62 | gt_cv_int_divbyzero_sigfpe="guessing no";; 63 | esac 64 | ]) 65 | ]) 66 | case "$gt_cv_int_divbyzero_sigfpe" in 67 | *yes) value=1;; 68 | *) value=0;; 69 | esac 70 | AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, 71 | [Define if integer division by zero raises signal SIGFPE.]) 72 | ]) 73 | -------------------------------------------------------------------------------- /m4/inttypes-pri.m4: -------------------------------------------------------------------------------- 1 | # inttypes-pri.m4 serial 1 (gettext-0.11.4) 2 | dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Bruno Haible. 10 | 11 | # Define PRI_MACROS_BROKEN if exists and defines the PRI* 12 | # macros to non-string values. This is the case on AIX 4.3.3. 13 | 14 | AC_DEFUN([gt_INTTYPES_PRI], 15 | [ 16 | AC_REQUIRE([gt_HEADER_INTTYPES_H]) 17 | if test $gt_cv_header_inttypes_h = yes; then 18 | AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], 19 | gt_cv_inttypes_pri_broken, 20 | [ 21 | AC_TRY_COMPILE([#include 22 | #ifdef PRId32 23 | char *p = PRId32; 24 | #endif 25 | ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) 26 | ]) 27 | fi 28 | if test "$gt_cv_inttypes_pri_broken" = yes; then 29 | AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, 30 | [Define if exists and defines unusable PRI* macros.]) 31 | fi 32 | ]) 33 | -------------------------------------------------------------------------------- /m4/inttypes.m4: -------------------------------------------------------------------------------- 1 | # inttypes.m4 serial 1 (gettext-0.11.4) 2 | dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Paul Eggert. 10 | 11 | # Define HAVE_INTTYPES_H if exists and doesn't clash with 12 | # . 13 | 14 | AC_DEFUN([gt_HEADER_INTTYPES_H], 15 | [ 16 | AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, 17 | [ 18 | AC_TRY_COMPILE( 19 | [#include 20 | #include ], 21 | [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) 22 | ]) 23 | if test $gt_cv_header_inttypes_h = yes; then 24 | AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, 25 | [Define if exists and doesn't clash with .]) 26 | fi 27 | ]) 28 | -------------------------------------------------------------------------------- /m4/inttypes_h.m4: -------------------------------------------------------------------------------- 1 | # inttypes_h.m4 serial 5 (gettext-0.12) 2 | dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Paul Eggert. 10 | 11 | # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, 12 | # doesn't clash with , and declares uintmax_t. 13 | 14 | AC_DEFUN([jm_AC_HEADER_INTTYPES_H], 15 | [ 16 | AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, 17 | [AC_TRY_COMPILE( 18 | [#include 19 | #include ], 20 | [uintmax_t i = (uintmax_t) -1;], 21 | jm_ac_cv_header_inttypes_h=yes, 22 | jm_ac_cv_header_inttypes_h=no)]) 23 | if test $jm_ac_cv_header_inttypes_h = yes; then 24 | AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, 25 | [Define if exists, doesn't clash with , 26 | and declares uintmax_t. ]) 27 | fi 28 | ]) 29 | -------------------------------------------------------------------------------- /m4/isc-posix.m4: -------------------------------------------------------------------------------- 1 | # isc-posix.m4 serial 2 (gettext-0.11.2) 2 | dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. 10 | 11 | # This test replaces the one in autoconf. 12 | # Currently this macro should have the same name as the autoconf macro 13 | # because gettext's gettext.m4 (distributed in the automake package) 14 | # still uses it. Otherwise, the use in gettext.m4 makes autoheader 15 | # give these diagnostics: 16 | # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX 17 | # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX 18 | 19 | undefine([AC_ISC_POSIX]) 20 | 21 | AC_DEFUN([AC_ISC_POSIX], 22 | [ 23 | dnl This test replaces the obsolescent AC_ISC_POSIX kludge. 24 | AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) 25 | ] 26 | ) 27 | -------------------------------------------------------------------------------- /m4/lcmessage.m4: -------------------------------------------------------------------------------- 1 | # lcmessage.m4 serial 3 (gettext-0.11.3) 2 | dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | dnl 9 | dnl This file can can be used in projects which are not available under 10 | dnl the GNU General Public License or the GNU Library General Public 11 | dnl License but which still want to provide support for the GNU gettext 12 | dnl functionality. 13 | dnl Please note that the actual code of the GNU gettext library is covered 14 | dnl by the GNU Library General Public License, and the rest of the GNU 15 | dnl gettext package package is covered by the GNU General Public License. 16 | dnl They are *not* in the public domain. 17 | 18 | dnl Authors: 19 | dnl Ulrich Drepper , 1995. 20 | 21 | # Check whether LC_MESSAGES is available in . 22 | 23 | AC_DEFUN([AM_LC_MESSAGES], 24 | [ 25 | AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, 26 | [AC_TRY_LINK([#include ], [return LC_MESSAGES], 27 | am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) 28 | if test $am_cv_val_LC_MESSAGES = yes; then 29 | AC_DEFINE(HAVE_LC_MESSAGES, 1, 30 | [Define if your file defines LC_MESSAGES.]) 31 | fi 32 | ]) 33 | -------------------------------------------------------------------------------- /m4/lib-ld.m4: -------------------------------------------------------------------------------- 1 | # lib-ld.m4 serial 2 (gettext-0.12) 2 | dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl Subroutines of libtool.m4, 10 | dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision 11 | dnl with libtool.m4. 12 | 13 | dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. 14 | AC_DEFUN([AC_LIB_PROG_LD_GNU], 15 | [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, 16 | [# I'd rather use --version here, but apparently some GNU ld's only accept -v. 17 | if $LD -v 2>&1 &5; then 18 | acl_cv_prog_gnu_ld=yes 19 | else 20 | acl_cv_prog_gnu_ld=no 21 | fi]) 22 | with_gnu_ld=$acl_cv_prog_gnu_ld 23 | ]) 24 | 25 | dnl From libtool-1.4. Sets the variable LD. 26 | AC_DEFUN([AC_LIB_PROG_LD], 27 | [AC_ARG_WITH(gnu-ld, 28 | [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], 29 | test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) 30 | AC_REQUIRE([AC_PROG_CC])dnl 31 | AC_REQUIRE([AC_CANONICAL_HOST])dnl 32 | # Prepare PATH_SEPARATOR. 33 | # The user is always right. 34 | if test "${PATH_SEPARATOR+set}" != set; then 35 | echo "#! /bin/sh" >conf$$.sh 36 | echo "exit 0" >>conf$$.sh 37 | chmod +x conf$$.sh 38 | if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then 39 | PATH_SEPARATOR=';' 40 | else 41 | PATH_SEPARATOR=: 42 | fi 43 | rm -f conf$$.sh 44 | fi 45 | ac_prog=ld 46 | if test "$GCC" = yes; then 47 | # Check if gcc -print-prog-name=ld gives a path. 48 | AC_MSG_CHECKING([for ld used by GCC]) 49 | case $host in 50 | *-*-mingw*) 51 | # gcc leaves a trailing carriage return which upsets mingw 52 | ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; 53 | *) 54 | ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; 55 | esac 56 | case $ac_prog in 57 | # Accept absolute paths. 58 | [[\\/]* | [A-Za-z]:[\\/]*)] 59 | [re_direlt='/[^/][^/]*/\.\./'] 60 | # Canonicalize the path of ld 61 | ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` 62 | while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do 63 | ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` 64 | done 65 | test -z "$LD" && LD="$ac_prog" 66 | ;; 67 | "") 68 | # If it fails, then pretend we aren't using GCC. 69 | ac_prog=ld 70 | ;; 71 | *) 72 | # If it is relative, then search for the first ld in PATH. 73 | with_gnu_ld=unknown 74 | ;; 75 | esac 76 | elif test "$with_gnu_ld" = yes; then 77 | AC_MSG_CHECKING([for GNU ld]) 78 | else 79 | AC_MSG_CHECKING([for non-GNU ld]) 80 | fi 81 | AC_CACHE_VAL(acl_cv_path_LD, 82 | [if test -z "$LD"; then 83 | IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" 84 | for ac_dir in $PATH; do 85 | test -z "$ac_dir" && ac_dir=. 86 | if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then 87 | acl_cv_path_LD="$ac_dir/$ac_prog" 88 | # Check to see if the program is GNU ld. I'd rather use --version, 89 | # but apparently some GNU ld's only accept -v. 90 | # Break only if it was the GNU/non-GNU ld that we prefer. 91 | if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then 92 | test "$with_gnu_ld" != no && break 93 | else 94 | test "$with_gnu_ld" != yes && break 95 | fi 96 | fi 97 | done 98 | IFS="$ac_save_ifs" 99 | else 100 | acl_cv_path_LD="$LD" # Let the user override the test with a path. 101 | fi]) 102 | LD="$acl_cv_path_LD" 103 | if test -n "$LD"; then 104 | AC_MSG_RESULT($LD) 105 | else 106 | AC_MSG_RESULT(no) 107 | fi 108 | test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) 109 | AC_LIB_PROG_LD_GNU 110 | ]) 111 | -------------------------------------------------------------------------------- /m4/lib-prefix.m4: -------------------------------------------------------------------------------- 1 | # lib-prefix.m4 serial 2 (gettext-0.12) 2 | dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Bruno Haible. 10 | 11 | dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and 12 | dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't 13 | dnl require excessive bracketing. 14 | ifdef([AC_HELP_STRING], 15 | [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], 16 | [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) 17 | 18 | dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed 19 | dnl to access previously installed libraries. The basic assumption is that 20 | dnl a user will want packages to use other packages he previously installed 21 | dnl with the same --prefix option. 22 | dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate 23 | dnl libraries, but is otherwise very convenient. 24 | AC_DEFUN([AC_LIB_PREFIX], 25 | [ 26 | AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) 27 | AC_REQUIRE([AC_PROG_CC]) 28 | AC_REQUIRE([AC_CANONICAL_HOST]) 29 | AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 30 | dnl By default, look in $includedir and $libdir. 31 | use_additional=yes 32 | AC_LIB_WITH_FINAL_PREFIX([ 33 | eval additional_includedir=\"$includedir\" 34 | eval additional_libdir=\"$libdir\" 35 | ]) 36 | AC_LIB_ARG_WITH([lib-prefix], 37 | [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib 38 | --without-lib-prefix don't search for libraries in includedir and libdir], 39 | [ 40 | if test "X$withval" = "Xno"; then 41 | use_additional=no 42 | else 43 | if test "X$withval" = "X"; then 44 | AC_LIB_WITH_FINAL_PREFIX([ 45 | eval additional_includedir=\"$includedir\" 46 | eval additional_libdir=\"$libdir\" 47 | ]) 48 | else 49 | additional_includedir="$withval/include" 50 | additional_libdir="$withval/lib" 51 | fi 52 | fi 53 | ]) 54 | if test $use_additional = yes; then 55 | dnl Potentially add $additional_includedir to $CPPFLAGS. 56 | dnl But don't add it 57 | dnl 1. if it's the standard /usr/include, 58 | dnl 2. if it's already present in $CPPFLAGS, 59 | dnl 3. if it's /usr/local/include and we are using GCC on Linux, 60 | dnl 4. if it doesn't exist as a directory. 61 | if test "X$additional_includedir" != "X/usr/include"; then 62 | haveit= 63 | for x in $CPPFLAGS; do 64 | AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 65 | if test "X$x" = "X-I$additional_includedir"; then 66 | haveit=yes 67 | break 68 | fi 69 | done 70 | if test -z "$haveit"; then 71 | if test "X$additional_includedir" = "X/usr/local/include"; then 72 | if test -n "$GCC"; then 73 | case $host_os in 74 | linux*) haveit=yes;; 75 | esac 76 | fi 77 | fi 78 | if test -z "$haveit"; then 79 | if test -d "$additional_includedir"; then 80 | dnl Really add $additional_includedir to $CPPFLAGS. 81 | CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" 82 | fi 83 | fi 84 | fi 85 | fi 86 | dnl Potentially add $additional_libdir to $LDFLAGS. 87 | dnl But don't add it 88 | dnl 1. if it's the standard /usr/lib, 89 | dnl 2. if it's already present in $LDFLAGS, 90 | dnl 3. if it's /usr/local/lib and we are using GCC on Linux, 91 | dnl 4. if it doesn't exist as a directory. 92 | if test "X$additional_libdir" != "X/usr/lib"; then 93 | haveit= 94 | for x in $LDFLAGS; do 95 | AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) 96 | if test "X$x" = "X-L$additional_libdir"; then 97 | haveit=yes 98 | break 99 | fi 100 | done 101 | if test -z "$haveit"; then 102 | if test "X$additional_libdir" = "X/usr/local/lib"; then 103 | if test -n "$GCC"; then 104 | case $host_os in 105 | linux*) haveit=yes;; 106 | esac 107 | fi 108 | fi 109 | if test -z "$haveit"; then 110 | if test -d "$additional_libdir"; then 111 | dnl Really add $additional_libdir to $LDFLAGS. 112 | LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" 113 | fi 114 | fi 115 | fi 116 | fi 117 | fi 118 | ]) 119 | 120 | dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, 121 | dnl acl_final_exec_prefix, containing the values to which $prefix and 122 | dnl $exec_prefix will expand at the end of the configure script. 123 | AC_DEFUN([AC_LIB_PREPARE_PREFIX], 124 | [ 125 | dnl Unfortunately, prefix and exec_prefix get only finally determined 126 | dnl at the end of configure. 127 | if test "X$prefix" = "XNONE"; then 128 | acl_final_prefix="$ac_default_prefix" 129 | else 130 | acl_final_prefix="$prefix" 131 | fi 132 | if test "X$exec_prefix" = "XNONE"; then 133 | acl_final_exec_prefix='${prefix}' 134 | else 135 | acl_final_exec_prefix="$exec_prefix" 136 | fi 137 | acl_save_prefix="$prefix" 138 | prefix="$acl_final_prefix" 139 | eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" 140 | prefix="$acl_save_prefix" 141 | ]) 142 | 143 | dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the 144 | dnl variables prefix and exec_prefix bound to the values they will have 145 | dnl at the end of the configure script. 146 | AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], 147 | [ 148 | acl_save_prefix="$prefix" 149 | prefix="$acl_final_prefix" 150 | acl_save_exec_prefix="$exec_prefix" 151 | exec_prefix="$acl_final_exec_prefix" 152 | $1 153 | exec_prefix="$acl_save_exec_prefix" 154 | prefix="$acl_save_prefix" 155 | ]) 156 | -------------------------------------------------------------------------------- /m4/nls.m4: -------------------------------------------------------------------------------- 1 | # nls.m4 serial 1 (gettext-0.12) 2 | dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | dnl 9 | dnl This file can can be used in projects which are not available under 10 | dnl the GNU General Public License or the GNU Library General Public 11 | dnl License but which still want to provide support for the GNU gettext 12 | dnl functionality. 13 | dnl Please note that the actual code of the GNU gettext library is covered 14 | dnl by the GNU Library General Public License, and the rest of the GNU 15 | dnl gettext package package is covered by the GNU General Public License. 16 | dnl They are *not* in the public domain. 17 | 18 | dnl Authors: 19 | dnl Ulrich Drepper , 1995-2000. 20 | dnl Bruno Haible , 2000-2003. 21 | 22 | AC_DEFUN([AM_NLS], 23 | [ 24 | AC_MSG_CHECKING([whether NLS is requested]) 25 | dnl Default is enabled NLS 26 | AC_ARG_ENABLE(nls, 27 | [ --disable-nls do not use Native Language Support], 28 | USE_NLS=$enableval, USE_NLS=yes) 29 | AC_MSG_RESULT($USE_NLS) 30 | AC_SUBST(USE_NLS) 31 | ]) 32 | 33 | AC_DEFUN([AM_MKINSTALLDIRS], 34 | [ 35 | dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly 36 | dnl find the mkinstalldirs script in another subdir but $(top_srcdir). 37 | dnl Try to locate it. 38 | MKINSTALLDIRS= 39 | if test -n "$ac_aux_dir"; then 40 | case "$ac_aux_dir" in 41 | /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; 42 | *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; 43 | esac 44 | fi 45 | if test -z "$MKINSTALLDIRS"; then 46 | MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" 47 | fi 48 | AC_SUBST(MKINSTALLDIRS) 49 | ]) 50 | -------------------------------------------------------------------------------- /m4/po.m4: -------------------------------------------------------------------------------- 1 | # po.m4 serial 1 (gettext-0.12) 2 | dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | dnl 9 | dnl This file can can be used in projects which are not available under 10 | dnl the GNU General Public License or the GNU Library General Public 11 | dnl License but which still want to provide support for the GNU gettext 12 | dnl functionality. 13 | dnl Please note that the actual code of the GNU gettext library is covered 14 | dnl by the GNU Library General Public License, and the rest of the GNU 15 | dnl gettext package package is covered by the GNU General Public License. 16 | dnl They are *not* in the public domain. 17 | 18 | dnl Authors: 19 | dnl Ulrich Drepper , 1995-2000. 20 | dnl Bruno Haible , 2000-2003. 21 | 22 | dnl Checks for all prerequisites of the po subdirectory. 23 | AC_DEFUN([AM_PO_SUBDIRS], 24 | [ 25 | AC_REQUIRE([AC_PROG_MAKE_SET])dnl 26 | AC_REQUIRE([AC_PROG_INSTALL])dnl 27 | AC_REQUIRE([AM_MKINSTALLDIRS])dnl 28 | AC_REQUIRE([AM_NLS])dnl 29 | 30 | dnl Perform the following tests also if --disable-nls has been given, 31 | dnl because they are needed for "make dist" to work. 32 | 33 | dnl Search for GNU msgfmt in the PATH. 34 | dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. 35 | dnl The second test excludes FreeBSD msgfmt. 36 | AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, 37 | [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && 38 | (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], 39 | :) 40 | AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) 41 | 42 | dnl Search for GNU xgettext 0.12 or newer in the PATH. 43 | dnl The first test excludes Solaris xgettext and early GNU xgettext versions. 44 | dnl The second test excludes FreeBSD xgettext. 45 | AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, 46 | [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && 47 | (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], 48 | :) 49 | dnl Remove leftover from FreeBSD xgettext call. 50 | rm -f messages.po 51 | 52 | dnl Search for GNU msgmerge 0.11 or newer in the PATH. 53 | AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, 54 | [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) 55 | 56 | dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. 57 | dnl Test whether we really found GNU msgfmt. 58 | if test "$GMSGFMT" != ":"; then 59 | dnl If it is no GNU msgfmt we define it as : so that the 60 | dnl Makefiles still can work. 61 | if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && 62 | (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then 63 | : ; 64 | else 65 | GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` 66 | AC_MSG_RESULT( 67 | [found $GMSGFMT program is not GNU msgfmt; ignore it]) 68 | GMSGFMT=":" 69 | fi 70 | fi 71 | 72 | dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. 73 | dnl Test whether we really found GNU xgettext. 74 | if test "$XGETTEXT" != ":"; then 75 | dnl If it is no GNU xgettext we define it as : so that the 76 | dnl Makefiles still can work. 77 | if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && 78 | (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then 79 | : ; 80 | else 81 | AC_MSG_RESULT( 82 | [found xgettext program is not GNU xgettext; ignore it]) 83 | XGETTEXT=":" 84 | fi 85 | dnl Remove leftover from FreeBSD xgettext call. 86 | rm -f messages.po 87 | fi 88 | 89 | AC_OUTPUT_COMMANDS([ 90 | for ac_file in $CONFIG_FILES; do 91 | # Support "outfile[:infile[:infile...]]" 92 | case "$ac_file" in 93 | *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; 94 | esac 95 | # PO directories have a Makefile.in generated from Makefile.in.in. 96 | case "$ac_file" in */Makefile.in) 97 | # Adjust a relative srcdir. 98 | ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` 99 | ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" 100 | ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` 101 | # In autoconf-2.13 it is called $ac_given_srcdir. 102 | # In autoconf-2.50 it is called $srcdir. 103 | test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" 104 | case "$ac_given_srcdir" in 105 | .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; 106 | /*) top_srcdir="$ac_given_srcdir" ;; 107 | *) top_srcdir="$ac_dots$ac_given_srcdir" ;; 108 | esac 109 | if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then 110 | rm -f "$ac_dir/POTFILES" 111 | test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" 112 | cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" 113 | POMAKEFILEDEPS="POTFILES.in" 114 | # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend 115 | # on $ac_dir but don't depend on user-specified configuration 116 | # parameters. 117 | if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then 118 | # The LINGUAS file contains the set of available languages. 119 | if test -n "$OBSOLETE_ALL_LINGUAS"; then 120 | test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" 121 | fi 122 | ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` 123 | # Hide the ALL_LINGUAS assigment from automake. 124 | eval 'ALL_LINGUAS''=$ALL_LINGUAS_' 125 | POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" 126 | else 127 | # The set of available languages was given in configure.in. 128 | eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' 129 | fi 130 | case "$ac_given_srcdir" in 131 | .) srcdirpre= ;; 132 | *) srcdirpre='$(srcdir)/' ;; 133 | esac 134 | POFILES= 135 | GMOFILES= 136 | UPDATEPOFILES= 137 | DUMMYPOFILES= 138 | for lang in $ALL_LINGUAS; do 139 | POFILES="$POFILES $srcdirpre$lang.po" 140 | GMOFILES="$GMOFILES $srcdirpre$lang.gmo" 141 | UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" 142 | DUMMYPOFILES="$DUMMYPOFILES $lang.nop" 143 | done 144 | # CATALOGS depends on both $ac_dir and the user's LINGUAS 145 | # environment variable. 146 | INST_LINGUAS= 147 | if test -n "$ALL_LINGUAS"; then 148 | for presentlang in $ALL_LINGUAS; do 149 | useit=no 150 | if test "%UNSET%" != "$LINGUAS"; then 151 | desiredlanguages="$LINGUAS" 152 | else 153 | desiredlanguages="$ALL_LINGUAS" 154 | fi 155 | for desiredlang in $desiredlanguages; do 156 | # Use the presentlang catalog if desiredlang is 157 | # a. equal to presentlang, or 158 | # b. a variant of presentlang (because in this case, 159 | # presentlang can be used as a fallback for messages 160 | # which are not translated in the desiredlang catalog). 161 | case "$desiredlang" in 162 | "$presentlang"*) useit=yes;; 163 | esac 164 | done 165 | if test $useit = yes; then 166 | INST_LINGUAS="$INST_LINGUAS $presentlang" 167 | fi 168 | done 169 | fi 170 | CATALOGS= 171 | if test -n "$INST_LINGUAS"; then 172 | for lang in $INST_LINGUAS; do 173 | CATALOGS="$CATALOGS $lang.gmo" 174 | done 175 | fi 176 | test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" 177 | sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" 178 | for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do 179 | if test -f "$f"; then 180 | case "$f" in 181 | *.orig | *.bak | *~) ;; 182 | *) cat "$f" >> "$ac_dir/Makefile" ;; 183 | esac 184 | fi 185 | done 186 | fi 187 | ;; 188 | esac 189 | done], 190 | [# Capture the value of obsolete ALL_LINGUAS because we need it to compute 191 | # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it 192 | # from automake. 193 | eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' 194 | # Capture the value of LINGUAS because we need it to compute CATALOGS. 195 | LINGUAS="${LINGUAS-%UNSET%}" 196 | ]) 197 | ]) 198 | -------------------------------------------------------------------------------- /m4/progtest.m4: -------------------------------------------------------------------------------- 1 | # progtest.m4 serial 3 (gettext-0.12) 2 | dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | dnl 9 | dnl This file can can be used in projects which are not available under 10 | dnl the GNU General Public License or the GNU Library General Public 11 | dnl License but which still want to provide support for the GNU gettext 12 | dnl functionality. 13 | dnl Please note that the actual code of the GNU gettext library is covered 14 | dnl by the GNU Library General Public License, and the rest of the GNU 15 | dnl gettext package package is covered by the GNU General Public License. 16 | dnl They are *not* in the public domain. 17 | 18 | dnl Authors: 19 | dnl Ulrich Drepper , 1996. 20 | 21 | # Search path for a program which passes the given test. 22 | 23 | dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, 24 | dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) 25 | AC_DEFUN([AM_PATH_PROG_WITH_TEST], 26 | [ 27 | # Prepare PATH_SEPARATOR. 28 | # The user is always right. 29 | if test "${PATH_SEPARATOR+set}" != set; then 30 | echo "#! /bin/sh" >conf$$.sh 31 | echo "exit 0" >>conf$$.sh 32 | chmod +x conf$$.sh 33 | if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then 34 | PATH_SEPARATOR=';' 35 | else 36 | PATH_SEPARATOR=: 37 | fi 38 | rm -f conf$$.sh 39 | fi 40 | 41 | # Find out how to test for executable files. Don't use a zero-byte file, 42 | # as systems may use methods other than mode bits to determine executability. 43 | cat >conf$$.file <<_ASEOF 44 | #! /bin/sh 45 | exit 0 46 | _ASEOF 47 | chmod +x conf$$.file 48 | if test -x conf$$.file >/dev/null 2>&1; then 49 | ac_executable_p="test -x" 50 | else 51 | ac_executable_p="test -f" 52 | fi 53 | rm -f conf$$.file 54 | 55 | # Extract the first word of "$2", so it can be a program name with args. 56 | set dummy $2; ac_word=[$]2 57 | AC_MSG_CHECKING([for $ac_word]) 58 | AC_CACHE_VAL(ac_cv_path_$1, 59 | [case "[$]$1" in 60 | [[\\/]]* | ?:[[\\/]]*) 61 | ac_cv_path_$1="[$]$1" # Let the user override the test with a path. 62 | ;; 63 | *) 64 | ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR 65 | for ac_dir in ifelse([$5], , $PATH, [$5]); do 66 | IFS="$ac_save_IFS" 67 | test -z "$ac_dir" && ac_dir=. 68 | for ac_exec_ext in '' $ac_executable_extensions; do 69 | if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then 70 | if [$3]; then 71 | ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" 72 | break 2 73 | fi 74 | fi 75 | done 76 | done 77 | IFS="$ac_save_IFS" 78 | dnl If no 4th arg is given, leave the cache variable unset, 79 | dnl so AC_PATH_PROGS will keep looking. 80 | ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" 81 | ])dnl 82 | ;; 83 | esac])dnl 84 | $1="$ac_cv_path_$1" 85 | if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then 86 | AC_MSG_RESULT([$]$1) 87 | else 88 | AC_MSG_RESULT(no) 89 | fi 90 | AC_SUBST($1)dnl 91 | ]) 92 | -------------------------------------------------------------------------------- /m4/stdint_h.m4: -------------------------------------------------------------------------------- 1 | # stdint_h.m4 serial 3 (gettext-0.12) 2 | dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Paul Eggert. 10 | 11 | # Define HAVE_STDINT_H_WITH_UINTMAX if exists, 12 | # doesn't clash with , and declares uintmax_t. 13 | 14 | AC_DEFUN([jm_AC_HEADER_STDINT_H], 15 | [ 16 | AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, 17 | [AC_TRY_COMPILE( 18 | [#include 19 | #include ], 20 | [uintmax_t i = (uintmax_t) -1;], 21 | jm_ac_cv_header_stdint_h=yes, 22 | jm_ac_cv_header_stdint_h=no)]) 23 | if test $jm_ac_cv_header_stdint_h = yes; then 24 | AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, 25 | [Define if exists, doesn't clash with , 26 | and declares uintmax_t. ]) 27 | fi 28 | ]) 29 | -------------------------------------------------------------------------------- /m4/uintmax_t.m4: -------------------------------------------------------------------------------- 1 | # uintmax_t.m4 serial 7 (gettext-0.12) 2 | dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Paul Eggert. 10 | 11 | AC_PREREQ(2.13) 12 | 13 | # Define uintmax_t to 'unsigned long' or 'unsigned long long' 14 | # if it is not already defined in or . 15 | 16 | AC_DEFUN([jm_AC_TYPE_UINTMAX_T], 17 | [ 18 | AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) 19 | AC_REQUIRE([jm_AC_HEADER_STDINT_H]) 20 | if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then 21 | AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) 22 | test $ac_cv_type_unsigned_long_long = yes \ 23 | && ac_type='unsigned long long' \ 24 | || ac_type='unsigned long' 25 | AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, 26 | [Define to unsigned long or unsigned long long 27 | if and don't define.]) 28 | else 29 | AC_DEFINE(HAVE_UINTMAX_T, 1, 30 | [Define if you have the 'uintmax_t' type in or .]) 31 | fi 32 | ]) 33 | -------------------------------------------------------------------------------- /m4/ulonglong.m4: -------------------------------------------------------------------------------- 1 | # ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40) 2 | dnl Copyright (C) 1999-2002 Free Software Foundation, Inc. 3 | dnl This file is free software, distributed under the terms of the GNU 4 | dnl General Public License. As a special exception to the GNU General 5 | dnl Public License, this file may be distributed as part of a program 6 | dnl that contains a configuration script generated by Autoconf, under 7 | dnl the same distribution terms as the rest of that program. 8 | 9 | dnl From Paul Eggert. 10 | 11 | AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], 12 | [ 13 | AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, 14 | [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;], 15 | [unsigned long long ullmax = (unsigned long long) -1; 16 | return ull << i | ull >> i | ullmax / ull | ullmax % ull;], 17 | ac_cv_type_unsigned_long_long=yes, 18 | ac_cv_type_unsigned_long_long=no)]) 19 | if test $ac_cv_type_unsigned_long_long = yes; then 20 | AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, 21 | [Define if you have the unsigned long long type.]) 22 | fi 23 | ]) 24 | -------------------------------------------------------------------------------- /po/.gitattributes: -------------------------------------------------------------------------------- 1 | # You should add 2 | #[filter "cleanpo"] 3 | # clean = "awk '/^\"POT-Creation-Date:/&&!s{s=1;next};!/^#: /{print}'" 4 | # to your config file. 5 | 6 | /??.po filter=cleanpo 7 | /??_??.po filter=cleanpo 8 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | # Set of available languages. 2 | de ar es pl pt ru zh_CN zh_TW fr nl it 3 | -------------------------------------------------------------------------------- /po/Makevars: -------------------------------------------------------------------------------- 1 | # Makefile variables for PO directory in any package using GNU gettext. 2 | 3 | # Usually the message domain is the same as the package name. 4 | DOMAIN = $(PACKAGE) 5 | 6 | # These two variables depend on the location of this directory. 7 | subdir = po 8 | top_builddir = .. 9 | 10 | # These options get passed to xgettext. 11 | XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ 12 | 13 | # This is the copyright holder that gets inserted into the header of the 14 | # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding 15 | # package. (Note that the msgstr strings, extracted from the package's 16 | # sources, belong to the copyright holder of the package.) Translators are 17 | # expected to transfer the copyright for their translations to this person 18 | # or entity, or to disclaim their copyright. The empty string stands for 19 | # the public domain; in this case the translators are expected to disclaim 20 | # their copyright. 21 | COPYRIGHT_HOLDER = g10 Code GmbH 22 | 23 | # This is the email address or URL to which the translators shall report 24 | # bugs in the untranslated strings: 25 | # - Strings which are not entire sentences, see the maintainer guidelines 26 | # in the GNU gettext documentation, section 'Preparing Strings'. 27 | # - Strings which use unclear terms or require additional context to be 28 | # understood. 29 | # - Strings which make invalid assumptions about notation of date, time or 30 | # money. 31 | # - Pluralisation problems. 32 | # - Incorrect English spelling. 33 | # - Incorrect formatting. 34 | # It can be your email address, or a mailing list address where translators 35 | # can write to without being subscribed, or the URL of a web page through 36 | # which the translators can contact you. 37 | MSGID_BUGS_ADDRESS = http://bugs.gnupg.org 38 | 39 | # This is the list of locale categories, beyond LC_MESSAGES, for which the 40 | # message catalogs shall be used. It is usually empty. 41 | EXTRA_LOCALE_CATEGORIES = 42 | -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | src/main.cc 2 | src/client.cc 3 | src/gpgex.cc 4 | -------------------------------------------------------------------------------- /po/Rules-quot: -------------------------------------------------------------------------------- 1 | # Special Makefile rules for English message catalogs with quotation marks. 2 | 3 | DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot 4 | 5 | .SUFFIXES: .insert-header .po-update-en 6 | 7 | en@quot.po-update: en@quot.po-update-en 8 | en@boldquot.po-update: en@boldquot.po-update-en 9 | 10 | .insert-header.po-update-en: 11 | @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ 12 | if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ 13 | tmpdir=`pwd`; \ 14 | echo "$$lang:"; \ 15 | ll=`echo $$lang | sed -e 's/@.*//'`; \ 16 | LC_ALL=C; export LC_ALL; \ 17 | cd $(srcdir); \ 18 | if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ 19 | if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ 20 | rm -f $$tmpdir/$$lang.new.po; \ 21 | else \ 22 | if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ 23 | :; \ 24 | else \ 25 | echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ 26 | exit 1; \ 27 | fi; \ 28 | fi; \ 29 | else \ 30 | echo "creation of $$lang.po failed!" 1>&2; \ 31 | rm -f $$tmpdir/$$lang.new.po; \ 32 | fi 33 | 34 | en@quot.insert-header: insert-header.sin 35 | sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header 36 | 37 | en@boldquot.insert-header: insert-header.sin 38 | sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header 39 | 40 | mostlyclean: mostlyclean-quot 41 | mostlyclean-quot: 42 | rm -f *.insert-header 43 | -------------------------------------------------------------------------------- /po/ar.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR g10 Code GmbH 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Ahmad Gharbeia , 2008, 2013. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: gpgex\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2013-07-19 22:21+0430\n" 11 | "Last-Translator: Ahmad Gharbeia \n" 12 | "Language-Team: Arabic <>\n" 13 | "Language: \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=9; plural=(n!=1);\n" 18 | "X-Poedit-Language: Arabic\n" 19 | "X-Poedit-SourceCharset: utf-8\n" 20 | 21 | #, c-format 22 | msgid "" 23 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 24 | "%s" 25 | msgstr "" 26 | "تعذّر الاتصال بواجهة المستخدم GnuPG%s%s%s:\n" 27 | "%s" 28 | 29 | #, c-format 30 | msgid "" 31 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 32 | "%s" 33 | msgstr "" 34 | "الخطأ الذي أرجعته واجهة المستخدم GnuPG%s%s%s:\n" 35 | "%s" 36 | 37 | msgid "About GpgEX" 38 | msgstr "عن GpgEX" 39 | 40 | msgid "Decrypt and verify" 41 | msgstr "ظهِّر و تحقق" 42 | 43 | msgid "Decrypt" 44 | msgstr "ظهِّر" 45 | 46 | msgid "Verify" 47 | msgstr "تحقق" 48 | 49 | msgid "Sign and encrypt" 50 | msgstr "وقِّع و عمِّ" 51 | 52 | msgid "Encrypt" 53 | msgstr "عمِّ" 54 | 55 | msgid "Sign" 56 | msgstr "وقِّع" 57 | 58 | msgid "Import keys" 59 | msgstr "استورد المفاتيح" 60 | 61 | msgid "Create checksums" 62 | msgstr "احسب تلبيدات" 63 | 64 | msgid "Verify checksums" 65 | msgstr "افحص التلبيدات" 66 | 67 | msgid "More GpgEX options" 68 | msgstr "‮مزيد من خيارات ‪GpgEx‬" 69 | 70 | msgid "Show the version of GpgEX." 71 | msgstr "أظهر رقم إصدارة GpgEX" 72 | 73 | msgid "Decrypt and verify the marked files." 74 | msgstr "ظهِّر و تحقق من الملفات المؤشَّرة." 75 | 76 | msgid "Decrypt the marked files." 77 | msgstr "ظهِّر الملفات المؤشَّرة." 78 | 79 | msgid "Verify the marked files." 80 | msgstr "تحقق من توقيعات الملفات المؤشَّرة." 81 | 82 | msgid "Sign and encrypt the marked files." 83 | msgstr "وقِّع و عمِّ الملفات المؤشَّرة." 84 | 85 | msgid "Encrypt the marked files." 86 | msgstr "عمِّ الملفات المؤشَّرة." 87 | 88 | msgid "Sign the marked files." 89 | msgstr "وقِّع الملفات المؤشَّرة." 90 | 91 | msgid "Import the marked files." 92 | msgstr "استورد الملفات المؤشَّرة." 93 | 94 | msgid "Create checksums." 95 | msgstr "احسب تلبيدات." 96 | 97 | msgid "Verify checksums." 98 | msgstr "افحص التلبيدات." 99 | 100 | msgid "Show more GpgEX options." 101 | msgstr "‮أظهر مزيدا من خيارات ‪GpgEx‬." 102 | 103 | #. TRANSLATORS: See the source for the full english text. 104 | msgid "-#GpgEXFullHelpText#-" 105 | msgstr "" 106 | "GpgEX مُلحَقَة لإنترنت إكسبلورَر لتعمية البيانات و التوقيع الرقمي\n" 107 | "و هي تستخدم أداة GnuPG (http://www.gnupg.org).\n" 108 | "\n" 109 | "GpgEX برمجية حُرَّة; لك حق توزيعها و/أو تعديلها وفق شروط\n" 110 | "رخصة گنو العمومية الصغرى التي تنشرها مؤسسة البرمجيات الحُرَّة\n" 111 | "إما في إصدارتها رقم 2.1 أو (إن أردت) أي إصدارة لاحقة.\n" 112 | "\n" 113 | "GpgEX منشورة بِنِيّة أن تكون مفيدة لكن بلا أي ضمانات،\n" 114 | "و لا حتّى الضمان الضمني لصلاحيتها كسلعة و لا ملاءمتها لأي غرض بعينه.\n" 115 | "طالع نصّ \"رخصة گنو العمومية الصغرى لمزيد من التفاصيل.\n" 116 | "\n" 117 | "يُفترض أن تكون قد حصلت مع هذه البرمجية على نسخة من نصّ رخصة گنو العموميةالصغرى " 118 | "المنشور في ." 119 | 120 | #, c-format 121 | msgid "This is GpgEX version %s (%s)" 122 | msgstr "هذه إصدارة GpgEX رقم %s (%s)" 123 | 124 | #~ msgid "Help on GpgEX" 125 | #~ msgstr "‮مساعدة حول ‪GpgEx‬" 126 | 127 | #~ msgid "Invoke the GpgEX documentation." 128 | #~ msgstr "‮طالع وثائق ‪GpgEx‬" 129 | -------------------------------------------------------------------------------- /po/boldquot.sed: -------------------------------------------------------------------------------- 1 | s/"\([^"]*\)"/“\1”/g 2 | s/`\([^`']*\)'/‘\1’/g 3 | s/ '\([^`']*\)' / ‘\1’ /g 4 | s/ '\([^`']*\)'$/ ‘\1’/g 5 | s/^'\([^`']*\)' /‘\1’ /g 6 | s/“”/""/g 7 | s/“/“/g 8 | s/”/”/g 9 | s/‘/‘/g 10 | s/’/’/g 11 | -------------------------------------------------------------------------------- /po/de.po: -------------------------------------------------------------------------------- 1 | # German translations for gpgex package. 2 | # Copyright (C) 2007 g10 Code GmbH 3 | # This file is distributed under the same license as the gpgex package. 4 | # 5 | # Marcus Brinkmann , 2007. 6 | # Eva Bolten , 2023. 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: gpgex 1.0.0\n" 10 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 11 | "PO-Revision-Date: 2023-07-13 13:52+0200\n" 12 | "Last-Translator: Eva Bolten \n" 13 | "Language-Team: German \n" 14 | "Language: de\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | "X-Generator: Lokalize 20.12.0\n" 20 | 21 | #, c-format 22 | msgid "" 23 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 24 | "%s" 25 | msgstr "" 26 | "Verbindung zur GnuPG Benutzerschnittstelle%s%s%s kann nicht aufgebaut werden:" 27 | "\r\n" 28 | "%s" 29 | 30 | #, c-format 31 | msgid "" 32 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 33 | "%s" 34 | msgstr "" 35 | "Fehlermeldung der GnuPG Benutzerschnittstelle%s%s%s:\r\n" 36 | "%s" 37 | 38 | msgid "About GpgEX" 39 | msgstr "Über GpgEX" 40 | 41 | msgid "Decrypt and verify" 42 | msgstr "Entschlüsseln und prüfen" 43 | 44 | msgid "Decrypt" 45 | msgstr "Entschlüsseln" 46 | 47 | msgid "Verify" 48 | msgstr "Prüfen" 49 | 50 | msgid "Sign and encrypt" 51 | msgstr "Signieren und verschlüsseln" 52 | 53 | msgid "Encrypt" 54 | msgstr "Verschlüsseln" 55 | 56 | msgid "Sign" 57 | msgstr "Signieren" 58 | 59 | msgid "Import keys" 60 | msgstr "Zertifikate importieren" 61 | 62 | msgid "Create checksums" 63 | msgstr "Prüfsummen erstellen" 64 | 65 | msgid "Verify checksums" 66 | msgstr "Prüfsummen überprüfen" 67 | 68 | msgid "More GpgEX options" 69 | msgstr "Mehr GpgEX Optionen" 70 | 71 | msgid "Show the version of GpgEX." 72 | msgstr "Anzeige der Version von GpgEX" 73 | 74 | msgid "Decrypt and verify the marked files." 75 | msgstr "Die markierten Dateien entschlüsseln und prüfen." 76 | 77 | msgid "Decrypt the marked files." 78 | msgstr "Die markierten Dateien entschlüsseln." 79 | 80 | msgid "Verify the marked files." 81 | msgstr "Die markierten Dateien prüfen." 82 | 83 | msgid "Sign and encrypt the marked files." 84 | msgstr "Die markierten Dateien signieren und verschlüsseln." 85 | 86 | msgid "Encrypt the marked files." 87 | msgstr "Die markierten Dateien verschlüsseln." 88 | 89 | msgid "Sign the marked files." 90 | msgstr "Die markierten Dateien signieren." 91 | 92 | msgid "Import the marked files." 93 | msgstr "Die markierten Dateien importieren." 94 | 95 | msgid "Create checksums." 96 | msgstr "Für die markierten Dateien Prüfsummen erstellen." 97 | 98 | msgid "Verify checksums." 99 | msgstr "Die Prüfsummen der markierten Dateien überprüfen." 100 | 101 | msgid "Show more GpgEX options." 102 | msgstr "Mehr GpgEX Optionen." 103 | 104 | #. TRANSLATORS: See the source for the full english text. 105 | msgid "-#GpgEXFullHelpText#-" 106 | msgstr "" 107 | "GpgEX ist eine Explorer Erweiterung, welche es ermöglicht\n" 108 | "Daten mittels der Internet-Standards PGP/MIME oder S/MIME\n" 109 | "zu verschlüsseln und digital zu signieren. Im Hintergrund wird\n" 110 | "dazu die GnuPG Software () benutzt.\n" 111 | "\n" 112 | "GpgEX ist freie Software. Sie können es unter den Bedingungen\n" 113 | "der GNU Lesser General Public License, wie von der Free Software\n" 114 | "Foundation veröffentlicht, weitergeben und/oder modifizieren;\n" 115 | "entweder gemäß Version 2.1 der Lizenz oder (nach Ihrer Wahl)\n" 116 | "jeder späteren Version.\n" 117 | "\n" 118 | "GpgEX wird in der Hoffnung veröffentlicht, daß es Ihnen von Nutzen\n" 119 | "sein wird, aber ohne irgendeine Garantie, sogar ohne die implizite\n" 120 | "Garantie der Marktreife oder der Verwendbarkeit für einen bestimmten\n" 121 | "Zweck. Details finden Sie in der GNU Lesser General Public License.\n" 122 | "\n" 123 | "Zusammen mit GpgEX sollten Sie eine Kopie der GNU Lesser General\n" 124 | "Public License erhalten haben. Falls nicht, finden Sie diese\n" 125 | "unter der Webadresse ." 126 | 127 | #, c-format 128 | msgid "This is GpgEX version %s (%s)" 129 | msgstr "Dies ist GpgEX Version %s (%s)" 130 | 131 | #~ msgid "Help on GpgEX" 132 | #~ msgstr "Hilfe zu GpgEX" 133 | 134 | #~ msgid "Invoke the GpgEX documentation." 135 | #~ msgstr "Öffne die Dokumentation zu GpgEX" 136 | -------------------------------------------------------------------------------- /po/en@boldquot.header: -------------------------------------------------------------------------------- 1 | # All this catalog "translates" are quotation characters. 2 | # The msgids must be ASCII and therefore cannot contain real quotation 3 | # characters, only substitutes like grave accent (0x60), apostrophe (0x27) 4 | # and double quote (0x22). These substitutes look strange; see 5 | # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html 6 | # 7 | # This catalog translates grave accent (0x60) and apostrophe (0x27) to 8 | # left single quotation mark (U+2018) and right single quotation mark (U+2019). 9 | # It also translates pairs of apostrophe (0x27) to 10 | # left single quotation mark (U+2018) and right single quotation mark (U+2019) 11 | # and pairs of quotation mark (0x22) to 12 | # left double quotation mark (U+201C) and right double quotation mark (U+201D). 13 | # 14 | # When output to an UTF-8 terminal, the quotation characters appear perfectly. 15 | # When output to an ISO-8859-1 terminal, the single quotation marks are 16 | # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to 17 | # grave/acute accent (by libiconv), and the double quotation marks are 18 | # transliterated to 0x22. 19 | # When output to an ASCII terminal, the single quotation marks are 20 | # transliterated to apostrophes, and the double quotation marks are 21 | # transliterated to 0x22. 22 | # 23 | # This catalog furthermore displays the text between the quotation marks in 24 | # bold face, assuming the VT100/XTerm escape sequences. 25 | # 26 | -------------------------------------------------------------------------------- /po/en@quot.header: -------------------------------------------------------------------------------- 1 | # All this catalog "translates" are quotation characters. 2 | # The msgids must be ASCII and therefore cannot contain real quotation 3 | # characters, only substitutes like grave accent (0x60), apostrophe (0x27) 4 | # and double quote (0x22). These substitutes look strange; see 5 | # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html 6 | # 7 | # This catalog translates grave accent (0x60) and apostrophe (0x27) to 8 | # left single quotation mark (U+2018) and right single quotation mark (U+2019). 9 | # It also translates pairs of apostrophe (0x27) to 10 | # left single quotation mark (U+2018) and right single quotation mark (U+2019) 11 | # and pairs of quotation mark (0x22) to 12 | # left double quotation mark (U+201C) and right double quotation mark (U+201D). 13 | # 14 | # When output to an UTF-8 terminal, the quotation characters appear perfectly. 15 | # When output to an ISO-8859-1 terminal, the single quotation marks are 16 | # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to 17 | # grave/acute accent (by libiconv), and the double quotation marks are 18 | # transliterated to 0x22. 19 | # When output to an ASCII terminal, the single quotation marks are 20 | # transliterated to apostrophes, and the double quotation marks are 21 | # transliterated to 0x22. 22 | # 23 | -------------------------------------------------------------------------------- /po/es.po: -------------------------------------------------------------------------------- 1 | # translation of GPGex. 2 | # Copyright (C) 2008 g10 Code GmbH 3 | # This file is distributed under the same license as the GPGex package. 4 | # Diego Escalante Urrelo , 2008, 2013. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: GpgEX 1.0.0\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2013-06-26 16:29+0200\n" 11 | "Last-Translator: Diego Escalante Urrelo \n" 12 | "Language-Team: Spanish \n" 13 | "Language: es\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=utf-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | 18 | #, c-format 19 | msgid "" 20 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 21 | "%s" 22 | msgstr "" 23 | "No se pudo acceder a la interface de usuario de GnuPG%s%s%s:\\r\n" 24 | "%s" 25 | 26 | #, c-format 27 | msgid "" 28 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 29 | "%s" 30 | msgstr "" 31 | "Error de la interface de usuario de GnuPG%s%s%s:\r\n" 32 | "%s" 33 | 34 | msgid "About GpgEX" 35 | msgstr "Acerca de GpgEX" 36 | 37 | msgid "Decrypt and verify" 38 | msgstr "Descifrar y verificar." 39 | 40 | msgid "Decrypt" 41 | msgstr "Descifrar" 42 | 43 | msgid "Verify" 44 | msgstr "Verificar" 45 | 46 | msgid "Sign and encrypt" 47 | msgstr "Firmar y cifrar" 48 | 49 | msgid "Encrypt" 50 | msgstr "Cifrar" 51 | 52 | msgid "Sign" 53 | msgstr "Firmar" 54 | 55 | msgid "Import keys" 56 | msgstr "Importar claves" 57 | 58 | msgid "Create checksums" 59 | msgstr "Crear sumas de comprobación." 60 | 61 | msgid "Verify checksums" 62 | msgstr "Verificar sumas de comprobación." 63 | 64 | msgid "More GpgEX options" 65 | msgstr "Más opciones de GpgEX" 66 | 67 | msgid "Show the version of GpgEX." 68 | msgstr "Mostrar la versión de GpgEX" 69 | 70 | msgid "Decrypt and verify the marked files." 71 | msgstr "Descifrar y verificar los archivos marcados." 72 | 73 | msgid "Decrypt the marked files." 74 | msgstr "Descifrar los archivos marcados." 75 | 76 | msgid "Verify the marked files." 77 | msgstr "Verificar los archivos marcados." 78 | 79 | msgid "Sign and encrypt the marked files." 80 | msgstr "Firmar y cifrar los archivos marcados." 81 | 82 | msgid "Encrypt the marked files." 83 | msgstr "Cifrar los archivos marcados." 84 | 85 | msgid "Sign the marked files." 86 | msgstr "Firmar los archivos marcados." 87 | 88 | msgid "Import the marked files." 89 | msgstr "Importar los archivos marcados." 90 | 91 | msgid "Create checksums." 92 | msgstr "Crear sumas de comprobación." 93 | 94 | msgid "Verify checksums." 95 | msgstr "Verificar sumas de comprobación." 96 | 97 | msgid "Show more GpgEX options." 98 | msgstr "Mostrar más opciones de GpgEX." 99 | 100 | #. TRANSLATORS: See the source for the full english text. 101 | msgid "-#GpgEXFullHelpText#-" 102 | msgstr "" 103 | 104 | #, c-format 105 | msgid "This is GpgEX version %s (%s)" 106 | msgstr "Esto es GpgEX versión %s (%s)" 107 | 108 | #~ msgid "Help on GpgEX" 109 | #~ msgstr "Ayuda de GpgEX" 110 | 111 | #~ msgid "Invoke the GpgEX documentation." 112 | #~ msgstr "Invocar la documentación de GpgEX." 113 | -------------------------------------------------------------------------------- /po/fr.po: -------------------------------------------------------------------------------- 1 | # French translations for gpgex package. 2 | # Copyright (C) 2015 g10 Code GmbH 3 | # This file is distributed under the same license as the gpgex package. 4 | # 5 | # Olivier Serve , 2015. 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: gpgex 1.0.0\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2015-09-09 12:19+0200\n" 11 | "Last-Translator: Olivier Serve \n" 12 | "Language-Team: French \n" 13 | "Language: de\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Lokalize 1.5\n" 19 | 20 | #, c-format 21 | msgid "" 22 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 23 | "%s" 24 | msgstr "" 25 | "Impossible de se connecter à l'interface utilisateur GnuPG%s%s%s:\r\n" 26 | "%s" 27 | 28 | #, c-format 29 | msgid "" 30 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 31 | "%s" 32 | msgstr "" 33 | "Erreur retournée par l'interface utilisateur GnuPG%s%s%s:\r\n" 34 | "%s" 35 | 36 | msgid "About GpgEX" 37 | msgstr "À propos de GpgEX" 38 | 39 | msgid "Decrypt and verify" 40 | msgstr "Déchiffrer et vérifier" 41 | 42 | msgid "Decrypt" 43 | msgstr "Déchiffrer" 44 | 45 | msgid "Verify" 46 | msgstr "Vérifier" 47 | 48 | msgid "Sign and encrypt" 49 | msgstr "Signer et chiffrer" 50 | 51 | msgid "Encrypt" 52 | msgstr "Chiffrer" 53 | 54 | msgid "Sign" 55 | msgstr "Signer" 56 | 57 | msgid "Import keys" 58 | msgstr "Importer des clés" 59 | 60 | msgid "Create checksums" 61 | msgstr "Créer des sommes de contrôle" 62 | 63 | msgid "Verify checksums" 64 | msgstr "Vérifier les sommes de contrôle" 65 | 66 | msgid "More GpgEX options" 67 | msgstr "Plus d'options GpgEX" 68 | 69 | msgid "Show the version of GpgEX." 70 | msgstr "Voir la version de GpgEX." 71 | 72 | msgid "Decrypt and verify the marked files." 73 | msgstr "Déchiffrer et vérifier les fichiers marqués." 74 | 75 | msgid "Decrypt the marked files." 76 | msgstr "Déchiffrer les fichiers marqués." 77 | 78 | msgid "Verify the marked files." 79 | msgstr "Vérifier les fichiers marqués." 80 | 81 | msgid "Sign and encrypt the marked files." 82 | msgstr "Signer et chiffrer les fichiers marqués." 83 | 84 | msgid "Encrypt the marked files." 85 | msgstr "Chiffrer les fichier marqués" 86 | 87 | msgid "Sign the marked files." 88 | msgstr "Signer les fichiers marqués." 89 | 90 | msgid "Import the marked files." 91 | msgstr "Importer les fichiers marqués." 92 | 93 | msgid "Create checksums." 94 | msgstr "Créer des sommes de contrôle." 95 | 96 | msgid "Verify checksums." 97 | msgstr "Vérifier des sommes de contrôle." 98 | 99 | msgid "Show more GpgEX options." 100 | msgstr "Montrer plus d'options GpgEX." 101 | 102 | #. TRANSLATORS: See the source for the full english text. 103 | msgid "-#GpgEXFullHelpText#-" 104 | msgstr "" 105 | "GpgEX est une extension de l'Explorateur qui lui permet\n" 106 | "de chiffrer ou signer numériquement les données à l'aide de\n" 107 | "PGP / MIME ou du standard Internet S / MIME sur la base\n" 108 | "du logiciel GnuPG ().\n" 109 | "\n" 110 | "GpgEX est un logiciel libre. Vous pouvez l'utiliser dans les conditions\n" 111 | "GNU Lesser General Public License telle que publiée par la Free Software\n" 112 | "Fondation, le redistribuer et / ou le modifier;\n" 113 | "soit la version 2.1 de la Licence, ou (à votre choix)\n" 114 | "toute version ultérieure.\n" 115 | "\n" 116 | "Vous pouvez accéder à la licence GNU Lesser General Public License\n" 117 | "à l'adresse WEB : ." 118 | 119 | #, c-format 120 | msgid "This is GpgEX version %s (%s)" 121 | msgstr "GpgEX Version %s (%s)" 122 | 123 | #~ msgid "Help on GpgEX" 124 | #~ msgstr "Aide sur GpgEX" 125 | 126 | #~ msgid "Invoke the GpgEX documentation." 127 | #~ msgstr "Appel à la documentation GpgEX." 128 | -------------------------------------------------------------------------------- /po/insert-header.sin: -------------------------------------------------------------------------------- 1 | # Sed script that inserts the file called HEADER before the header entry. 2 | # 3 | # At each occurrence of a line starting with "msgid ", we execute the following 4 | # commands. At the first occurrence, insert the file. At the following 5 | # occurrences, do nothing. The distinction between the first and the following 6 | # occurrences is achieved by looking at the hold space. 7 | /^msgid /{ 8 | x 9 | # Test if the hold space is empty. 10 | s/m/m/ 11 | ta 12 | # Yes it was empty. First occurrence. Read the file. 13 | r HEADER 14 | # Output the file's contents by reading the next line. But don't lose the 15 | # current line while doing this. 16 | g 17 | N 18 | bb 19 | :a 20 | # The hold space was nonempty. Following occurrences. Do nothing. 21 | x 22 | :b 23 | } 24 | -------------------------------------------------------------------------------- /po/it.po: -------------------------------------------------------------------------------- 1 | # Italian translations for gpgex package. 2 | # Copyright (C) 2024 Deniz Renzi 3 | # This file is distributed under the same license as the gpgex package. 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: gpgex 1.0.0\n" 8 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 9 | "PO-Revision-Date: 2024-02-10 20:08+0100\n" 10 | "Last-Translator: Denis Renzi \n" 11 | "Language-Team: \n" 12 | "Language: it_IT\n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 17 | "X-Generator: Poedit 2.4.3\n" 18 | 19 | #, c-format 20 | msgid "" 21 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 22 | "%s" 23 | msgstr "" 24 | "Non è possibile connettersi all'interfaccia utente GnuPG%s%s%s:\n" 25 | "%s" 26 | 27 | #, c-format 28 | msgid "" 29 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 30 | "%s" 31 | msgstr "" 32 | "Errore restituito dall'interfaccia utente GnuPG%s%s%s:\r\n" 33 | "%s" 34 | 35 | msgid "About GpgEX" 36 | msgstr "Informazioni su GpgEX" 37 | 38 | msgid "Decrypt and verify" 39 | msgstr "Decrittografare e verificare" 40 | 41 | msgid "Decrypt" 42 | msgstr "Decrittografare" 43 | 44 | msgid "Verify" 45 | msgstr "Verifica" 46 | 47 | msgid "Sign and encrypt" 48 | msgstr "Firmare e crittografare" 49 | 50 | msgid "Encrypt" 51 | msgstr "Cifra" 52 | 53 | msgid "Sign" 54 | msgstr "Firma" 55 | 56 | msgid "Import keys" 57 | msgstr "Importare chiavi" 58 | 59 | msgid "Create checksums" 60 | msgstr "Creare checksum" 61 | 62 | msgid "Verify checksums" 63 | msgstr "Verificare i checksum" 64 | 65 | msgid "More GpgEX options" 66 | msgstr "Altre opzioni GpgEX" 67 | 68 | msgid "Show the version of GpgEX." 69 | msgstr "Mostra la versione di GpgEX." 70 | 71 | msgid "Decrypt and verify the marked files." 72 | msgstr "Decrittografare e verificare i file contrassegnati." 73 | 74 | msgid "Decrypt the marked files." 75 | msgstr "Decrittografare i file contrassegnati." 76 | 77 | msgid "Verify the marked files." 78 | msgstr "Verificare i file contrassegnati." 79 | 80 | msgid "Sign and encrypt the marked files." 81 | msgstr "Firmare e crittografare i file contrassegnati." 82 | 83 | msgid "Encrypt the marked files." 84 | msgstr "Crittografare i file contrassegnati." 85 | 86 | msgid "Sign the marked files." 87 | msgstr "Firmare i file contrassegnati." 88 | 89 | msgid "Import the marked files." 90 | msgstr "Importare i file contrassegnati." 91 | 92 | msgid "Create checksums." 93 | msgstr "Creare checksum." 94 | 95 | msgid "Verify checksums." 96 | msgstr "Verificare i checksum." 97 | 98 | msgid "Show more GpgEX options." 99 | msgstr "Mostra altre opzioni GpgEX." 100 | 101 | #. TRANSLATORS: See the source for the full english text. 102 | msgid "-#GpgEXFullHelpText#-" 103 | msgstr "" 104 | "GpgEX è un'estensione di Explorer che lo rende possibile\n" 105 | "Dati che utilizzano gli standard Internet PGP/MIME o S/MIME\n" 106 | "crittografare e firmare digitalmente. Sullo sfondo c'è\n" 107 | "A questo scopo viene utilizzato il software GnuPG ().\n" 109 | "\n" 110 | "GpgEX è un software gratuito. Puoi farlo alle condizioni\n" 111 | "la GNU Lesser General Public License, come Software Libero\n" 112 | "La Fondazione pubblica, ridistribuisce e/o modifica;\n" 113 | "o secondo la versione 2.1 della licenza o (a tua scelta)\n" 114 | "qualsiasi versione successiva.\n" 115 | "GpgEX viene rilasciato nella speranza che possa esserti utile\n" 116 | "sarà, ma senza alcuna garanzia, anche senza quella implicita\n" 117 | "Garanzia della maturità del mercato o dell'usabilità per uno specifico\n" 118 | "scopo. Vedere GNU Lesser per i dettagli General Public License.\n" 119 | "\n" 120 | "Insieme a GpgEX dovresti ottenere una copia del GNU Lesser General\n" 121 | "Licenza pubblica. In caso contrario, trovalo\n" 122 | "all'indirizzo web " 123 | 124 | #, c-format 125 | msgid "This is GpgEX version %s (%s)" 126 | msgstr "Questa è la versione GpgEX %s (%s)" 127 | 128 | #~ msgid "Help on GpgEX" 129 | #~ msgstr "Guida su GpgEX" 130 | 131 | #~ msgid "Invoke the GpgEX documentation." 132 | #~ msgstr "Richiamare la documentazione GpgEX." 133 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | # Dutch translations for gpgex package. 2 | # Copyright (C) 2018 g10 Code GmbH 3 | # This file is distributed under the same license as the gpgex package. 4 | # Erwin Bronkhorst , 2018. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: GpgEX 1.0.3\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2018-05-23 14:31+0200\n" 11 | "Last-Translator: Erwin Bronkhorst \n" 12 | "Language-Team: \n" 13 | "Language: nl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Poedit 1.8.11\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #, c-format 21 | msgid "" 22 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 23 | "%s" 24 | msgstr "" 25 | "Kan niet met de GnuPG gebuikersinterface verbinden%s%s%s:\r\n" 26 | "%s" 27 | 28 | #, c-format 29 | msgid "" 30 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 31 | "%s" 32 | msgstr "" 33 | "Fout gerapporteerd door de GnuPG gebruikersinterface%s%s%s:\r\n" 34 | "%s" 35 | 36 | msgid "About GpgEX" 37 | msgstr "Over GpgEX" 38 | 39 | msgid "Decrypt and verify" 40 | msgstr "Ontcijferen en verifiëren" 41 | 42 | msgid "Decrypt" 43 | msgstr "Ontcijferen" 44 | 45 | msgid "Verify" 46 | msgstr "Verifiëren" 47 | 48 | msgid "Sign and encrypt" 49 | msgstr "Ondertekenen en versleutelen" 50 | 51 | msgid "Encrypt" 52 | msgstr "Versleutelen" 53 | 54 | msgid "Sign" 55 | msgstr "Ondertekenen" 56 | 57 | msgid "Import keys" 58 | msgstr "Sleutels importeren" 59 | 60 | msgid "Create checksums" 61 | msgstr "Controlesommen maken" 62 | 63 | msgid "Verify checksums" 64 | msgstr "Controlesommen verifiëren" 65 | 66 | msgid "More GpgEX options" 67 | msgstr "Meer opties voor GpgEX" 68 | 69 | msgid "Show the version of GpgEX." 70 | msgstr "De versie van GpgEX weergeven." 71 | 72 | msgid "Decrypt and verify the marked files." 73 | msgstr "De gemarkeerde bestanden ontcijferen en verifiëren." 74 | 75 | msgid "Decrypt the marked files." 76 | msgstr "De gemarkeerde bestanden ontcijferen." 77 | 78 | msgid "Verify the marked files." 79 | msgstr "De gemarkeerde bestanden verifiëren." 80 | 81 | msgid "Sign and encrypt the marked files." 82 | msgstr "De gemarkeerde bestanden ondertekenen en versleutelen." 83 | 84 | msgid "Encrypt the marked files." 85 | msgstr "De geselecteerde bestanden versleutelen." 86 | 87 | msgid "Sign the marked files." 88 | msgstr "De gemarkeerde bestanden ondertekenen." 89 | 90 | msgid "Import the marked files." 91 | msgstr "De gemarkeerde bestanden importeren." 92 | 93 | msgid "Create checksums." 94 | msgstr "Controlesommen maken." 95 | 96 | msgid "Verify checksums." 97 | msgstr "Controlesommen verifiëren." 98 | 99 | msgid "Show more GpgEX options." 100 | msgstr "Meer opties voor GpgEX weergeven." 101 | 102 | #. TRANSLATORS: See the source for the full english text. 103 | msgid "-#GpgEXFullHelpText#-" 104 | msgstr "" 105 | "GpgEX is een invoegtoepassing voor Verkenner voor het versleutelen en " 106 | "ondertekenen van gegevens.\n" 107 | "Het gebruikt de GnuPG-software (http://www.gnupg.org).\n" 108 | "\n" 109 | "GpgEX is vrije software; u kunt het verspreiden en/of aanpassen\n" 110 | "onder de voorwaarden van de GNU Lesser General Public License\n" 111 | "zoals gepubliceerd bij de Free Software Foundation; zowel versie\n" 112 | "2.1 van de licentie, of (naar eigen keuze) elke nieuwere versie.\n" 113 | "\n" 114 | "GpgEX wordt verspreid in de hoop dat het bruikbaar zal zijn,\n" 115 | "maar ZONDER ENIGE GARANTIE; zonder ook maar de impliciete garantie\n" 116 | "van VERKOOPBAARHEID of TOEPASSING VOOR EEN BEPAALD DOEL. Zie de\n" 117 | "GNU Lesser General Public LIcense voor meer details.\n" 118 | "\n" 119 | "U zou een kopie van de GNU Lesser General Public License\n" 120 | "ontvangen moeten hebben bij dit programma; zo niet,\n" 121 | "zie ." 122 | 123 | #, c-format 124 | msgid "This is GpgEX version %s (%s)" 125 | msgstr "Dit is GpgEX versie %s (%s)" 126 | 127 | #~ msgid "Help on GpgEX" 128 | #~ msgstr "Help voor GpgEX" 129 | 130 | #~ msgid "Invoke the GpgEX documentation." 131 | #~ msgstr "De documentatie voor GpgEX raadplegen." 132 | -------------------------------------------------------------------------------- /po/pl.po: -------------------------------------------------------------------------------- 1 | # Polish translations for gpgex package. 2 | # Copyright (C) 2007 g10 Code GmbH 3 | # This file is distributed under the same license as the gpgex package. 4 | # Marcus Brinkmann , 2007. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: gpgex 1.0.0\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2014-10-19 10:25+0100\n" 11 | "Last-Translator: Tomasz Krawczyk \n" 12 | "Language-Team: Polish\n" 13 | "Language: pl\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Poedit 1.6.10\n" 19 | 20 | #, c-format 21 | msgid "" 22 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 23 | "%s" 24 | msgstr "" 25 | "Nie można połączyć się z interfejsem użytkownika GnuPG%s%s%s:\r\n" 26 | "%s" 27 | 28 | #, c-format 29 | msgid "" 30 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 31 | "%s" 32 | msgstr "" 33 | "Błąd zwrócony przez interfejs użytkownika GnuPG%s%s%s:\\r\n" 34 | "%s" 35 | 36 | msgid "About GpgEX" 37 | msgstr "O GpgEX" 38 | 39 | msgid "Decrypt and verify" 40 | msgstr "Rozszyfruj i zweryfikuj" 41 | 42 | msgid "Decrypt" 43 | msgstr "Rozszyfruj" 44 | 45 | msgid "Verify" 46 | msgstr "Weryfikuj" 47 | 48 | msgid "Sign and encrypt" 49 | msgstr "Podpisz i zaszyfruj" 50 | 51 | msgid "Encrypt" 52 | msgstr "Zaszyfruj" 53 | 54 | msgid "Sign" 55 | msgstr "Podpisz" 56 | 57 | msgid "Import keys" 58 | msgstr "Importuj klucze" 59 | 60 | msgid "Create checksums" 61 | msgstr "Utwórz sumy kontrolne" 62 | 63 | msgid "Verify checksums" 64 | msgstr "Zweryfikuj sumy kontrolne" 65 | 66 | msgid "More GpgEX options" 67 | msgstr "Więcej opcji GpgEX" 68 | 69 | msgid "Show the version of GpgEX." 70 | msgstr "Pokaż wersję GpgEX." 71 | 72 | msgid "Decrypt and verify the marked files." 73 | msgstr "Rozszyfruj i zweryfikuj zaznaczone pliki." 74 | 75 | msgid "Decrypt the marked files." 76 | msgstr "Rozszyfruj zaznaczone pliki." 77 | 78 | msgid "Verify the marked files." 79 | msgstr "Zweryfikuj zaznaczone pliki." 80 | 81 | msgid "Sign and encrypt the marked files." 82 | msgstr "Podpisz i zaszyfruj zaznaczone pliki." 83 | 84 | msgid "Encrypt the marked files." 85 | msgstr "Zaszyfruj zaznaczone pliki." 86 | 87 | msgid "Sign the marked files." 88 | msgstr "Podpisz zaznaczone pliki." 89 | 90 | msgid "Import the marked files." 91 | msgstr "Importuj zaznaczone pliki." 92 | 93 | msgid "Create checksums." 94 | msgstr "Utwórz sumy kontrolne." 95 | 96 | msgid "Verify checksums." 97 | msgstr "Zweryfikuj sumy kontrolne." 98 | 99 | msgid "Show more GpgEX options." 100 | msgstr "Pokaż więcej opcji GpgEX." 101 | 102 | #. TRANSLATORS: See the source for the full english text. 103 | msgid "-#GpgEXFullHelpText#-" 104 | msgstr "" 105 | "GpgEX jest pluginem do Exploatora Windows do szyfrowania i podpisywania\n" 106 | "danych. Używa oprogramowania GnuPG (http://www.gnupg.org).\n" 107 | "\n" 108 | "GpgEX jest oprogramowaniem darmowym; możesz je redystrybuować i/lub\n" 109 | "modyfikować na warunkach GNU Lesser General Public License \n" 110 | "i publikowanej przez Free Software Foundation; zarówno\n" 111 | "wersji 2.1 jak i (twoja opcja) jakąkolwiek nowszą wersją.\n" 112 | "\n" 113 | "GpgEX jest dystrybuowany w nadziei, że będzie użyteczny, ale\n" 114 | "BEZ ŻADNEJ GWARANCJI; nawet bez pośredniej gwarancji\n" 115 | "RYNKOWOŚCI lub PRZYDATNOŚCI DLA SZCZEGÓLNEGO CELU.\n" 116 | "Więcej szczegółów w GNU Lesser General Pulbic License.\n" 117 | "\n" 118 | "Powinieneś otrzymać kopię GNU Lesser General Public License\n" 119 | "wraz z tym programem; jeśli nie, zobacz ." 120 | 121 | #, c-format 122 | msgid "This is GpgEX version %s (%s)" 123 | msgstr "To jest GpgEX wersja %s (%s)" 124 | 125 | #~ msgid "Help on GpgEX" 126 | #~ msgstr "Pomoc do GpgEX" 127 | 128 | #~ msgid "Invoke the GpgEX documentation." 129 | #~ msgstr "Otwórz dokumentację GpgEX." 130 | -------------------------------------------------------------------------------- /po/pt.po: -------------------------------------------------------------------------------- 1 | # Translation of GPGex. 2 | # Copyright (C) 2017 g10 Code GmbH 3 | # This file is distributed under the same license as the FIXME:GPGex package. 4 | # Diego Escalante Urrelo , 2008. 5 | # 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: GpgEX\n" 10 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 11 | "PO-Revision-Date: 2017-10-16 13:38+0100\n" 12 | "Last-Translator: Marco A.G.Pinto \n" 13 | "Language-Team: Portuguese \n" 14 | "Language: pt\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "X-Poedit-SourceCharset: UTF-8\n" 19 | "X-Generator: Poedit 2.0.4\n" 20 | 21 | #, c-format 22 | msgid "" 23 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 24 | "%s" 25 | msgstr "" 26 | "Não é possível aceder à interface de utilizador do GnuPG%s%s%s:\r\n" 27 | "%s" 28 | 29 | #, c-format 30 | msgid "" 31 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 32 | "%s" 33 | msgstr "" 34 | "Erro retornado pela interface de utilizador do GnuPG%s%s%s:\r\n" 35 | "%s" 36 | 37 | msgid "About GpgEX" 38 | msgstr "Sobre o GpgEX" 39 | 40 | msgid "Decrypt and verify" 41 | msgstr "Desencriptar e verificar" 42 | 43 | msgid "Decrypt" 44 | msgstr "Desencriptar" 45 | 46 | msgid "Verify" 47 | msgstr "Verificar" 48 | 49 | msgid "Sign and encrypt" 50 | msgstr "Assinar e encriptar" 51 | 52 | msgid "Encrypt" 53 | msgstr "Encriptar" 54 | 55 | msgid "Sign" 56 | msgstr "Assinar" 57 | 58 | msgid "Import keys" 59 | msgstr "Importar chaves" 60 | 61 | msgid "Create checksums" 62 | msgstr "Criar checksums" 63 | 64 | msgid "Verify checksums" 65 | msgstr "Verificar checksums" 66 | 67 | msgid "More GpgEX options" 68 | msgstr "Mais opções do GpgEX" 69 | 70 | msgid "Show the version of GpgEX." 71 | msgstr "Mostrar a versão do GpgEX." 72 | 73 | msgid "Decrypt and verify the marked files." 74 | msgstr "Desencriptar e verificar os ficheiros marcados." 75 | 76 | msgid "Decrypt the marked files." 77 | msgstr "Desencriptar os ficheiros marcados." 78 | 79 | msgid "Verify the marked files." 80 | msgstr "Verificar os ficheiros marcados." 81 | 82 | msgid "Sign and encrypt the marked files." 83 | msgstr "Assinar e encriptar os ficheiros marcados." 84 | 85 | msgid "Encrypt the marked files." 86 | msgstr "Encriptar os ficheiros marcados." 87 | 88 | msgid "Sign the marked files." 89 | msgstr "Assinar os ficheiros marcados." 90 | 91 | msgid "Import the marked files." 92 | msgstr "Importar os ficheiros marcados." 93 | 94 | msgid "Create checksums." 95 | msgstr "Criar checksums." 96 | 97 | msgid "Verify checksums." 98 | msgstr "Verificar checksums." 99 | 100 | msgid "Show more GpgEX options." 101 | msgstr "Mostrar mais opções do GpgEX." 102 | 103 | #. TRANSLATORS: See the source for the full english text. 104 | msgid "-#GpgEXFullHelpText#-" 105 | msgstr "" 106 | "O GpgEX é um plug-in Explorer para encriptar e assinar dados.\n" 107 | "Ele usa o software GnuPG (http://www.gnupg.org).\n" 108 | "\n" 109 | "O GpgEX é software livre; podes redistribuí-lo e/ou\n" 110 | "modificá-lo nos termos da GNU Lesser General Public\n" 111 | "License, como está publicado pela Free Software Foundation; quer\n" 112 | "a versão 2.1 da Licença, ou (à tua escolha) qualquer versão posterior.\n" 113 | "\n" 114 | "O GpgEX é distribuído na esperança que possa ser útil,\n" 115 | "mas SEM QUALQUER GARANTIA; nem mesmo a garantia implícita de\n" 116 | "MERCANTIBILIDADE ou APTIDÃO PARA UMA FINALIDADE ESPECÍFICA. Vê a\n" 117 | "GNU Lesser General Public License para mais detalhes.\n" 118 | "\n" 119 | "Deves ter recebido uma cópia da GNU Lesser General Public License\n" 120 | "juntamente com este programa; se não, vê ." 121 | 122 | #, c-format 123 | msgid "This is GpgEX version %s (%s)" 124 | msgstr "Este é o GpgEX versão %s (%s)" 125 | 126 | #~ msgid "Help on GpgEX" 127 | #~ msgstr "Ajuda do GpgEX" 128 | 129 | #~ msgid "Invoke the GpgEX documentation." 130 | #~ msgstr "Invocar a documentação do GpgEX." 131 | -------------------------------------------------------------------------------- /po/quot.sed: -------------------------------------------------------------------------------- 1 | s/"\([^"]*\)"/“\1”/g 2 | s/`\([^`']*\)'/‘\1’/g 3 | s/ '\([^`']*\)' / ‘\1’ /g 4 | s/ '\([^`']*\)'$/ ‘\1’/g 5 | s/^'\([^`']*\)' /‘\1’ /g 6 | s/“”/""/g 7 | -------------------------------------------------------------------------------- /po/remove-potcdate.sin: -------------------------------------------------------------------------------- 1 | # Sed script that remove the POT-Creation-Date line in the header entry 2 | # from a POT file. 3 | # 4 | # The distinction between the first and the following occurrences of the 5 | # pattern is achieved by looking at the hold space. 6 | /^"POT-Creation-Date: .*"$/{ 7 | x 8 | # Test if the hold space is empty. 9 | s/P/P/ 10 | ta 11 | # Yes it was empty. First occurrence. Remove the line. 12 | g 13 | d 14 | bb 15 | :a 16 | # The hold space was nonempty. Following occurrences. Do nothing. 17 | x 18 | :b 19 | } 20 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR g10 Code GmbH 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: GpgEX\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2016-05-10 08:40+0200\n" 11 | "Last-Translator: Sergei Smirnov \n" 12 | "Language-Team: Sergei Smirnov \n" 13 | "Language: \n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=utf-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Poedit-Language: Russian\n" 18 | "X-Poedit-Country: RUSSIAN FEDERATION\n" 19 | 20 | #, fuzzy, c-format 21 | msgid "" 22 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 23 | "%s" 24 | msgstr "" 25 | "Нет доступа к программе UI-server%s%s%s:\\r\n" 26 | "%s" 27 | 28 | #, c-format 29 | msgid "" 30 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 31 | "%s" 32 | msgstr "" 33 | 34 | msgid "About GpgEX" 35 | msgstr "" 36 | 37 | msgid "Decrypt and verify" 38 | msgstr "Расшифровать и проверить" 39 | 40 | msgid "Decrypt" 41 | msgstr "Расшифровать" 42 | 43 | msgid "Verify" 44 | msgstr "Проверить" 45 | 46 | msgid "Sign and encrypt" 47 | msgstr "Подписать и Зашифровать" 48 | 49 | msgid "Encrypt" 50 | msgstr "Зашифровать" 51 | 52 | msgid "Sign" 53 | msgstr "Подписать" 54 | 55 | msgid "Import keys" 56 | msgstr "Импортировать ключи" 57 | 58 | msgid "Create checksums" 59 | msgstr "Создать контрольные суммы" 60 | 61 | msgid "Verify checksums" 62 | msgstr "Проверить контрольные суммы" 63 | 64 | msgid "More GpgEX options" 65 | msgstr "Другие параметры GpgEX" 66 | 67 | msgid "Show the version of GpgEX." 68 | msgstr "" 69 | 70 | msgid "Decrypt and verify the marked files." 71 | msgstr "Расшифровать и проверить отмеченные файлы." 72 | 73 | msgid "Decrypt the marked files." 74 | msgstr "Расшифровать отмеченные файлы." 75 | 76 | msgid "Verify the marked files." 77 | msgstr "Проверить отмеченные файлы." 78 | 79 | msgid "Sign and encrypt the marked files." 80 | msgstr "подписать и Зашифровать отмеченные файлы." 81 | 82 | msgid "Encrypt the marked files." 83 | msgstr "Зашифровать отмеченные файлы." 84 | 85 | msgid "Sign the marked files." 86 | msgstr "Подписать отмеченные файлы." 87 | 88 | msgid "Import the marked files." 89 | msgstr "Импортировать отмеченные файлы." 90 | 91 | msgid "Create checksums." 92 | msgstr "Создать контрольные суммы." 93 | 94 | msgid "Verify checksums." 95 | msgstr "Проверить контрольные суммы." 96 | 97 | msgid "Show more GpgEX options." 98 | msgstr "Другие параметры GpgEX." 99 | 100 | #. TRANSLATORS: See the source for the full english text. 101 | msgid "-#GpgEXFullHelpText#-" 102 | msgstr "" 103 | 104 | #, c-format 105 | msgid "This is GpgEX version %s (%s)" 106 | msgstr "" 107 | 108 | #~ msgid "Help on GpgEX" 109 | #~ msgstr "Помощь по GpgEX" 110 | 111 | #~ msgid "Invoke the GpgEX documentation." 112 | #~ msgstr "Открыть документацию GpgEX." 113 | -------------------------------------------------------------------------------- /po/zh_CN.po: -------------------------------------------------------------------------------- 1 | # Chinese (China) Translation. 2 | # Copyright (C) 2015 Free Software Foundation, Inc. 3 | # This file is distributed under the same license as the GpgEx package. 4 | # Mingye Wang (Arthur2e5) ,2015. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: GpgEX\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2015-08-15 20:50+0800\n" 11 | "Last-Translator: Mingye Wang (Arthur2e5) \n" 12 | "Language-Team: \n" 13 | "Language: zh_CN\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Poedit 1.8.4\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | 20 | #, c-format 21 | msgid "" 22 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 23 | "%s" 24 | msgstr "" 25 | "无法连接到 GnuPG 用户界面%s%s%s:\n" 26 | "%s" 27 | 28 | #, c-format 29 | msgid "" 30 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 31 | "%s" 32 | msgstr "" 33 | "GnuPG 用户界面返回的错误%s%s%s:\n" 34 | "%s" 35 | 36 | msgid "About GpgEX" 37 | msgstr "关于 GpgEX" 38 | 39 | msgid "Decrypt and verify" 40 | msgstr "解密并验证" 41 | 42 | msgid "Decrypt" 43 | msgstr "解密" 44 | 45 | msgid "Verify" 46 | msgstr "验证" 47 | 48 | msgid "Sign and encrypt" 49 | msgstr "签名并加密" 50 | 51 | msgid "Encrypt" 52 | msgstr "加密" 53 | 54 | msgid "Sign" 55 | msgstr "签名" 56 | 57 | msgid "Import keys" 58 | msgstr "导入密钥" 59 | 60 | msgid "Create checksums" 61 | msgstr "生成校验值" 62 | 63 | msgid "Verify checksums" 64 | msgstr "验证校验值" 65 | 66 | msgid "More GpgEX options" 67 | msgstr "更多 GpgEX 选项" 68 | 69 | msgid "Show the version of GpgEX." 70 | msgstr "显示 GpgEx 版本。" 71 | 72 | msgid "Decrypt and verify the marked files." 73 | msgstr "解密并验证选中的文件。" 74 | 75 | msgid "Decrypt the marked files." 76 | msgstr "解密选中的文件。" 77 | 78 | msgid "Verify the marked files." 79 | msgstr "验证选中的文件。" 80 | 81 | msgid "Sign and encrypt the marked files." 82 | msgstr "签名并加密选中的文件。" 83 | 84 | msgid "Encrypt the marked files." 85 | msgstr "加密选中的文件。" 86 | 87 | msgid "Sign the marked files." 88 | msgstr "签名选中的文件。" 89 | 90 | msgid "Import the marked files." 91 | msgstr "导入选中的文件。" 92 | 93 | msgid "Create checksums." 94 | msgstr "生成校验值。" 95 | 96 | msgid "Verify checksums." 97 | msgstr "验证校验值。" 98 | 99 | msgid "Show more GpgEX options." 100 | msgstr "显示更多 GpgEX 选项。" 101 | 102 | #. TRANSLATORS: See the source for the full english text. 103 | msgid "-#GpgEXFullHelpText#-" 104 | msgstr "" 105 | "GpgEX 是用于资源管理器的数据加密和签名插件。\n" 106 | "它使用 GnuPG 软件 (http://www.gnupg.org)。\n" 107 | "\n" 108 | "GpgEX 是自由软件;你可以按照 GNU Lesser General Public License\n" 109 | "(以自由软件基金会发布的版本为准)版本 2.1 或(如你所愿)任意更新的版本\n" 110 | "使用和分发它。\n" 111 | "\n" 112 | "GpgEX 在希望其能够有用的情况下分发,但不含任何保证——甚至不含隐含的\n" 113 | "对其商品性和对特定用途的适用性的保证。要获取更多信息,请参阅 GNU LGPL。\n" 114 | "你应当与本程序一起获得了一份 GNU Lesser General Public Licence 的副本;\n" 115 | "若没有,请参见 。" 116 | 117 | #, c-format 118 | msgid "This is GpgEX version %s (%s)" 119 | msgstr "这里是 GpgEX 版本 %s (%s)" 120 | 121 | #~ msgid "Help on GpgEX" 122 | #~ msgstr "GpgEX 帮助" 123 | 124 | #~ msgid "Invoke the GpgEX documentation." 125 | #~ msgstr "调用 GpgEx 文档。" 126 | -------------------------------------------------------------------------------- /po/zh_TW.po: -------------------------------------------------------------------------------- 1 | # Chinese (Taiwan) Translation. 2 | # Copyright (C) 2015 Free Software Foundation, Inc. 3 | # This file is distributed under the same license as the GpgEx package. 4 | # Mingye Wang (Arthur2e5) ,2015. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: GpgEX\n" 9 | "Report-Msgid-Bugs-To: http://bugs.gnupg.org\n" 10 | "PO-Revision-Date: 2015-08-15 20:50+0800\n" 11 | "Last-Translator: Mingye Wang (Arthur2e5) \n" 12 | "Language-Team: \n" 13 | "Language: zh_TW\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "X-Generator: Poedit 1.8.4\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | 20 | #, c-format 21 | msgid "" 22 | "Can not connect to the GnuPG user interface%s%s%s:\r\n" 23 | "%s" 24 | msgstr "" 25 | "無法連線到 GnuPG 使用者介面%s%s%s:\n" 26 | "%s" 27 | 28 | #, c-format 29 | msgid "" 30 | "Error returned by the GnuPG user interface%s%s%s:\r\n" 31 | "%s" 32 | msgstr "" 33 | "GnuPG 使用者介面返回的錯誤%s%s%s:\n" 34 | "%s" 35 | 36 | msgid "About GpgEX" 37 | msgstr "關於 GpgEX" 38 | 39 | msgid "Decrypt and verify" 40 | msgstr "解密並驗證" 41 | 42 | msgid "Decrypt" 43 | msgstr "解密" 44 | 45 | msgid "Verify" 46 | msgstr "驗證" 47 | 48 | msgid "Sign and encrypt" 49 | msgstr "簽名並加密" 50 | 51 | msgid "Encrypt" 52 | msgstr "加密" 53 | 54 | msgid "Sign" 55 | msgstr "簽名" 56 | 57 | msgid "Import keys" 58 | msgstr "匯入金鑰" 59 | 60 | msgid "Create checksums" 61 | msgstr "生成校驗值" 62 | 63 | msgid "Verify checksums" 64 | msgstr "驗證校驗值" 65 | 66 | msgid "More GpgEX options" 67 | msgstr "更多 GpgEX 選項" 68 | 69 | msgid "Show the version of GpgEX." 70 | msgstr "顯示 GpgEx 版本。" 71 | 72 | msgid "Decrypt and verify the marked files." 73 | msgstr "解密並驗證選中的檔案。" 74 | 75 | msgid "Decrypt the marked files." 76 | msgstr "解密選中的檔案。" 77 | 78 | msgid "Verify the marked files." 79 | msgstr "驗證選中的檔案。" 80 | 81 | msgid "Sign and encrypt the marked files." 82 | msgstr "簽名並加密選中的檔案。" 83 | 84 | msgid "Encrypt the marked files." 85 | msgstr "加密選中的檔案。" 86 | 87 | msgid "Sign the marked files." 88 | msgstr "簽名選中的檔案。" 89 | 90 | msgid "Import the marked files." 91 | msgstr "匯入選中的檔案。" 92 | 93 | msgid "Create checksums." 94 | msgstr "生成校驗值。" 95 | 96 | msgid "Verify checksums." 97 | msgstr "驗證校驗值。" 98 | 99 | msgid "Show more GpgEX options." 100 | msgstr "顯示更多 GpgEX 選項。" 101 | 102 | #. TRANSLATORS: See the source for the full english text. 103 | msgid "-#GpgEXFullHelpText#-" 104 | msgstr "" 105 | "GpgEX 是用於資源管理器的資料加密和簽名外掛。\n" 106 | "它使用 GnuPG 軟體 (http://www.gnupg.org)。\n" 107 | "\n" 108 | "GpgEX 是自由軟體;你可以按照 GNU Lesser General Public License\n" 109 | "(以自由軟體基金會發布的版本為準)版本 2.1 或(如你所願)任意更新的版本\n" 110 | "使用和分發它。\n" 111 | "\n" 112 | "GpgEX 在希望其能夠有用的情況下分發,但不含任何保證——甚至不含隱含的\n" 113 | "對其商品性和對特定用途的適用性的保證。要獲取更多資訊,請參閱 GNU LGPL。\n" 114 | "你應當與本程式一起獲得了一份 GNU Lesser General Public Licence 的副本;\n" 115 | "若沒有,請參見 。" 116 | 117 | #, c-format 118 | msgid "This is GpgEX version %s (%s)" 119 | msgstr "這裡是 GpgEX 版本 %s (%s)" 120 | 121 | #~ msgid "Help on GpgEX" 122 | #~ msgstr "GpgEX 幫助" 123 | 124 | #~ msgid "Invoke the GpgEX documentation." 125 | #~ msgstr "呼叫 GpgEx 文件。" 126 | -------------------------------------------------------------------------------- /src/GNU.GnuPG.Gcc64Support.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Makefile.am: -------------------------------------------------------------------------------- 1 | # Makefile.am - main makefile for dialogs part of GpgEX 2 | # Copyright (C) 2005, 2007, 2013 g10 Code GmbH 3 | # 4 | # This file is free software; as a special exception the author gives 5 | # unlimited permission to copy and/or distribute it, with or without 6 | # modifications, as long as this notice is preserved. 7 | # 8 | # This program is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 10 | # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | 12 | ## Process this file with automake to produce Makefile.in 13 | 14 | bin_PROGRAMS = gpgex 15 | EXTRA_DIST = versioninfo.rc.in gpgex.manifest.in \ 16 | GNU.GnuPG.Gcc64Support.manifest gnupg.ico \ 17 | gpgex_logo.svg standalone.svg 18 | EXEEXT = .dll 19 | 20 | AM_CFLAGS = $(LIBASSUAN_CFLAGS) $(GPG_ERROR_CFLAGS) -shared 21 | AM_CXXFLAGS = $(LIBASSUAN_CFLAGS) $(GPG_ERROR_CFLAGS) -shared 22 | 23 | ICONS = icon-16.png 24 | 25 | nodist_gpgex_SOURCES = versioninfo.rc gpgex.manifest 26 | gpgex_SOURCES = \ 27 | gpgex.def \ 28 | registry.h registry.c \ 29 | exechelp.h exechelp.c \ 30 | gpgex-class.h gpgex-class.cc \ 31 | gpgex-factory.h gpgex-factory.cc \ 32 | gpgex.h gpgex.cc \ 33 | client.h client.cc \ 34 | main.h debug.h main.cc \ 35 | resource.h \ 36 | $(ICONS) 37 | 38 | if HAVE_W64_SYSTEM 39 | libgpg-error.a: 40 | if [ -e "$$($(GPG_ERROR_CONFIG) --prefix)/lib64/libgpg-error.a" ]; then \ 41 | ln -sf $$($(GPG_ERROR_CONFIG) --prefix)/lib64/libgpg-error.a .; \ 42 | else \ 43 | ln -sf $$($(GPG_ERROR_CONFIG) --prefix)/lib/libgpg-error.a .; \ 44 | fi 45 | else 46 | libgpg-error.a: 47 | ln -sf $$($(GPG_ERROR_CONFIG) --prefix)/lib/libgpg-error.a . 48 | endif 49 | 50 | if HAVE_W64_SYSTEM 51 | libassuan.a: 52 | if [ -e "$$($(LIBASSUAN_CONFIG) --prefix)/lib64/libassuan.a" ]; then \ 53 | ln -sf $$($(LIBASSUAN_CONFIG) --prefix)/lib64/libassuan.a .; \ 54 | else \ 55 | ln -sf $$($(LIBASSUAN_CONFIG) --prefix)/lib/libassuan.a .; \ 56 | fi 57 | else 58 | libassuan.a: 59 | ln -sf $$($(LIBASSUAN_CONFIG) --prefix)/lib/libassuan.a . 60 | endif 61 | 62 | clean-local: 63 | rm -f libgpg-error.a libassuan.a 64 | 65 | #gpgex_LDADD = $(srcdir)/gpgex.def \ 66 | # -L . -lshell32 -lcomdlg32 -ladvapi32 67 | 68 | gpgex_LDFLAGS = -static-libgcc -static-libstdc++ 69 | # We need -loleaut32 for start_help() in gpgex.cc. 70 | gpgex_LDADD = $(srcdir)/gpgex.def -L . \ 71 | -lshell32 -lgdi32 -lole32 -luuid -lgdiplus \ 72 | ./libassuan.a ./libgpg-error.a -lws2_32 -loleaut32 73 | 74 | .rc.o: 75 | $(WINDRES) -I $(srcdir) -I . `test -f '$<' || echo '$(srcdir)/'`$< $@ 76 | -------------------------------------------------------------------------------- /src/README.ext: -------------------------------------------------------------------------------- 1 | Shell Extensions 2 | ================ 3 | 4 | The following extensions are available: 5 | 6 | IPersistFile group: 7 | 8 | Icon 9 | Data 10 | Drop 11 | 12 | IShellExtInit group: 13 | 14 | Shortcut IContextMenu 15 | Drag-and-drop 16 | Property sheet 17 | 18 | 19 | IShellExtInit 20 | ============= 21 | 22 | http://msdn2.microsoft.com/en-us/library/aa969351.aspx 23 | 24 | Has a single method beyond IUnknown which is called first after 25 | creating a new instance of a shortcut, drag and drop or property sheet 26 | extension. 27 | 28 | STDMETHODIMP Initialize (LPCITEMIDLIST pIDFolder, IDataObject *pDataObj, 29 | HKEY hRegKey) 30 | 31 | The argument pIDFolder is a pointer to an ITEMIDLIST structure which 32 | identifies a folder. The pDataObj argument is a pointer to an 33 | IDataObject which specifies the objects acted upon. hRegKey is the 34 | registry key for the file object or folder type. 35 | 36 | 37 | Shortcut menu 38 | ------------- 39 | 40 | In this case, pIDFolder is NULL for file objects, and the respective 41 | folder for folder background shortcut menus. pDataObj refers to the 42 | selected files. hRegKey refers to the file object with focus. 43 | 44 | 45 | Drag and drop 46 | ------------- 47 | 48 | In this case, pIDFolder specifies the target folder. pDataObj are the 49 | items being dropped. hRegKey refers to the target folder. 50 | 51 | 52 | Property sheet 53 | -------------- 54 | 55 | In this case, pIDFolder is NULL. 56 | 57 | 58 | IContextMenu 59 | ============ 60 | 61 | http://msdn2.microsoft.com/en-us/library/aa969384.aspx 62 | -------------------------------------------------------------------------------- /src/client.h: -------------------------------------------------------------------------------- 1 | /* client.h - gpgex assuan client interface 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef CLIENT_H 22 | #define CLIENT_H 23 | 24 | #include 25 | #include 26 | 27 | using std::vector; 28 | using std::string; 29 | 30 | #include 31 | 32 | class client_t 33 | { 34 | private: 35 | HWND window; 36 | 37 | void call_assuan (const char *cmd, vector &filenames); 38 | 39 | public: 40 | client_t (HWND window_handle) 41 | : window (window_handle) 42 | { 43 | } 44 | 45 | void decrypt_verify (vector &filenames); 46 | void decrypt (vector &filenames); 47 | void verify (vector &filenames); 48 | void sign_encrypt (vector &filenames); 49 | void encrypt (vector &filenames); 50 | void sign (vector &filenames); 51 | void import (vector &filenames); 52 | void create_checksums (vector &filenames); 53 | void verify_checksums (vector &filenames); 54 | }; 55 | 56 | #endif /* ! CLIENT_H */ 57 | -------------------------------------------------------------------------------- /src/debug.h: -------------------------------------------------------------------------------- 1 | /* debug.h - trace prototypes 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef DEBUG_H 22 | #define DEBUG_H 1 23 | 24 | #include 25 | 26 | #include 27 | 28 | #ifdef __cplusplus 29 | extern "C" { 30 | #if 0 31 | } 32 | #endif 33 | #endif 34 | 35 | 36 | #define DEBUG_INIT 1 37 | #define DEBUG_CONTEXT_MENU 2 38 | #define DEBUG_ASSUAN 4 39 | 40 | /* No flags on means no debugging. */ 41 | extern unsigned int debug_flags; 42 | 43 | /* Debug log stream. */ 44 | extern FILE *debug_file; 45 | 46 | 47 | #define STRINGIFY(v) #v 48 | 49 | /* Log the formatted string FORMAT in categories FLAGS. */ 50 | void _gpgex_debug (unsigned int flags, const char *format, ...); 51 | 52 | #define _TRACE(lvl, name, tag) \ 53 | int _gpgex_trace_level = lvl; \ 54 | const char *const _gpgex_trace_func = name; \ 55 | const char *const _gpgex_trace_tagname = STRINGIFY (tag); \ 56 | void *_gpgex_trace_tag = (void *) tag 57 | 58 | #define TRACE_BEG(lvl, name, tag) \ 59 | _TRACE (lvl, name, tag); \ 60 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter\n", \ 61 | _gpgex_trace_func, _gpgex_trace_tagname, \ 62 | _gpgex_trace_tag) 63 | #define TRACE_BEG0(lvl, name, tag, fmt) \ 64 | _TRACE (lvl, name, tag); \ 65 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 66 | _gpgex_trace_func, _gpgex_trace_tagname, \ 67 | _gpgex_trace_tag) 68 | #define TRACE_BEG1(lvl, name, tag, fmt, arg1) \ 69 | _TRACE (lvl, name, tag); \ 70 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 71 | _gpgex_trace_func, _gpgex_trace_tagname, \ 72 | _gpgex_trace_tag, arg1) 73 | #define TRACE_BEG2(lvl, name, tag, fmt, arg1, arg2) \ 74 | _TRACE (lvl, name, tag); \ 75 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 76 | _gpgex_trace_func, _gpgex_trace_tagname, \ 77 | _gpgex_trace_tag, arg1, arg2) 78 | #define TRACE_BEG3(lvl, name, tag, fmt, arg1, arg2, arg3) \ 79 | _TRACE (lvl, name, tag); \ 80 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 81 | _gpgex_trace_func, _gpgex_trace_tagname, \ 82 | _gpgex_trace_tag, arg1, arg2, arg3) 83 | #define TRACE_BEG4(lvl, name, tag, fmt, arg1, arg2, arg3, arg4) \ 84 | _TRACE (lvl, name, tag); \ 85 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 86 | _gpgex_trace_func, _gpgex_trace_tagname, \ 87 | _gpgex_trace_tag, arg1, arg2, arg3, arg4) 88 | #define TRACE_BEG5(lvl, name, tag, fmt, arg1, arg2, arg3, arg4, arg5) \ 89 | _TRACE (lvl, name, tag); \ 90 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 91 | _gpgex_trace_func, _gpgex_trace_tagname, \ 92 | _gpgex_trace_tag, arg1, arg2, arg3, arg4, arg5) 93 | #define TRACE_BEG12(lvl, name, tag, fmt, arg1, arg2, arg3, arg4, \ 94 | arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) \ 95 | _TRACE (lvl, name, tag); \ 96 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 97 | _gpgex_trace_func, _gpgex_trace_tagname, \ 98 | _gpgex_trace_tag, arg1, arg2, arg3, arg4, arg5, arg6, \ 99 | arg7, arg8, arg9, arg10, arg11, arg12) 100 | #define TRACE_BEG13(lvl, name, tag, fmt, arg1, arg2, arg3, arg4, \ 101 | arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, \ 102 | arg13) \ 103 | _TRACE (lvl, name, tag); \ 104 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 105 | _gpgex_trace_func, _gpgex_trace_tagname, \ 106 | _gpgex_trace_tag, arg1, arg2, arg3, arg4, arg5, arg6, \ 107 | arg7, arg8, arg9, arg10, arg11, arg12, arg13) 108 | #define TRACE_BEG22(lvl, name, tag, fmt, arg1, arg2, arg3, arg4, \ 109 | arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, \ 110 | arg13, arg14, arg15, arg16, arg17, arg18, arg19, \ 111 | arg20, arg21, arg22) \ 112 | _TRACE (lvl, name, tag); \ 113 | _gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): enter: " fmt "\n", \ 114 | _gpgex_trace_func, _gpgex_trace_tagname, \ 115 | _gpgex_trace_tag, arg1, arg2, arg3, arg4, arg5, arg6, \ 116 | arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, \ 117 | arg15, arg16, arg17, arg18, arg19, arg20, arg21, \ 118 | arg22) 119 | 120 | #define TRACE(lvl, name, tag) \ 121 | (_gpgex_debug (lvl, "%s (%s=0x%x): call\n", \ 122 | name, STRINGIFY (tag), (void *)(uintptr_t)tag), 0) 123 | #define TRACE0(lvl, name, tag, fmt) \ 124 | (_gpgex_debug (lvl, "%s (%s=0x%x): call: " fmt "\n", \ 125 | name, STRINGIFY (tag), (void *) tag), 0) 126 | #define TRACE1(lvl, name, tag, fmt, arg1) \ 127 | (_gpgex_debug (lvl, "%s (%s=0x%x): call: " fmt "\n", \ 128 | name, STRINGIFY (tag), (void *) tag, arg1), 0) 129 | #define TRACE2(lvl, name, tag, fmt, arg1, arg2) \ 130 | (_gpgex_debug (lvl, "%s (%s=0x%x): call: " fmt "\n", \ 131 | name, STRINGIFY (tag), (void *) tag, arg1, arg2), 0) 132 | #define TRACE3(lvl, name, tag, fmt, arg1, arg2, arg3) \ 133 | (_gpgex_debug (lvl, "%s (%s=0x%x): call: " fmt "\n", \ 134 | name, STRINGIFY (tag), (void *) tag, arg1, arg2, \ 135 | arg3), 0) 136 | #define TRACE6(lvl, name, tag, fmt, arg1, arg2, arg3, arg4, arg5, arg6) \ 137 | (_gpgex_debug (lvl, "%s (%s=0x%x): call: " fmt "\n", \ 138 | name, STRINGIFY (tag), (void *) tag, arg1, arg2, arg3, \ 139 | arg4, arg5, arg6), 0) 140 | 141 | #define TRACE_GPGERR(err) \ 142 | err == 0 ? (TRACE_SUC ()) : \ 143 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): error: %s <%s>\n", \ 144 | _gpgex_trace_func, _gpgex_trace_tagname, \ 145 | _gpgex_trace_tag, gpg_strerror (err), \ 146 | gpg_strsource (err)), (err)) 147 | 148 | #define TRACE_RES(err) \ 149 | err == S_OK ? (TRACE_SUC ()) : \ 150 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): %s: ec=%x\n", \ 151 | _gpgex_trace_func, _gpgex_trace_tagname, \ 152 | _gpgex_trace_tag, \ 153 | SUCCEEDED (err) ? "leave" : "error", \ 154 | err), (err)) 155 | 156 | #define TRACE_SUC() \ 157 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): leave\n", \ 158 | _gpgex_trace_func, _gpgex_trace_tagname, \ 159 | _gpgex_trace_tag), 0) 160 | #define TRACE_SUC0(fmt) \ 161 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): leave: " fmt "\n", \ 162 | _gpgex_trace_func, _gpgex_trace_tagname, \ 163 | _gpgex_trace_tag), 0) 164 | #define TRACE_SUC1(fmt, arg1) \ 165 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): leave: " fmt "\n", \ 166 | _gpgex_trace_func, _gpgex_trace_tagname, \ 167 | _gpgex_trace_tag, arg1), 0) 168 | #define TRACE_SUC2(fmt, arg1, arg2) \ 169 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): leave: " fmt "\n", \ 170 | _gpgex_trace_func, _gpgex_trace_tagname, \ 171 | _gpgex_trace_tag, arg1, arg2), 0) 172 | #define TRACE_SUC5(fmt, arg1, arg2, arg3, arg4, arg5) \ 173 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): leave: " fmt "\n", \ 174 | _gpgex_trace_func, _gpgex_trace_tagname, \ 175 | _gpgex_trace_tag, arg1, arg2, arg3, arg4, arg5), 0) 176 | 177 | #define TRACE_LOG(fmt) \ 178 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): check: " fmt "\n", \ 179 | _gpgex_trace_func, _gpgex_trace_tagname, \ 180 | _gpgex_trace_tag), 0) 181 | #define TRACE_LOG1(fmt, arg1) \ 182 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): check: " fmt "\n", \ 183 | _gpgex_trace_func, _gpgex_trace_tagname, \ 184 | _gpgex_trace_tag, arg1), 0) 185 | #define TRACE_LOG2(fmt, arg1, arg2) \ 186 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): check: " fmt "\n", \ 187 | _gpgex_trace_func, _gpgex_trace_tagname, \ 188 | _gpgex_trace_tag, arg1, arg2), 0) 189 | #define TRACE_LOG3(fmt, arg1, arg2, arg3) \ 190 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): check: " fmt "\n", \ 191 | _gpgex_trace_func, _gpgex_trace_tagname, \ 192 | _gpgex_trace_tag, arg1, arg2, arg3), 0) 193 | #define TRACE_LOG4(fmt, arg1, arg2, arg3, arg4) \ 194 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): check: " fmt "\n", \ 195 | _gpgex_trace_func, _gpgex_trace_tagname, \ 196 | _gpgex_trace_tag, arg1, arg2, arg3, arg4), 0) 197 | #define TRACE_LOG6(fmt, arg1, arg2, arg3, arg4, arg5, arg6) \ 198 | (_gpgex_debug (_gpgex_trace_level, "%s (%s=0x%x): check: " fmt "\n", \ 199 | _gpgex_trace_func, _gpgex_trace_tagname, \ 200 | _gpgex_trace_tag, arg1, arg2, arg3, arg4, arg5, \ 201 | arg6), 0) 202 | 203 | #ifdef __cplusplus 204 | #if 0 205 | { 206 | #endif 207 | } 208 | #endif 209 | 210 | #endif 211 | -------------------------------------------------------------------------------- /src/exechelp.h: -------------------------------------------------------------------------------- 1 | /* exechelp.h - fork and exec helpers 2 | * Copyright (C) 2004, 2007 g10 Code GmbH 3 | * 4 | * This file is part of GpgEX. 5 | * 6 | * GpgEX is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * GpgEX is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 19 | */ 20 | 21 | #ifndef GPGEX_EXECHELP_H 22 | #define GPGEX_EXECHELP_H 23 | 24 | #include 25 | 26 | #ifdef __cplusplus 27 | extern "C" { 28 | #if 0 29 | } 30 | #endif 31 | #endif 32 | 33 | #define lock_spawn_t HANDLE 34 | 35 | gpg_error_t gpgex_lock_spawning (lock_spawn_t *lock); 36 | void gpgex_unlock_spawning (lock_spawn_t *lock); 37 | 38 | /* Fork and exec CMDLINE with /dev/null as stdin, stdout and stderr. 39 | Returns 0 on success or an error code. */ 40 | gpg_error_t gpgex_spawn_detached (const char *pgmname, const char *cmdline); 41 | 42 | /* Fork and exec PGMNAME with args in CMDLINE and /dev/null connected 43 | * to stdin and stderr. Read from stdout and return the result as a 44 | * malloced string at R_STRING. Returns 0 on success or an error code. */ 45 | gpg_error_t gpgex_spawn_get_string (const char *pgmname, const char *cmdline, 46 | char **r_string); 47 | 48 | 49 | #ifdef __cplusplus 50 | #if 0 51 | { 52 | #endif 53 | } 54 | #endif 55 | 56 | #endif /* GPGEX_EXECHELP_H */ 57 | -------------------------------------------------------------------------------- /src/gnupg.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpg/gpgex/2ea0a9c911d62d15c9fb1b1844d432c4f28bf329/src/gnupg.ico -------------------------------------------------------------------------------- /src/gpgex-class.cc: -------------------------------------------------------------------------------- 1 | /* gpgex-class.cc - gpgex component class implementation 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #if HAVE_CONFIG_H 22 | #include 23 | #endif 24 | 25 | #include 26 | 27 | #include "main.h" 28 | 29 | #include "gpgex-class.h" 30 | 31 | 32 | /* The class ID in a form that can be used by certain interfaces. */ 33 | CLSID CLSID_gpgex = CLSID_GPGEX; 34 | 35 | 36 | /* Because we do not use a type library (.tlb) resource file, we have 37 | to do all of the work manually. However, that's not a big issue, 38 | because we only register a new component class, and no custom 39 | interfaces. So, for example, we do not need to register proxy/stub 40 | DLLs. */ 41 | 42 | /* Register the GpgEX component. */ 43 | void 44 | gpgex_class::init (void) 45 | { 46 | char key[MAX_PATH]; 47 | char value[MAX_PATH]; 48 | HKEY key_handle = 0; 49 | 50 | /* FIXME: Error handling? */ 51 | 52 | /* Set a key for our CLSID. */ 53 | strcpy (key, "CLSID\\{" CLSID_GPGEX_STR "}"); 54 | RegCreateKey (HKEY_CLASSES_ROOT, key, &key_handle); 55 | /* The default value is a human readable name for the class. */ 56 | strcpy (value, "GpgEX"); 57 | RegSetValueEx (key_handle, 0, 0, REG_SZ, (BYTE *) value, strlen (value) + 1); 58 | RegCloseKey (key_handle); 59 | 60 | /* The InprocServer32 key holds the path to the server component. */ 61 | strcpy (key, "CLSID\\{" CLSID_GPGEX_STR "}\\InprocServer32"); 62 | RegCreateKey (HKEY_CLASSES_ROOT, key, &key_handle); 63 | GetModuleFileName (gpgex_server::instance, value, MAX_PATH); 64 | RegSetValueEx (key_handle, 0, 0, REG_SZ, (BYTE *) value, strlen (value) + 1); 65 | /* We also need a threading model. */ 66 | strcpy (key, "ThreadingModel"); 67 | strcpy (value, "Apartment"); 68 | RegSetValueEx (key_handle, key, 0, REG_SZ, 69 | (BYTE *) value, strlen (value) + 1); 70 | RegCloseKey (key_handle); 71 | 72 | strcpy (key, "*\\ShellEx\\ContextMenuHandlers\\GpgEX"); 73 | RegCreateKey (HKEY_CLASSES_ROOT, key, &key_handle); 74 | /* The default value is the CLSID for the class. */ 75 | strcpy (value, "{" CLSID_GPGEX_STR "}"); 76 | RegSetValueEx (key_handle, 0, 0, REG_SZ, (BYTE *) value, strlen (value) + 1); 77 | RegCloseKey (key_handle); 78 | 79 | strcpy (key, "Directory\\ShellEx\\ContextMenuHandlers\\GpgEX"); 80 | RegCreateKey (HKEY_CLASSES_ROOT, key, &key_handle); 81 | /* The default value is the CLSID for the class. */ 82 | strcpy (value, "{" CLSID_GPGEX_STR "}"); 83 | RegSetValueEx (key_handle, 0, 0, REG_SZ, (BYTE *) value, strlen (value) + 1); 84 | RegCloseKey (key_handle); 85 | 86 | #if 0 87 | /* We also have to approve the shell extension for Windows NT. */ 88 | strcpy (key, "Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"); 89 | RegCreateKey (HKEY_LOCAL_MACHINE, key, &key_handle); 90 | /* The key is the CLSID, the value can be anything. */ 91 | strcpy (key, "{" CLSID_GPGEX_STR "}"); 92 | strcpy (value, "GpgEX"); 93 | RegSetValueEx (key_handle, key, 0, REG_SZ, 94 | (BYTE *) value, strlen (value) + 1); 95 | RegCloseKey (key_handle); 96 | #endif 97 | } 98 | 99 | 100 | /* Unregister the GpgEX component. */ 101 | void 102 | gpgex_class::deinit (void) 103 | { 104 | /* FIXME: Error handling? */ 105 | 106 | #if 0 107 | RegDeleteValue (HKEY_LOCAL_MACHINE, 108 | "Software\\Microsoft\\Windows\\CurrentVersion" 109 | "\\Shell Extensions\\Approved", "{" CLSID_GPGEX_STR "}"); 110 | #endif 111 | 112 | RegDeleteKey (HKEY_CLASSES_ROOT, 113 | "Directory\\ShellEx\\ContextMenuHandlers\\GpgEX"); 114 | RegDeleteKey (HKEY_CLASSES_ROOT, 115 | "*\\ShellEx\\ContextMenuHandlers\\GpgEX"); 116 | 117 | /* Delete registry keys in reverse order. */ 118 | RegDeleteKey (HKEY_CLASSES_ROOT, 119 | "CLSID\\{" CLSID_GPGEX_STR "}\\InprocServer32"); 120 | RegDeleteKey (HKEY_CLASSES_ROOT, "CLSID\\{" CLSID_GPGEX_STR "}"); 121 | } 122 | -------------------------------------------------------------------------------- /src/gpgex-class.h: -------------------------------------------------------------------------------- 1 | /* gpgex-class.h - gpgex prototypes 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef GPGEX_CLASS_H 22 | #define GPGEX_CLASS_H 1 23 | 24 | #include 25 | 26 | 27 | /* We need our own COM class, because the COM class identifier (an 28 | UUID) is what is used to register the server component with the 29 | Windows Explorer Shell. The shell will then reference the 30 | extension by this CLSID. */ 31 | #define CLSID_GPGEX_STR "CCD955E4-5C16-4A33-AFDA-A8947A94946B" 32 | #define CLSID_GPGEX { 0xccd955e4, 0x5c16, 0x4a33, \ 33 | { 0xaf, 0xda, 0xa8, 0x94, 0x7a, 0x94, 0x94, 0x6b } }; 34 | 35 | /* The class ID in a form that can be used by certain interfaces. */ 36 | extern CLSID CLSID_gpgex; 37 | 38 | /* We do not use custom interfaces. This also spares us from 39 | implementing and registering a proxy/stub DLL. */ 40 | 41 | 42 | class gpgex_class 43 | { 44 | public: 45 | /* Unregister the GpgEX component. */ 46 | static void init (void); 47 | 48 | /* Unregister the GpgEX component. */ 49 | static void deinit (void); 50 | }; 51 | 52 | #endif /* ! GPGEX_CLASS_H */ 53 | -------------------------------------------------------------------------------- /src/gpgex-factory.cc: -------------------------------------------------------------------------------- 1 | /* gpgex-factory.c - gpgex factory implementation 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #if HAVE_CONFIG_H 22 | #include 23 | #endif 24 | 25 | #include 26 | 27 | #include "main.h" 28 | #include "gpgex.h" 29 | 30 | #include "gpgex-factory.h" 31 | 32 | 33 | /* IUnknown methods implementation. */ 34 | 35 | STDMETHODIMP 36 | gpgex_factory_t::QueryInterface (REFIID riid, void **ppv) 37 | { 38 | #define _TRACE_BEG12(a,b,c,d,e,f) TRACE_BEG12 (a,b,c,d,e,f) 39 | _TRACE_BEG12 (DEBUG_INIT, "gpgex_factory_t::QueryInterface", this, 40 | "riid=" GUID_FMT ", ppv=%p", GUID_ARG (riid), ppv); 41 | 42 | if (ppv == NULL) 43 | return TRACE_RES (E_INVALIDARG); 44 | 45 | /* Be nice to broken software. */ 46 | *ppv = NULL; 47 | 48 | /* The static casts ensure that the virtual function table 49 | layout of the returned object is correct. */ 50 | if (riid == IID_IUnknown) 51 | *ppv = static_cast (this); 52 | else if (riid == IID_IClassFactory) 53 | *ppv = static_cast (this); 54 | else 55 | return TRACE_RES (E_NOINTERFACE); 56 | 57 | /* We have to acquire a reference to the returned object. We lost 58 | the type information, but we know that all object classes inherit 59 | from IUnknown, which is good enough. */ 60 | reinterpret_cast(*ppv)->AddRef (); 61 | 62 | return TRACE_RES (S_OK); 63 | } 64 | 65 | 66 | STDMETHODIMP_(ULONG) 67 | gpgex_factory_t::AddRef (void) 68 | { 69 | (void) TRACE (DEBUG_INIT, "gpgex_factory_t::AddRef", this); 70 | 71 | /* This factory is a singleton and therefore no reference counting 72 | is needed. */ 73 | return 1; 74 | } 75 | 76 | 77 | STDMETHODIMP_(ULONG) 78 | gpgex_factory_t::Release (void) 79 | { 80 | (void) TRACE (DEBUG_INIT, "gpgex_factory_t::Release", this); 81 | 82 | /* This factory is a singleton and therefore no reference counting 83 | is needed. */ 84 | return 1; 85 | } 86 | 87 | 88 | /* IClassFactory methods implementation. */ 89 | 90 | STDMETHODIMP 91 | gpgex_factory_t::CreateInstance (LPUNKNOWN punkOuter, REFIID riid, 92 | void **ppv) 93 | { 94 | HRESULT result; 95 | 96 | #define _TRACE_BEG13(a,b,c,d,e,f,g) TRACE_BEG13 (a,b,c,d,e,f,g) 97 | _TRACE_BEG13 (DEBUG_INIT, "gpgex_factory_t::CreateInstance", this, 98 | "punkOuter=%lu, riid=" GUID_FMT ", ppv=%p", 99 | punkOuter, GUID_ARG (riid), ppv); 100 | 101 | /* Be nice to broken software. */ 102 | *ppv = NULL; 103 | 104 | /* Aggregation is not supported. */ 105 | if (punkOuter) 106 | return TRACE_RES (CLASS_E_NOAGGREGATION); 107 | 108 | gpgex_t *gpgex = new gpgex_t; 109 | if (!gpgex) 110 | return TRACE_RES (E_OUTOFMEMORY); 111 | 112 | result = gpgex->QueryInterface (riid, ppv); 113 | if (FAILED (result)) 114 | delete gpgex; 115 | 116 | return TRACE_RES (result); 117 | } 118 | 119 | 120 | STDMETHODIMP 121 | gpgex_factory_t::LockServer (BOOL fLock) 122 | { 123 | (void) TRACE1 (DEBUG_INIT, "gpgex_factory_t::LockServer", this, 124 | "fLock=%s", fLock ? "true" : "false"); 125 | 126 | /* Locking the singleton gpgex factory object acquires a reference 127 | for the server component. */ 128 | if (fLock) 129 | gpgex_server::add_ref (); 130 | else 131 | gpgex_server::release (); 132 | 133 | return S_OK; 134 | } 135 | 136 | 137 | 138 | /* The global singleton instance of the GpgEX factory. */ 139 | gpgex_factory_t gpgex_factory; 140 | -------------------------------------------------------------------------------- /src/gpgex-factory.h: -------------------------------------------------------------------------------- 1 | /* gpgex-factory.h - gpgex prototypes 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef GPGEX_FACTORY_H 22 | #define GPGEX_FACTORY_H 23 | 24 | #include 25 | 26 | 27 | /* Our class factory interface. */ 28 | class gpgex_factory_t : public IClassFactory 29 | { 30 | public: 31 | /* IUnknown methods. */ 32 | STDMETHODIMP QueryInterface (REFIID riid, void **ppv); 33 | STDMETHODIMP_(ULONG) AddRef (void); 34 | STDMETHODIMP_(ULONG) Release (void); 35 | 36 | /* IClassFactory methods. */ 37 | STDMETHODIMP CreateInstance (LPUNKNOWN punkOuter, REFIID iid, 38 | void **ppv); 39 | STDMETHODIMP LockServer (BOOL fLock); 40 | }; 41 | 42 | 43 | /* The global singleton instance of the GpgEX factory. */ 44 | extern gpgex_factory_t gpgex_factory; 45 | 46 | #endif /* ! GPGEX_FACTORY_H */ 47 | -------------------------------------------------------------------------------- /src/gpgex.def: -------------------------------------------------------------------------------- 1 | LIBRARY "gpgex" 2 | DESCRIPTION 'GpgEX - GPG Shell Extensions' 3 | 4 | EXPORTS 5 | DllMain = DllMain@12 @1 PRIVATE 6 | DllRegisterServer = DllRegisterServer@0 @2 PRIVATE 7 | DllUnregisterServer = DllUnregisterServer@0 @3 PRIVATE 8 | DllCanUnloadNow = DllCanUnloadNow@0 @4 PRIVATE 9 | DllGetClassObject = DllGetClassObject@12 @5 PRIVATE 10 | -------------------------------------------------------------------------------- /src/gpgex.h: -------------------------------------------------------------------------------- 1 | /* gpgex.h - gpgex prototypes 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef GPGEX_H 22 | #define GPGEX_H 23 | 24 | #include 25 | #include 26 | 27 | using std::vector; 28 | using std::string; 29 | 30 | #include 31 | #include 32 | 33 | /* Our shell extension interface. We use multiple inheritance to 34 | achieve polymorphy. 35 | 36 | NOTE 1: By this we save some effort, but we can only provide one 37 | implementation for each virtual function signature. The overlap in 38 | the IUnknown interface does not matter, in fact it is a plus that 39 | we only have to implement it once. For other functions, it might 40 | be more of a problem. If this needs to be avoided, one can derive 41 | intermediate classes which inherit only one of the overlapping 42 | classes and contain a implementations for the overlapping method 43 | that call a purely virtual function of different, unambiguous 44 | names. For example, if there is bar::foo and baz::foo, classes 45 | mybar : public bar and mybaz : public baz can be defined with 46 | mybar::foo calling mybar::bar_foo and mybaz::foo calling 47 | mybaz::baz_foo. Then the final class can inherit mybar and mybaz 48 | and implement the virtual functions bar_foo and baz_foo, leading to 49 | the desired result. 50 | 51 | NOTE 2: It is not obvious why this approach works at all! 52 | Ignorance is bliss, I guess, because the multiple-inheritance 53 | approach is documented in many places, but rarely it is explained 54 | why it works. The naive explanation is that there is a virtual 55 | function table for each base class, and we can just use the address 56 | of the pointer to that table as our COM object pointer. However, 57 | what is missing from this description is that now the THIS pointer 58 | is incorrect, and needs to be adjusted by subtracting the offset of 59 | the base class inside the object when a function implementation is 60 | invoked (which exists in the derived class and overrides the 61 | abstract base class). Recent compilers seem to implement this by 62 | replacing the function pointer in the VTBL with an "adjustor thunk" 63 | which subtracts this offset and jumps to the actual function 64 | implementation (see the C++ ABI for GCC 65 | http://www.codesourcery.com/cxx-abi/abi.html and 66 | http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarvc/html/jangrayhood.asp 67 | for MSVC++). But this is not the only possible implementation: 68 | Other compilers use a displacement field in each VTBL entry. The 69 | displacement field is often zero, and in this case an adjustor 70 | thunk is a good optimization. However, if a displacement field is 71 | used by the compiler, it changes the VTBL layout in memory and 72 | makes it non-compliant with COM! So let's all be happy that modern 73 | compilers agree on using adjustor thunks and cross our fingers, as 74 | there is no possible way we can even sanely check if the compiler 75 | complies. And you thought C++ was easy? */ 76 | 77 | class gpgex_t : public IShellExtInit, public IContextMenu3 78 | { 79 | private: 80 | /* Per-object reference count. */ 81 | LONG refcount; 82 | 83 | /* Support for IShellExtInit. */ 84 | vector filenames; 85 | 86 | /* TRUE if all files in filenames are directly related to GPG. */ 87 | BOOL all_files_gpg; 88 | 89 | public: 90 | /* Constructors and destructors. For these, we update the global 91 | component reference counter. */ 92 | gpgex_t (void) 93 | : refcount (0) 94 | { 95 | TRACE_BEG (DEBUG_INIT, "gpgex_t::gpgex_t", this); 96 | 97 | gpgex_server::add_ref (); 98 | 99 | (void) TRACE_SUC (); 100 | } 101 | 102 | ~gpgex_t (void) 103 | { 104 | TRACE_BEG (DEBUG_INIT, "gpgex_t::~gpgex_t", this); 105 | 106 | gpgex_server::release (); 107 | 108 | (void) TRACE_SUC (); 109 | } 110 | 111 | /* Reset the instance between operations. */ 112 | void reset (void); 113 | 114 | public: 115 | /* IUnknown methods. */ 116 | STDMETHODIMP QueryInterface (REFIID riid, void **ppv); 117 | STDMETHODIMP_(ULONG) AddRef (void); 118 | STDMETHODIMP_(ULONG) Release (void); 119 | 120 | /* IShellExtInit methods. */ 121 | STDMETHODIMP Initialize (LPCITEMIDLIST pIDFolder, IDataObject *pDataObj, 122 | HKEY hRegKey); 123 | 124 | /* IContextMenu methods. */ 125 | STDMETHODIMP QueryContextMenu (HMENU hMenu, UINT indexMenu, UINT idCmdFirst, 126 | UINT idCmdLast, UINT uFlags); 127 | STDMETHODIMP GetCommandString (UINT_PTR idCommand, 128 | UINT uFlags, LPUINT lpReserved, 129 | LPSTR pszName, UINT uMaxNameLen); 130 | STDMETHODIMP InvokeCommand (LPCMINVOKECOMMANDINFO lpcmi); 131 | 132 | /* IContextMenu2 methods. */ 133 | STDMETHODIMP HandleMenuMsg (UINT uMsg, WPARAM wParam, LPARAM lParam); 134 | 135 | /* IContextMenu3 methods. */ 136 | STDMETHODIMP HandleMenuMsg2 (UINT uMsg, WPARAM wParam, LPARAM lParam, 137 | LRESULT *plResult); 138 | }; 139 | 140 | #endif /* ! GPGEX_H */ 141 | -------------------------------------------------------------------------------- /src/gpgex.manifest.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | GpgEX - GnuPG shell extensions 10 | 11 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gpg/gpgex/2ea0a9c911d62d15c9fb1b1844d432c4f28bf329/src/icon-16.png -------------------------------------------------------------------------------- /src/main.h: -------------------------------------------------------------------------------- 1 | /* main.h - main prototypes 2 | Copyright (C) 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef MAIN_H 22 | #define MAIN_H 1 23 | 24 | #include 25 | #include "debug.h" 26 | 27 | 28 | #include /* For gettext */ 29 | 30 | #define _(a) gettext (a) 31 | #define N_(a) gettext_noop (a) 32 | 33 | /* A pseudo function call that serves as a marker for the automated 34 | extraction of messages, but does not call gettext(). The run-time 35 | translation is done at a different place in the code. 36 | The argument, String, should be a literal string. Concatenated strings 37 | and other string expressions won't work. 38 | The macro's expansion is not parenthesized, so that it is suitable as 39 | initializer for static 'char[]' or 'const char[]' variables. */ 40 | #define gettext_noop(String) String 41 | 42 | 43 | 44 | /* We use a class just for namespace cleanliness. */ 45 | class gpgex_server 46 | { 47 | public: 48 | /* The instance of this DLL. */ 49 | static HINSTANCE instance; 50 | 51 | /* Global reference counting for the server component. This is 52 | increased by acquiring references to any COM objects as well as 53 | when locking the server component, and needed to implement 54 | DllCanUnloadNow. */ 55 | 56 | /* The number of references to this component. */ 57 | static LONG refcount; 58 | 59 | /* The root of our installation. */ 60 | static const char *root_dir; 61 | 62 | static const char *ui_server; 63 | 64 | /* Acquire a reference to the server component. */ 65 | static inline ULONG 66 | add_ref (void) 67 | { 68 | return InterlockedIncrement (&refcount); 69 | } 70 | 71 | 72 | /* Release a reference to the server component. */ 73 | static inline ULONG 74 | release (void) 75 | { 76 | return InterlockedDecrement (&refcount); 77 | } 78 | 79 | 80 | }; 81 | 82 | 83 | #define GUID_FMT "{%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX}" 84 | #define GUID_ARG(x) (x).Data1, (x).Data2, (x).Data3, (x).Data4[0], \ 85 | (x).Data4[1], (x).Data4[2], (x).Data4[3], (x).Data4[4], \ 86 | (x).Data4[5], (x).Data4[6], (x).Data4[7] 87 | 88 | #endif 89 | 90 | 91 | extern "C" wchar_t *utf8_to_wchar (const char *string); 92 | -------------------------------------------------------------------------------- /src/registry.c: -------------------------------------------------------------------------------- 1 | /* registry.c - Registry routines 2 | Copyright (C) 2005, 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public License 8 | as published by the Free Software Foundation; either version 2.1 9 | of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #if HAVE_CONFIG_H 22 | #include 23 | #endif 24 | 25 | #include 26 | #include 27 | #include 28 | 29 | #include 30 | #ifndef CSIDL_APPDATA 31 | #define CSIDL_APPDATA 0x001a 32 | #endif 33 | #ifndef CSIDL_LOCAL_APPDATA 34 | #define CSIDL_LOCAL_APPDATA 0x001c 35 | #endif 36 | #ifndef CSIDL_FLAG_CREATE 37 | #define CSIDL_FLAG_CREATE 0x8000 38 | #endif 39 | 40 | #include "registry.h" 41 | 42 | 43 | /* This is a helper function to load a Windows function from either of 44 | one DLLs. */ 45 | HRESULT 46 | w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e) 47 | { 48 | static int initialized; 49 | static HRESULT (WINAPI * func)(HWND,int,HANDLE,DWORD,LPSTR); 50 | 51 | if (!initialized) 52 | { 53 | static char *dllnames[] = { "shell32.dll", "shfolder.dll", NULL }; 54 | void *handle; 55 | int i; 56 | 57 | initialized = 1; 58 | 59 | for (i=0, handle = NULL; !handle && dllnames[i]; i++) 60 | { 61 | handle = LoadLibrary (dllnames[i]); 62 | if (handle) 63 | { 64 | func = (HRESULT (WINAPI *)(HWND,int,HANDLE,DWORD,LPSTR)) 65 | GetProcAddress (handle, "SHGetFolderPathA"); 66 | if (!func) 67 | { 68 | FreeLibrary (handle); 69 | handle = NULL; 70 | } 71 | } 72 | } 73 | } 74 | 75 | if (func) 76 | return func (a,b,c,d,e); 77 | else 78 | return -1; 79 | } 80 | 81 | 82 | /* Helper for read_w32_registry_string(). */ 83 | static HKEY 84 | get_root_key(const char *root) 85 | { 86 | HKEY root_key; 87 | 88 | if( !root ) 89 | root_key = HKEY_CURRENT_USER; 90 | else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) ) 91 | root_key = HKEY_CLASSES_ROOT; 92 | else if( !strcmp( root, "HKEY_CURRENT_USER" ) ) 93 | root_key = HKEY_CURRENT_USER; 94 | else if( !strcmp( root, "HKEY_LOCAL_MACHINE" ) ) 95 | root_key = HKEY_LOCAL_MACHINE; 96 | else if( !strcmp( root, "HKEY_USERS" ) ) 97 | root_key = HKEY_USERS; 98 | else if( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) ) 99 | root_key = HKEY_PERFORMANCE_DATA; 100 | else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) ) 101 | root_key = HKEY_CURRENT_CONFIG; 102 | else 103 | return NULL; 104 | return root_key; 105 | } 106 | 107 | 108 | /* Return a string from the Win32 Registry or NULL in case of error. 109 | Caller must release the return value. A NULL for root is an alias 110 | for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. */ 111 | char * 112 | read_w32_registry_string (const char *root, const char *dir, const char *name) 113 | { 114 | HKEY root_key, key_handle; 115 | DWORD n1, nbytes, type; 116 | char *result = NULL; 117 | 118 | if ( !(root_key = get_root_key(root) ) ) 119 | return NULL; 120 | 121 | if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) ) 122 | { 123 | if (root) 124 | return NULL; /* no need for a RegClose, so return direct */ 125 | /* It seems to be common practise to fall back to HKLM. */ 126 | if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) ) 127 | return NULL; /* still no need for a RegClose, so return direct */ 128 | } 129 | 130 | nbytes = 1; 131 | if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) ) { 132 | if (root) 133 | goto leave; 134 | /* Try to fallback to HKLM also vor a missing value. */ 135 | RegCloseKey (key_handle); 136 | if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) ) 137 | return NULL; /* Nope. */ 138 | if (RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes)) 139 | goto leave; 140 | } 141 | result = malloc( (n1=nbytes+1) ); 142 | if( !result ) 143 | goto leave; 144 | if( RegQueryValueEx( key_handle, name, 0, &type, (LPBYTE)result, &n1 ) ) { 145 | free(result); result = NULL; 146 | goto leave; 147 | } 148 | result[nbytes] = 0; /* make sure it is really a string */ 149 | if (type == REG_EXPAND_SZ && strchr (result, '%')) { 150 | char *tmp; 151 | 152 | n1 += 1000; 153 | tmp = malloc (n1+1); 154 | if (!tmp) 155 | goto leave; 156 | nbytes = ExpandEnvironmentStrings (result, tmp, n1); 157 | if (nbytes && nbytes > n1) { 158 | free (tmp); 159 | n1 = nbytes; 160 | tmp = malloc (n1 + 1); 161 | if (!tmp) 162 | goto leave; 163 | nbytes = ExpandEnvironmentStrings (result, tmp, n1); 164 | if (nbytes && nbytes > n1) { 165 | free (tmp); /* oops - truncated, better don't expand at all */ 166 | goto leave; 167 | } 168 | tmp[nbytes] = 0; 169 | free (result); 170 | result = tmp; 171 | } 172 | else if (nbytes) { /* okay, reduce the length */ 173 | tmp[nbytes] = 0; 174 | free (result); 175 | result = malloc (strlen (tmp)+1); 176 | if (!result) 177 | result = tmp; 178 | else { 179 | strcpy (result, tmp); 180 | free (tmp); 181 | } 182 | } 183 | else { /* error - don't expand */ 184 | free (tmp); 185 | } 186 | } 187 | 188 | leave: 189 | RegCloseKey( key_handle ); 190 | return result; 191 | } 192 | -------------------------------------------------------------------------------- /src/registry.h: -------------------------------------------------------------------------------- 1 | /* registry.h - registry prototypes 2 | Copyright (C) 2006, 2007 g10 Code GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef REGISTRY_H 22 | #define REGISTRY_H 23 | 24 | #include 25 | 26 | #ifdef __cplusplus 27 | extern "C" { 28 | #if 0 29 | } 30 | #endif 31 | #endif 32 | 33 | /* This is a helper function to load a Windows function from either of 34 | one DLLs. */ 35 | HRESULT w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e); 36 | 37 | /* Return a string from the Win32 Registry or NULL in case of error. 38 | Caller must release the return value. A NULL for root is an alias 39 | for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. */ 40 | char *read_w32_registry_string (const char *root, const char *dir, 41 | const char *name); 42 | 43 | /* The Registry keys used by Gpg4win and GnUPG. */ 44 | #ifdef WIN64 45 | # define GPG4WIN_REGKEY_1 "Software\\Wow6432Node\\GnuPG" 46 | # define GPG4WIN_REGKEY_2 "Software\\Wow6432Node\\GNU\\GnuPG" 47 | # define GPG4WIN_REGKEY_3 "Software\\Wow6432Node\\Gpg4win" 48 | #else 49 | # define GPG4WIN_REGKEY_1 "Software\\GnuPG" 50 | # define GPG4WIN_REGKEY_2 "Software\\GNU\\GnuPG" 51 | # define GPG4WIN_REGKEY_3 "Software\\Gpg4win" 52 | #endif 53 | 54 | #ifdef __cplusplus 55 | #if 0 56 | { 57 | #endif 58 | } 59 | #endif 60 | 61 | #endif /* ! REGISTRY_H */ 62 | -------------------------------------------------------------------------------- /src/resource.h: -------------------------------------------------------------------------------- 1 | /* resource.h - resource ids 2 | Copyright (C) 2018 Intevation GmbH 3 | 4 | This file is part of GpgEX. 5 | 6 | GpgEX is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2 of the License, or (at your option) any later version. 10 | 11 | GpgEX is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this program; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 | 02110-1301, USA. */ 20 | 21 | #ifndef RESOURCE_H 22 | #define RESOURCE_H 23 | 24 | #define IDI_ICON_16 0x1000 25 | 26 | #endif // RESOURCE_H 27 | -------------------------------------------------------------------------------- /src/standalone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 40 | 42 | 43 | 45 | image/svg+xml 46 | 48 | 49 | 50 | 51 | 52 | 57 | 63 | 69 | 77 | 85 | 93 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /src/versioninfo.rc.in: -------------------------------------------------------------------------------- 1 | /* versioninfo.rc.in -*- c -*- 2 | * Copyright (C) 2005, 2007, 2009, 2013 g10 Code GmbH 3 | * 4 | * This file is free software; as a special exception the author gives 5 | * unlimited permission to copy and/or distribute it, with or without 6 | * modifications, as long as this notice is preserved. 7 | * 8 | * This program is distributed in the hope that it will be useful, but 9 | * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 10 | * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | */ 12 | 13 | /* This file is processed by configure to create versioninfo.rc */ 14 | 15 | #line __LINE__ "versioninfo.rc.in" 16 | 17 | #include "resource.h" 18 | 19 | #include 20 | 21 | 1 ICON "./gnupg.ico" 22 | 23 | 1 VERSIONINFO 24 | FILEVERSION @BUILD_FILEVERSION@ 25 | PRODUCTVERSION @BUILD_FILEVERSION@ 26 | FILEFLAGSMASK 0x3fL 27 | #ifdef _DEBUG 28 | FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ 29 | #else 30 | FILEFLAGS 0x00L 31 | #endif 32 | FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ 33 | FILETYPE 0x2L /* VFT_DLL (0x2) */ 34 | FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ 35 | BEGIN 36 | BLOCK "StringFileInfo" 37 | BEGIN 38 | BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ 39 | BEGIN 40 | VALUE "FileDescription", "GpgEX - GnuPG shell extensions\0" 41 | VALUE "InternalName", "gpgex\0" 42 | VALUE "OriginalFilename", "gpgex.dll\0" 43 | VALUE "ProductName", "GpgEX\0" 44 | VALUE "ProductVersion", "@VERSION@\0" 45 | VALUE "CompanyName", "g10 Code GmbH\0" 46 | VALUE "FileVersion", "@VERSION@\0" 47 | VALUE "LegalCopyright", "Copyright \xa9 2013 g10 Code GmbH\r\n \ 48 | This program is free software; you can redistribute it and/or modify it \ 49 | under the terms of the GNU Lesser General Public License as published by \ 50 | the Free Software Foundation; either version 2.1 of the License, \ 51 | or (at your option) any later version.\0" 52 | END 53 | END 54 | BLOCK "VarFileInfo" 55 | BEGIN 56 | VALUE "Translation", 0x409, 1200 57 | END 58 | END 59 | 60 | 61 | /* Fixme: It was not possible to convince Windows to use the manifest. 62 | * Thus we resort to static linking of gpgex with the helper 63 | * libraries. The idea was to put have this directory layout 64 | * 65 | * bin/gpgex.dll 66 | * bin/GNU.GnuPG.Gcc64Support/GNU.GnuPG.Gcc64Support.manifest 67 | * bin/GNU.GnuPG.Gcc64Support/libstdc++-6.dll 68 | * bin/GNU.GnuPG.Gcc64Support/libgcc_s_sjlj-1.dll 69 | * 70 | * to cope with the 64 bit and 32 bit versions of the gcc support 71 | * libraries. It works with exe files but not with DLLs loaded. Any 72 | * hints to fix this are welcome. 73 | */ 74 | /* ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "gpgex.manifest" */ 75 | 76 | 77 | /* 78 | * Our bitmaps. 79 | */ 80 | IDI_ICON_16 RCDATA "icon-16.png" 81 | --------------------------------------------------------------------------------