mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 10:52:52 +00:00
443 lines
12 KiB
CMake
443 lines
12 KiB
CMake
# gpgme configure checks
|
|
include(CheckFunctionExists)
|
|
include(CheckTypeSize)
|
|
|
|
if ( GPGME_FOUND )
|
|
|
|
set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES})
|
|
set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES})
|
|
set(CMAKE_REQUIRED_INCLUDES ${GPGME_INCLUDES})
|
|
set(CMAKE_REQUIRED_DEFINITIONS ${KDE4_DEFINITIONS})
|
|
set(CMAKE_REQUIRED_LIBRARIES)
|
|
foreach( _FLAVOUR VANILLA PTHREAD QT PTH GLIB )
|
|
if ( NOT CMAKE_REQUIRED_LIBRARIES )
|
|
if ( GPGME_${_FLAVOUR}_FOUND )
|
|
set(CMAKE_REQUIRED_LIBRARIES ${GPGME_VANILLA_LIBRARIES})
|
|
endif()
|
|
endif()
|
|
endforeach( _FLAVOUR )
|
|
|
|
# check if gpgme has gpgme_data_{get,set}_file_name (new in 1.1.0)
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_data_t data = 0;
|
|
const char * filename = 0;
|
|
const gpgme_error_t err = gpgme_data_set_file_name( data, filename );
|
|
char * filename2 = gpgme_data_get_file_name( data );
|
|
(void)filename2; (void)err;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_DATA_SET_FILE_NAME
|
|
)
|
|
|
|
# check if gpgme has GPGME_INCLUDE_CERTS_DEFAULT
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
int i = GPGME_INCLUDE_CERTS_DEFAULT;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_INCLUDE_CERTS_DEFAULT
|
|
)
|
|
|
|
# check if gpgme has GPGME_KEYLIST_MODE_SIG_NOTATIONS
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_keylist_mode_t mode = GPGME_KEYLIST_MODE_SIG_NOTATIONS;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_KEYLIST_MODE_SIG_NOTATIONS
|
|
)
|
|
|
|
# check if gpgme_key_sig_t has notations
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_key_sig_t key_sig = 0;
|
|
gpgme_sig_notation_t notation = key_sig->notations;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_KEY_SIG_NOTATIONS
|
|
)
|
|
|
|
# check if gpgme has gpgme_key_t->is_qualified
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
void test(gpgme_key_t& key) {
|
|
unsigned int iq;
|
|
iq = key->is_qualified;
|
|
}
|
|
int main() { return 0; }
|
|
" HAVE_GPGME_KEY_T_IS_QUALIFIED
|
|
)
|
|
|
|
# check if gpgme has gpgme_sig_notation_t->critical
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_sig_notation_t sig_notation = 0;
|
|
unsigned int cr1 = sig_notation->critical;
|
|
unsigned int cr2 = GPGME_SIG_NOTATION_CRITICAL;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIG_NOTATION_CRITICAL
|
|
)
|
|
|
|
# check if gpgme has gpgme_sig_notation_t->flags
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_sig_notation_t sig_notation = 0;
|
|
gpgme_sig_notation_flags_t f = sig_notation->flags;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIG_NOTATION_FLAGS_T
|
|
)
|
|
|
|
# check if gpgme has gpgme_sig_notation_t->human_readable
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_sig_notation_t sig_notation = 0;
|
|
unsigned int cr1 = sig_notation->human_readable;
|
|
unsigned int cr2 = GPGME_SIG_NOTATION_HUMAN_READABLE;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIG_NOTATION_HUMAN_READABLE
|
|
)
|
|
|
|
# check if gpgme has gpgme_subkey_t->is_qualified
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
void test(gpgme_subkey_t& subkey) {
|
|
unsigned int iq;
|
|
iq = subkey->is_qualified;
|
|
}
|
|
int main() { return 0; }
|
|
" HAVE_GPGME_SUBKEY_T_IS_QUALIFIED
|
|
)
|
|
|
|
# check if gpgme has gpgme_engine_info_t->home_dir
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_engine_info_t ei = 0;
|
|
const char * hd = ei->home_dir;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_ENGINE_INFO_T_HOME_DIR
|
|
)
|
|
|
|
#check if gpgme has gpgme_ctx_{get,set}_engine_info()
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_ctx_t ctx = 0;
|
|
const gpgme_engine_info_t ei = gpgme_ctx_get_engine_info( ctx );
|
|
const char * filename = 0;
|
|
const char * home_dir = 0;
|
|
const gpgme_error_t e
|
|
= gpgme_ctx_set_engine_info( ctx, GPGME_PROTOCOL_OpenPGP, filename, home_dir );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_CTX_GETSET_ENGINE_INFO
|
|
)
|
|
|
|
# missing, but not needed yet (only for edit interaction)
|
|
#+ GPGME_STATUS_SIG_SUBPACKET,
|
|
#+ GPGME_STATUS_NEED_PASSPHRASE_PIN,
|
|
#+ GPGME_STATUS_SC_OP_FAILURE,
|
|
#+ GPGME_STATUS_SC_OP_SUCCESS,
|
|
#+ GPGME_STATUS_CARDCTRL,
|
|
#+ GPGME_STATUS_BACKUP_KEY_CREATED,
|
|
#+ GPGME_STATUS_PKA_TRUST_BAD,
|
|
#+ GPGME_STATUS_PKA_TRUST_GOOD,
|
|
#+
|
|
#+ GPGME_STATUS_PLAINTEXT
|
|
|
|
# check if gpgme has gpgme_sig_notation_{clear,add,get}
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_ctx_t ctx = 0;
|
|
const gpgme_sig_notation_t nota = gpgme_sig_notation_get( ctx );
|
|
const char * const name = 0;
|
|
const char * const value = 0;
|
|
const gpgme_sig_notation_flags_t flags = 0;
|
|
const gpgme_error_t err = gpgme_sig_notation_add( ctx, name, value, flags );
|
|
gpgme_sig_notation_clear( ctx );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIG_NOTATION_CLEARADDGET
|
|
)
|
|
|
|
# check if gpgme has gpgme_decrypt_result_t->file_name
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_decrypt_result_t res = 0;
|
|
const char * const fn = res->file_name;
|
|
(void)fn;
|
|
}
|
|
" HAVE_GPGME_DECRYPT_RESULT_T_FILE_NAME
|
|
)
|
|
|
|
# check if gpgme has gpgme_recipient_t and gpgme_decrypt_result_t->recipients
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_decrypt_result_t res = 0;
|
|
gpgme_recipient_t r = res->recipients;
|
|
const char * kid = r->keyid;
|
|
r = r->next;
|
|
const gpgme_pubkey_algo_t algo = r->pubkey_algo;
|
|
const gpgme_error_t err = r->status;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_DECRYPT_RESULT_T_RECIPIENTS
|
|
)
|
|
|
|
# check if gpgme has gpgme_verify_result_t->file_name
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_verify_result_t res = 0;
|
|
const char * fn = res->file_name;
|
|
(void)fn;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_VERIFY_RESULT_T_FILE_NAME
|
|
)
|
|
|
|
# check if gpgme has gpgme_signature_t->pka_{trust,address}
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_signature_t sig = 0;
|
|
unsigned int pkat = sig->pka_trust;
|
|
const char * pkaa = sig->pka_address;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIGNATURE_T_PKA_FIELDS
|
|
)
|
|
|
|
# check if gpgme has gpgme_signature_t->{hash,pubkey}_algo
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_signature_t sig = 0;
|
|
gpgme_pubkey_algo_t pk = sig->pubkey_algo;
|
|
gpgme_hash_algo_t h = sig->hash_algo;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIGNATURE_T_ALGORITHM_FIELDS
|
|
)
|
|
|
|
# check if gpgme has gpgme_signature_t->chain_model
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_signature_t sig = 0;
|
|
unsigned int cm = sig->chain_model;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SIGNATURE_T_CHAIN_MODEL
|
|
)
|
|
|
|
# check if gpgme has gpgme_get_fdptr
|
|
check_function_exists( "gpgme_get_fdptr" HAVE_GPGME_GET_FDPTR )
|
|
|
|
# check if gpgme has gpgme_op_getauditlog
|
|
check_function_exists ("gpgme_op_getauditlog" HAVE_GPGME_OP_GETAUDITLOG )
|
|
|
|
# check if gpgme has GPGME_PROTOCOL_GPGCONF
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
const gpgme_protocol_t proto = GPGME_PROTOCOL_GPGCONF;
|
|
gpgme_ctx_t ctx = 0;
|
|
gpgme_conf_comp_t comp = 0;
|
|
gpgme_error_t e = gpgme_op_conf_load( ctx, &comp );
|
|
e = gpgme_op_conf_save( ctx, comp );
|
|
gpgme_conf_arg_t arg = 0;
|
|
int i = 0;
|
|
void * value = &i;
|
|
e = gpgme_conf_arg_new( &arg, GPGME_CONF_INT32, value );
|
|
gpgme_conf_opt_t opt = comp->options;
|
|
e = gpgme_conf_opt_change( opt, 0, arg );
|
|
gpgme_conf_release( comp );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_PROTOCOL_GPGCONF
|
|
)
|
|
|
|
# check if gpgme has gpgme_cancel_async
|
|
check_function_exists ("gpgme_cancel_async" HAVE_GPGME_CANCEL_ASYNC )
|
|
|
|
# check if gpg-error has GPG_ERR_NO_PASSPHRASE
|
|
check_cxx_source_compiles ("
|
|
#include <gpg-error.h>
|
|
int main() {
|
|
gpg_error_t err = GPG_ERR_NO_PASSPHRASE;
|
|
return 0;
|
|
}
|
|
" HAVE_GPG_ERR_NO_PASSPHRASE )
|
|
|
|
# check if gpg-error has GPG_ERR_ALREADY_SIGNED
|
|
check_cxx_source_compiles ("
|
|
#include <gpg-error.h>
|
|
int main() {
|
|
gpg_error_t err = GPG_ERR_ALREADY_SIGNED;
|
|
return 0;
|
|
}
|
|
" HAVE_GPG_ERR_ALREADY_SIGNED )
|
|
|
|
# check if gpgme has GPGME_ENCRYPT_NO_ENCRYPT_TO
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_encrypt_flags_t f = GPGME_ENCRYPT_NO_ENCRYPT_TO;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_ENCRYPT_NO_ENCRYPT_TO )
|
|
|
|
# check if gpgme has gpgme_subkey_t->is_cardkey and ->card_number
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_subkey_t sk = 0;
|
|
const char * card_number = sk->card_number;
|
|
const unsigned int is_cardkey = sk->is_cardkey;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_SUBKEY_T_IS_CARDKEY )
|
|
|
|
# check if gpgme has assuan protocol support
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
|
|
static gpgme_error_t data_cb(void *, const void *, size_t) { return 0; }
|
|
static gpgme_error_t inquire_cb(void *, const char *, const char *, gpgme_data_t *) { return 0; }
|
|
static gpgme_error_t status_cb(void *, const char *, const char *) { return 0; }
|
|
|
|
int main() {
|
|
const gpgme_protocol_t proto = GPGME_PROTOCOL_ASSUAN;
|
|
gpgme_ctx_t ctx = 0;
|
|
gpgme_assuan_data_cb_t d = data_cb;
|
|
gpgme_assuan_inquire_cb_t i = inquire_cb;
|
|
gpgme_assuan_status_cb_t s = status_cb;
|
|
gpgme_assuan_result_t r = gpgme_op_assuan_result( ctx );
|
|
void * opaque = 0;
|
|
gpgme_error_t err = gpgme_op_assuan_transact_start( ctx, \"FOO\", d, opaque, i, opaque, s, opaque );
|
|
err = gpgme_op_assuan_transact( ctx, \"FOO\", d, opaque, i, opaque, s, opaque );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_ASSUAN_ENGINE )
|
|
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_keylist_mode_t mode = GPGME_KEYLIST_MODE_EPHEMERAL;
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_KEYLIST_MODE_EPHEMERAL )
|
|
|
|
# check if gpgme has import-from-keyserver support
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_ctx_t ctx = 0;
|
|
gpgme_key_t keys[2] = { 0, 0 };
|
|
const gpgme_error_t err = gpgme_op_import_keys( ctx, keys );
|
|
return err ? 1 : 0 ;
|
|
}
|
|
" HAVE_GPGME_OP_IMPORT_KEYS )
|
|
|
|
# check for G13 VFS support
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_ctx_t ctx = 0;
|
|
gpgme_key_t users[2] = { 0, 0 };
|
|
gpgme_error_t err, op_err;
|
|
err = gpgme_set_protocol( ctx, GPGME_PROTOCOL_G13 );
|
|
gpgme_op_vfs_create( ctx, users, \"file\", 0, &op_err );
|
|
err = gpgme_op_vfs_mount( ctx, \"file\", \"mountdir\", 0, &op_err );
|
|
gpgme_vfs_mount_result_t res = gpgme_op_vfs_mount_result( ctx );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_G13_VFS )
|
|
|
|
# check if gpgme has change-passphrase support
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
gpgme_ctx_t ctx = 0;
|
|
gpgme_key_t key = 0;
|
|
unsigned int flags = 0;
|
|
const gpgme_error_t err = gpgme_op_passwd( ctx, key, flags );
|
|
return err ? 1 : 0 ;
|
|
}
|
|
" HAVE_GPGME_OP_PASSWD )
|
|
|
|
# check if gpgme has gpgme_io_{read,write} (new in 1.2.0)
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
int fd;
|
|
void * cv;
|
|
void * v;
|
|
size_t sz;
|
|
ssize_t r = gpgme_io_read( fd, v, sz );
|
|
r = gpgme_io_write( fd, cv, sz );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_IO_READWRITE )
|
|
|
|
# check if gpg-error has gpg_err_set_errno (v1.8)
|
|
check_cxx_source_compiles ("
|
|
#include <gpg-error.h>
|
|
int main() {
|
|
int i;
|
|
gpg_err_set_errno( i );
|
|
return 0;
|
|
}
|
|
" HAVE_GPG_ERR_SET_ERRNO )
|
|
|
|
# check if gpgme has gpg-error wrappers
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
int main() {
|
|
const gpgme_error_t err = gpgme_error_from_syserror();
|
|
int i;
|
|
gpgme_err_set_errno( i );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_GPG_ERROR_WRAPPERS )
|
|
|
|
# check if gpgme_conf_arg_new takes its 'value' by const void*
|
|
check_cxx_source_compiles ("
|
|
#include <gpgme.h>
|
|
|
|
int main() {
|
|
gpgme_conf_arg_t arg = 0;
|
|
const void * value = 0;
|
|
gpgme_error_t e = gpgme_conf_arg_new( &arg, GPGME_CONF_STRING, value );
|
|
return 0;
|
|
}
|
|
" HAVE_GPGME_CONF_ARG_NEW_WITH_CONST_VALUE )
|
|
|
|
set(CMAKE_EXTRA_INCLUDE_FILES gpgme.h)
|
|
# defined in gpgme versions >= 1.4.2
|
|
check_type_size(gpgme_ssize_t GPGME_SSIZE_T)
|
|
check_type_size(gpgme_off_t GPGME_OFF_T)
|
|
set(CMAKE_EXTRA_INCLUDE_FILES)
|
|
|
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
|
|
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE})
|
|
set(CMAKE_REQUIRED_INCLUDES_SAVE)
|
|
set(CMAKE_REQUIRED_LIBRARIES_SAVE)
|
|
|
|
endif()
|