|
Packit |
01d647 |
// ***************************************************************** -*- C++ -*-
|
|
Packit |
01d647 |
/*
|
|
Packit |
01d647 |
* Copyright (C) 2004-2018 Exiv2 authors
|
|
Packit |
01d647 |
* This program is part of the Exiv2 distribution.
|
|
Packit |
01d647 |
*
|
|
Packit |
01d647 |
* This program is free software; you can redistribute it and/or
|
|
Packit |
01d647 |
* modify it under the terms of the GNU General Public License
|
|
Packit |
01d647 |
* as published by the Free Software Foundation; either version 2
|
|
Packit |
01d647 |
* of the License, or (at your option) any later version.
|
|
Packit |
01d647 |
*
|
|
Packit |
01d647 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
01d647 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
01d647 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
01d647 |
* GNU General Public License for more details.
|
|
Packit |
01d647 |
*
|
|
Packit |
01d647 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
01d647 |
* along with this program; if not, write to the Free Software
|
|
Packit |
01d647 |
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
|
|
Packit |
01d647 |
*/
|
|
Packit |
01d647 |
// *****************************************************************************
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#include "config.h"
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_USE_CURL
|
|
Packit |
01d647 |
#include <curl/curl.h>
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#include "http.hpp"
|
|
Packit |
01d647 |
#include "version.hpp"
|
|
Packit |
01d647 |
#include "makernote_int.hpp"
|
|
Packit |
01d647 |
#include "futils.hpp"
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// Adobe XMP Toolkit
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_XMP_TOOLKIT
|
|
Packit |
01d647 |
#include "xmp_exiv2.hpp"
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// + standard includes
|
|
Packit |
01d647 |
#include <iomanip>
|
|
Packit |
01d647 |
#include <sstream>
|
|
Packit |
01d647 |
#include <string>
|
|
Packit |
01d647 |
#include <stdio.h>
|
|
Packit |
01d647 |
#include <iostream>
|
|
Packit |
01d647 |
#include <fstream>
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// #1147
|
|
Packit |
01d647 |
#ifndef WIN32
|
|
Packit |
01d647 |
#include <unistd.h>
|
|
Packit |
01d647 |
#include <sys/types.h>
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifndef lengthof
|
|
Packit |
01d647 |
#define lengthof(x) sizeof(x)/sizeof(x[0])
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
#ifndef _MAX_PATH
|
|
Packit |
01d647 |
#define _MAX_PATH 512
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// platform specific support for getLoadedLibraries
|
|
Packit |
01d647 |
#if defined(__CYGWIN__) || defined(__MINGW__) || defined(WIN32)
|
|
Packit |
01d647 |
# include <windows.h>
|
|
Packit |
01d647 |
# include <psapi.h>
|
|
Packit |
01d647 |
# if __LP64__
|
|
Packit |
01d647 |
# ifdef _WIN64
|
|
Packit |
01d647 |
# undef _WIN64
|
|
Packit |
01d647 |
# endif
|
|
Packit |
01d647 |
# define _WIN64 1
|
|
Packit |
01d647 |
# endif
|
|
Packit |
01d647 |
#elif defined(__APPLE__)
|
|
Packit |
01d647 |
# include <mach-o/dyld.h>
|
|
Packit |
01d647 |
#elif defined(__FreeBSD__)
|
|
Packit |
01d647 |
# include <sys/param.h>
|
|
Packit |
01d647 |
# include <sys/queue.h>
|
|
Packit |
01d647 |
# include <sys/socket.h>
|
|
Packit |
01d647 |
# include <sys/sysctl.h>
|
|
Packit |
01d647 |
# include <libprocstat.h>
|
|
Packit Service |
fb147c |
# include <unistd.h>
|
|
Packit Service |
fb147c |
#elif defined(__sun__)
|
|
Packit Service |
fb147c |
# include <dlfcn.h>
|
|
Packit Service |
fb147c |
# include <link.h>
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
namespace Exiv2 {
|
|
Packit |
01d647 |
int versionNumber()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXIV2_MAKE_VERSION(EXIV2_MAJOR_VERSION, EXIV2_MINOR_VERSION, EXIV2_PATCH_VERSION);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::string versionString()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ostringstream os;
|
|
Packit |
01d647 |
os << EXIV2_MAJOR_VERSION << '.' << EXIV2_MINOR_VERSION << '.' << EXIV2_PATCH_VERSION;
|
|
Packit |
01d647 |
return os.str();
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
std::string versionNumberHexString()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ostringstream os;
|
|
Packit |
01d647 |
os << std::hex << std::setw(6) << std::setfill('0') << Exiv2::versionNumber();
|
|
Packit |
01d647 |
return os.str();
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const char* version()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return EXV_PACKAGE_VERSION;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
bool testVersion(int major, int minor, int patch)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
return versionNumber() >= EXIV2_MAKE_VERSION(major,minor,patch);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
} // namespace Exiv2
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
static bool shouldOutput(const exv_grep_keys_t& greps,const char* key,const std::string& value)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
bool bPrint = greps.empty();
|
|
Packit |
01d647 |
for( exv_grep_keys_t::const_iterator g = greps.begin();
|
|
Packit |
01d647 |
!bPrint && g != greps.end() ; ++g
|
|
Packit |
01d647 |
) {
|
|
Packit |
01d647 |
std::string Key(key);
|
|
Packit |
01d647 |
#if defined(EXV_HAVE_REGEX_H)
|
|
Packit |
01d647 |
bPrint = ( 0 == regexec( &(*g), key , 0, NULL, 0)
|
|
Packit |
01d647 |
|| 0 == regexec( &(*g), value.c_str(), 0, NULL, 0)
|
|
Packit |
01d647 |
);
|
|
Packit |
01d647 |
#else
|
|
Packit |
01d647 |
std::string Pattern(g->pattern_);
|
|
Packit |
01d647 |
std::string Value(value);
|
|
Packit |
01d647 |
if ( g->bIgnoreCase_ ) {
|
|
Packit |
01d647 |
// https://notfaq.wordpress.com/2007/08/04/cc-convert-string-to-upperlower-case/
|
|
Packit |
01d647 |
std::transform(Pattern.begin(), Pattern.end(),Pattern.begin(), ::tolower);
|
|
Packit |
01d647 |
std::transform(Key.begin() , Key.end() ,Key.begin() , ::tolower);
|
|
Packit |
01d647 |
std::transform(Value.begin() , Value.end() ,Value.begin() , ::tolower);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
bPrint = Key.find(Pattern) != std::string::npos || Value.find(Pattern) != std::string::npos;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return bPrint;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
static void output(std::ostream& os,const exv_grep_keys_t& greps,const char* name,const std::string& value)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
if ( shouldOutput(greps,name,value) ) os << name << "=" << value << std::endl;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
static void output(std::ostream& os,const exv_grep_keys_t& greps,const char* name,int value)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
std::ostringstream stringStream;
|
|
Packit |
01d647 |
stringStream << value;
|
|
Packit |
01d647 |
output(os,greps,name,stringStream.str());
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
static bool pushPath(std::string& path,Exiv2::StringVector& libs,Exiv2::StringSet& paths)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
bool result = Exiv2::fileExists(path,true) && paths.find(path) == paths.end() && path != "/" ;
|
|
Packit |
01d647 |
if ( result ) {
|
|
Packit |
01d647 |
paths.insert(path);
|
|
Packit |
01d647 |
libs.push_back(path);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
return result ;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
static Exiv2::StringVector getLoadedLibraries()
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
Exiv2::StringVector libs ;
|
|
Packit |
01d647 |
Exiv2::StringSet paths;
|
|
Packit |
01d647 |
std::string path ;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#if defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW__)
|
|
Packit |
01d647 |
// enumerate loaded libraries and determine path to executable
|
|
Packit |
01d647 |
HMODULE handles[200];
|
|
Packit |
01d647 |
DWORD cbNeeded;
|
|
Packit |
01d647 |
if ( EnumProcessModules(GetCurrentProcess(),handles,lengthof(handles),&cbNeeded)) {
|
|
Packit |
01d647 |
char szFilename[_MAX_PATH];
|
|
Packit |
01d647 |
for ( DWORD h = 0 ; h < cbNeeded/sizeof(handles[0]) ; h++ ) {
|
|
Packit |
01d647 |
GetModuleFileNameA(handles[h],szFilename,lengthof(szFilename)) ;
|
|
Packit |
01d647 |
std::string path(szFilename);
|
|
Packit |
01d647 |
pushPath(path,libs,paths);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
#elif defined(__APPLE__)
|
|
Packit |
01d647 |
// man 3 dyld
|
|
Packit |
01d647 |
uint32_t count = _dyld_image_count();
|
|
Packit |
01d647 |
for (uint32_t image = 0 ; image < count ; image++ ) {
|
|
Packit |
01d647 |
std::string path(_dyld_get_image_name(image));
|
|
Packit |
01d647 |
pushPath(path,libs,paths);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
#elif defined(__FreeBSD__)
|
|
Packit Service |
fb147c |
// this code seg-faults when called from an SSH script! (security?)
|
|
Packit Service |
fb147c |
if ( isatty(STDIN_FILENO) ) {
|
|
Packit Service |
fb147c |
unsigned int n;
|
|
Packit Service |
fb147c |
struct procstat* procstat = procstat_open_sysctl();
|
|
Packit Service |
fb147c |
struct kinfo_proc* procs = procstat ? procstat_getprocs(procstat, KERN_PROC_PID, getpid(), &n) : NULL;
|
|
Packit Service |
fb147c |
struct filestat_list* files = procs ? procstat_getfiles(procstat, procs, true) : NULL;
|
|
Packit Service |
fb147c |
if ( files ) {
|
|
Packit Service |
fb147c |
filestat* entry;
|
|
Packit Service |
fb147c |
STAILQ_FOREACH(entry, files, next) {
|
|
Packit Service |
fb147c |
std::string path(entry->fs_path);
|
|
Packit Service |
fb147c |
pushPath(path,libs,paths);
|
|
Packit Service |
fb147c |
}
|
|
Packit |
01d647 |
}
|
|
Packit Service |
fb147c |
// free resources
|
|
Packit Service |
fb147c |
if ( files ) procstat_freefiles(procstat, files);
|
|
Packit Service |
fb147c |
if ( procs ) procstat_freeprocs(procstat, procs);
|
|
Packit Service |
fb147c |
if ( procstat ) procstat_close (procstat);
|
|
Packit Service |
fb147c |
}
|
|
Packit Service |
fb147c |
#elif defined (__sun__) || defined(__unix__)
|
|
Packit Service |
fb147c |
// http://stackoverflow.com/questions/606041/how-do-i-get-the-path-of-a-process-in-unix-linux
|
|
Packit Service |
fb147c |
char procsz[100];
|
|
Packit Service |
fb147c |
char pathsz[500];
|
|
Packit Service |
fb147c |
sprintf(procsz,"/proc/%d/path/a.out", getpid());
|
|
Packit Service |
fb147c |
int l = readlink (procsz, pathsz,sizeof(pathsz));
|
|
Packit Service |
fb147c |
if (l>0) {
|
|
Packit Service |
fb147c |
pathsz[l]='\0';
|
|
Packit Service |
fb147c |
path.assign(pathsz);
|
|
Packit Service |
fb147c |
libs.push_back(path);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// read file /proc/self/maps which has a list of files in memory
|
|
Packit Service |
fb147c |
// (this doesn't yield anything on __sun__)
|
|
Packit |
01d647 |
std::ifstream maps("/proc/self/maps",std::ifstream::in);
|
|
Packit |
01d647 |
std::string string ;
|
|
Packit |
01d647 |
while ( std::getline(maps,string) ) {
|
|
Packit |
01d647 |
std::size_t pos = string.find_last_of(' ');
|
|
Packit |
01d647 |
if ( pos != std::string::npos ) {
|
|
Packit |
01d647 |
std::string path = string.substr(pos+1);
|
|
Packit |
01d647 |
pushPath(path,libs,paths);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
#endif
|
|
Packit Service |
fb147c |
if ( !libs.size() ) libs.push_back("unknown");
|
|
Packit Service |
fb147c |
|
|
Packit |
01d647 |
return libs;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
void Exiv2::dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& keys)
|
|
Packit |
01d647 |
{
|
|
Packit |
01d647 |
int bits = 8*sizeof(void*);
|
|
Packit |
01d647 |
#ifdef NDEBUG
|
|
Packit |
01d647 |
int debug=0;
|
|
Packit |
01d647 |
#else
|
|
Packit |
01d647 |
int debug=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef exiv2lib_EXPORTS
|
|
Packit |
01d647 |
int dll=1;
|
|
Packit |
01d647 |
#else
|
|
Packit |
01d647 |
int dll=0;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const char* compiler =
|
|
Packit |
01d647 |
#if defined(_MSC_VER)
|
|
Packit |
01d647 |
"MSVC" ;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifndef __VERSION__
|
|
Packit |
01d647 |
char version[40];
|
|
Packit |
01d647 |
sprintf(version,"%d.%02d",(_MSC_VER-600)/100,_MSC_VER%100);
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// add edition in brackets
|
|
Packit |
01d647 |
// 7.10 = 2003 8.00 = 2005 etc 12.00 = 2013 13.00 = 2015 (yet the installer labels it as 14.0!)
|
|
Packit |
01d647 |
size_t edition = (_MSC_VER-600)/100;
|
|
Packit |
01d647 |
const char* editions[] = { "0","1","2","3","4","5","6","2003", "2005", "2008", "2010", "2012","2013","2015","2017","2019"};
|
|
Packit |
01d647 |
if ( edition == 13 && _MSC_VER >= 1910 ) edition++ ; // 2017 _MSC_VAR == 1910
|
|
Packit Service |
fb147c |
if ( edition == 14 && _MSC_VER >= 1920 ) edition++ ; // 2019 _MSC_VAR == 1920
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if ( edition > lengthof(editions) ) edition = 0 ;
|
|
Packit |
01d647 |
if ( edition ) sprintf(version+::strlen(version)," (%s/%s)",editions[edition],bits==64?"x64":"x86");
|
|
Packit |
01d647 |
#define __VERSION__ version
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#elif defined(__clang__)
|
|
Packit |
01d647 |
"Clang" ;
|
|
Packit |
01d647 |
#elif defined(__GNUG__)
|
|
Packit |
01d647 |
"G++" ;
|
|
Packit |
01d647 |
#elif defined(__GNUC__)
|
|
Packit |
01d647 |
"GCC" ;
|
|
Packit |
01d647 |
#elif defined(__SUNPRO_CC)
|
|
Packit |
01d647 |
"CC (oracle)";
|
|
Packit |
01d647 |
#elif defined (__SUNPRO_C)
|
|
Packit |
01d647 |
"cc (oracle)";
|
|
Packit Service |
fb147c |
#elif defined (__sun__)
|
|
Packit Service |
fb147c |
"cc (solaris)";
|
|
Packit |
01d647 |
#else
|
|
Packit |
01d647 |
"unknown" ;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifndef __VERSION__
|
|
Packit |
01d647 |
#ifdef __clang__version__
|
|
Packit |
01d647 |
#define __VERSION__ __clang__version__
|
|
Packit |
01d647 |
#else
|
|
Packit |
01d647 |
#define __VERSION__ "unknown"
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
const char* platform =
|
|
Packit |
01d647 |
#if defined(__MSYS__)
|
|
Packit |
01d647 |
"msys";
|
|
Packit |
01d647 |
#elif defined(__CYGWIN__)
|
|
Packit |
01d647 |
"cygwin";
|
|
Packit |
01d647 |
#elif defined(_MSC_VER)
|
|
Packit |
01d647 |
"windows";
|
|
Packit |
01d647 |
#elif defined(__APPLE__)
|
|
Packit |
01d647 |
"apple";
|
|
Packit |
01d647 |
#elif defined(__MINGW64__)
|
|
Packit |
01d647 |
"mingw64";
|
|
Packit |
01d647 |
#elif defined(__MINGW32__)
|
|
Packit |
01d647 |
"mingw32";
|
|
Packit Service |
fb147c |
#elif defined(__sun__)
|
|
Packit Service |
fb147c |
"solaris";
|
|
Packit |
01d647 |
#elif defined(__NetBSD__)
|
|
Packit |
01d647 |
"netbsd";
|
|
Packit |
01d647 |
#elif defined(__FreeBSD__)
|
|
Packit |
01d647 |
"freebsd";
|
|
Packit |
01d647 |
#elif defined(__linux__)
|
|
Packit |
01d647 |
"linux";
|
|
Packit |
01d647 |
#else
|
|
Packit |
01d647 |
"unknown";
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
int have_inttypes =0;
|
|
Packit |
01d647 |
int have_libintl =0;
|
|
Packit |
01d647 |
int have_lensdata =0;
|
|
Packit |
01d647 |
int have_iconv =0;
|
|
Packit |
01d647 |
int have_memory =0;
|
|
Packit |
01d647 |
int have_lstat =0;
|
|
Packit |
01d647 |
int have_regex =0;
|
|
Packit |
01d647 |
int have_regex_h =0;
|
|
Packit |
01d647 |
int have_stdbool =0;
|
|
Packit |
01d647 |
int have_stdint =0;
|
|
Packit |
01d647 |
int have_stdlib =0;
|
|
Packit |
01d647 |
int have_strlib =0;
|
|
Packit |
01d647 |
int have_strerror_r =0;
|
|
Packit |
01d647 |
int have_strings_h =0;
|
|
Packit |
01d647 |
int have_mmap =0;
|
|
Packit |
01d647 |
int have_munmap =0;
|
|
Packit |
01d647 |
int have_sys_stat =0;
|
|
Packit |
01d647 |
int have_unistd_h =0;
|
|
Packit |
01d647 |
int have_sys_mman =0;
|
|
Packit |
01d647 |
int have_libz =0;
|
|
Packit |
01d647 |
int have_xmptoolkit =0;
|
|
Packit |
01d647 |
int adobe_xmpsdk =0;
|
|
Packit |
01d647 |
int have_bool =0;
|
|
Packit |
01d647 |
int have_strings =0;
|
|
Packit |
01d647 |
int have_sys_types =0;
|
|
Packit |
01d647 |
int have_unistd =0;
|
|
Packit |
01d647 |
int have_unicode_path=0;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
int enable_video =0;
|
|
Packit |
01d647 |
int enable_webready =0;
|
|
Packit |
01d647 |
int enable_nls =0;
|
|
Packit |
01d647 |
int use_curl =0;
|
|
Packit |
01d647 |
int use_ssh =0;
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_INTTYPES_H
|
|
Packit |
01d647 |
have_inttypes=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_LIBINTL_H
|
|
Packit |
01d647 |
have_libintl=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_LENSDATA
|
|
Packit |
01d647 |
have_lensdata=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_ICONV
|
|
Packit |
01d647 |
have_iconv=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_LIBINTL_H
|
|
Packit |
01d647 |
have_libintl=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_MEMORY_H
|
|
Packit |
01d647 |
have_memory=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_LSTAT
|
|
Packit |
01d647 |
have_lstat=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_REGEX
|
|
Packit |
01d647 |
have_regex=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_REGEX_H
|
|
Packit |
01d647 |
have_regex_h=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_STDBOOL_H
|
|
Packit |
01d647 |
have_stdbool=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_STDINT_H
|
|
Packit |
01d647 |
have_stdint=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_STDLIB_H
|
|
Packit |
01d647 |
have_stdlib=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_STRERROR_R
|
|
Packit |
01d647 |
have_strerror_r=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_STRINGS_H
|
|
Packit |
01d647 |
have_strings=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_MMAP
|
|
Packit |
01d647 |
have_mmap=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_MUNMAP
|
|
Packit |
01d647 |
have_munmap=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_SYS_STAT_H
|
|
Packit |
01d647 |
have_sys_stat=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_SYS_TYPES_H
|
|
Packit |
01d647 |
have_sys_types=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_UNISTD_H
|
|
Packit |
01d647 |
have_unistd=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_SYS_MMAN_H
|
|
Packit |
01d647 |
have_sys_mman=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_LIBZ
|
|
Packit |
01d647 |
have_libz=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_XMP_TOOLKIT
|
|
Packit |
01d647 |
have_xmptoolkit=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_ADOBE_XMPSDK
|
|
Packit |
01d647 |
adobe_xmpsdk=EXV_ADOBE_XMPSDK;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_BOOL
|
|
Packit |
01d647 |
have_bool=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_STRINGS
|
|
Packit |
01d647 |
have_strings=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_SYS_TYPES
|
|
Packit |
01d647 |
have_sys_types=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_UNISTD
|
|
Packit |
01d647 |
have_unistd=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_UNICODE_PATH
|
|
Packit |
01d647 |
have_unicode_path=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_ENABLE_VIDEO
|
|
Packit |
01d647 |
enable_video=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_ENABLE_WEBREADY
|
|
Packit |
01d647 |
enable_webready=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_ENABLE_NLS
|
|
Packit |
01d647 |
enable_nls=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_USE_CURL
|
|
Packit |
01d647 |
use_curl=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_USE_SSH
|
|
Packit |
01d647 |
use_ssh=1;
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
Exiv2::StringVector libs =getLoadedLibraries();
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
output(os,keys,"exiv2",Exiv2::versionString());
|
|
Packit |
01d647 |
output(os,keys,"platform" , platform );
|
|
Packit |
01d647 |
output(os,keys,"compiler" , compiler );
|
|
Packit |
01d647 |
output(os,keys,"bits" , bits );
|
|
Packit |
01d647 |
output(os,keys,"dll" , dll );
|
|
Packit |
01d647 |
output(os,keys,"debug" , debug );
|
|
Packit |
01d647 |
output(os,keys,"cplusplus" , __cplusplus);
|
|
Packit |
01d647 |
output(os,keys,"version" , __VERSION__);
|
|
Packit |
01d647 |
output(os,keys,"date" , __DATE__ );
|
|
Packit |
01d647 |
output(os,keys,"time" , __TIME__ );
|
|
Packit |
01d647 |
output(os,keys,"processpath" , Exiv2::getProcessPath());
|
|
Packit |
01d647 |
#ifdef EXV_ENABLE_NLS
|
|
Packit |
01d647 |
output(os,keys,"localedir" , EXV_LOCALEDIR);
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
output(os,keys,"package_name" , EXV_PACKAGE_NAME);
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_USE_CURL
|
|
Packit |
01d647 |
std::string curl_protocols;
|
|
Packit |
01d647 |
curl_version_info_data* vinfo = curl_version_info(CURLVERSION_NOW);
|
|
Packit |
01d647 |
for (int i = 0; vinfo->protocols[i]; i++) {
|
|
Packit |
01d647 |
curl_protocols += vinfo->protocols[i];
|
|
Packit |
01d647 |
curl_protocols += " " ;
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
output(os,keys,"curlprotocols" ,curl_protocols);
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
output(os,keys,"curl" , use_curl);
|
|
Packit |
01d647 |
if ( libs.begin() != libs.end() ) {
|
|
Packit |
01d647 |
output(os,keys,"executable" ,*libs.begin());
|
|
Packit |
01d647 |
for ( Exiv2::StringVector_i lib = libs.begin()+1 ; lib != libs.end() ; ++lib )
|
|
Packit |
01d647 |
output(os,keys,"library",*lib);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
output(os,keys,"have_strerror_r" ,have_strerror_r );
|
|
Packit |
01d647 |
output(os,keys,"have_inttypes" ,have_inttypes );
|
|
Packit |
01d647 |
output(os,keys,"have_libintl" ,have_libintl );
|
|
Packit |
01d647 |
output(os,keys,"have_lensdata" ,have_lensdata );
|
|
Packit |
01d647 |
output(os,keys,"have_iconv" ,have_iconv );
|
|
Packit |
01d647 |
output(os,keys,"have_memory" ,have_memory );
|
|
Packit |
01d647 |
output(os,keys,"have_lstat" ,have_lstat );
|
|
Packit |
01d647 |
output(os,keys,"have_regex" ,have_regex );
|
|
Packit |
01d647 |
output(os,keys,"have_regex_h" ,have_regex_h );
|
|
Packit |
01d647 |
output(os,keys,"have_stdbool" ,have_stdbool );
|
|
Packit |
01d647 |
output(os,keys,"have_stdint" ,have_stdint );
|
|
Packit |
01d647 |
output(os,keys,"have_stdlib" ,have_stdlib );
|
|
Packit |
01d647 |
output(os,keys,"have_strlib" ,have_strlib );
|
|
Packit |
01d647 |
output(os,keys,"have_strerror_r" ,have_strerror_r );
|
|
Packit |
01d647 |
output(os,keys,"have_strings_h" ,have_strings_h );
|
|
Packit |
01d647 |
output(os,keys,"have_mmap" ,have_mmap );
|
|
Packit |
01d647 |
output(os,keys,"have_munmap" ,have_munmap );
|
|
Packit |
01d647 |
output(os,keys,"have_sys_stat" ,have_sys_stat );
|
|
Packit |
01d647 |
output(os,keys,"have_unistd_h" ,have_unistd_h );
|
|
Packit |
01d647 |
output(os,keys,"have_sys_mman" ,have_sys_mman );
|
|
Packit |
01d647 |
output(os,keys,"have_libz" ,have_libz );
|
|
Packit |
01d647 |
output(os,keys,"have_xmptoolkit" ,have_xmptoolkit );
|
|
Packit |
01d647 |
output(os,keys,"adobe_xmpsdk" ,adobe_xmpsdk );
|
|
Packit |
01d647 |
output(os,keys,"have_bool" ,have_bool );
|
|
Packit |
01d647 |
output(os,keys,"have_strings" ,have_strings );
|
|
Packit |
01d647 |
output(os,keys,"have_sys_types" ,have_sys_types );
|
|
Packit |
01d647 |
output(os,keys,"have_unistd" ,have_unistd );
|
|
Packit |
01d647 |
output(os,keys,"have_unicode_path" ,have_unicode_path);
|
|
Packit |
01d647 |
output(os,keys,"enable_video" ,enable_video );
|
|
Packit |
01d647 |
output(os,keys,"enable_webready" ,enable_webready );
|
|
Packit |
01d647 |
output(os,keys,"enable_nls" ,enable_nls );
|
|
Packit |
01d647 |
output(os,keys,"use_curl" ,use_curl );
|
|
Packit |
01d647 |
output(os,keys,"use_ssh" ,use_ssh );
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
output(os,keys,"config_path" ,Exiv2::Internal::getExiv2ConfigPath());
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
// #1147
|
|
Packit |
01d647 |
#ifndef WIN32
|
|
Packit |
01d647 |
uid_t uid = getuid() ; output(os,keys,"uid" , uid );
|
|
Packit |
01d647 |
uid_t euid = geteuid() ; output(os,keys,"euid", euid );
|
|
Packit |
01d647 |
uid_t gid = getgid() ; output(os,keys,"gid" , gid );
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
#ifdef EXV_HAVE_XMP_TOOLKIT
|
|
Packit |
01d647 |
const char* name = "xmlns";
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
Exiv2::Dictionary ns;
|
|
Packit |
01d647 |
Exiv2::XmpProperties::registeredNamespaces(ns);
|
|
Packit |
01d647 |
for ( Exiv2::Dictionary_i it = ns.begin(); it != ns.end() ; ++it ) {
|
|
Packit |
01d647 |
std::string xmlns = (*it).first;
|
|
Packit |
01d647 |
std::string uri = (*it).second;
|
|
Packit |
01d647 |
output(os,keys,name,xmlns+":"+uri);
|
|
Packit |
01d647 |
}
|
|
Packit |
01d647 |
#endif
|
|
Packit |
01d647 |
}
|