OPTION(ENABLE_STATIC "Build a static version of the libraries?" OFF)
OPTION(DISABLE_SHARED "Do not build a shared version of the libraries?" OFF)
+OPTION(ENABLE_PERL "Build the perl bindings?" OFF)
+OPTION(ENABLE_PYTHON "Build the python bindings?" OFF)
+OPTION(ENABLE_RUBY "Build the ruby bindings?" OFF)
+
#IF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERISION} GREATER 2.4)
#ENDIF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERISION} GREATER 2.4)
ADD_SUBDIRECTORY (src)
ADD_SUBDIRECTORY (ext)
ADD_SUBDIRECTORY (tools)
+IF (ENABLE_PERL OR ENABLE_PYTHON OR ENABLE_RUBY)
+ ADD_SUBDIRECTORY (bindings)
+ENDIF (ENABLE_PERL OR ENABLE_PYTHON OR ENABLE_RUBY)
ADD_SUBDIRECTORY (examples)
MESSAGE (STATUS "version: ${VERSION}")
--- /dev/null
+# as we link with --as-needed we do not get bogus dependencies
+SET (SYSTEM_LIBRARIES ${EXPAT_LIBRARY} ${ZLIB_LIBRARY})
+IF (NOT DEBIAN)
+SET (SYSTEM_LIBRARIES ${RPMDB_LIBRARY} ${SYSTEM_LIBRARIES})
+ENDIF (NOT DEBIAN)
+
+SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+
+FIND_PACKAGE (SWIG)
+
+MESSAGE (STATUS "Found SWIG version ${SWIG_VERSION}")
+SET (SWIG_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/solv.i")
+
+IF (ENABLE_PYTHON)
+ ADD_SUBDIRECTORY (python)
+ENDIF (ENABLE_PYTHON)
+IF (ENABLE_PERL)
+ ADD_SUBDIRECTORY (perl)
+ENDIF (ENABLE_PERL)
+IF (ENABLE_RUBY)
+ ADD_SUBDIRECTORY (ruby)
+ENDIF (ENABLE_RUBY)
--- /dev/null
+FIND_PACKAGE (Perl)
+
+EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{ccflags}" OUTPUT_VARIABLE PERL_CCFLAGS)
+EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{archlib}.\"/CORE\"" OUTPUT_VARIABLE PERL_CORE_DIR)
+EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{ccldflags}" OUTPUT_VARIABLE PERL_CCLDFLAGS)
+EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{installsitearch}" OUTPUT_VARIABLE PERL_SITEARCHDIR)
+EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{installvendorarch}" OUTPUT_VARIABLE PERL_VENDORARCHDIR)
+
+IF (USE_VENDORDIRS)
+ SET (PERL_INSTALL_DIR ${PERL_VENDORARCHDIR})
+ELSE (USE_VENDORDIRS)
+ SET (PERL_INSTALL_DIR ${PERL_SITEARCHDIR})
+ENDIF (USE_VENDORDIRS)
+
+MESSAGE (STATUS "Perl executable: ${PERL_EXECUTABLE}")
+MESSAGE (STATUS "Perl installation dir: ${PERL_INSTALL_DIR}")
+
+ADD_CUSTOM_COMMAND (
+ OUTPUT solv_perl.c
+ COMMAND ${SWIG_EXECUTABLE} -perl -I${CMAKE_SOURCE_DIR}/src -o solv_perl.c ${CMAKE_SOURCE_DIR}/bindings/solv.i
+ COMMAND sed -i -e "s/SvTYPE(tsv) == SVt_PVHV/SvTYPE(tsv) == SVt_PVHV || SvTYPE(tsv) == SVt_PVAV/" solv_perl.c
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/bindings/solv.i
+ VERBATIM
+)
+
+ADD_DEFINITIONS(${PERL_CCFLAGS} -Wno-unused)
+LINK_DIRECTORIES (${PERL_CORE_DIR})
+INCLUDE_DIRECTORIES (${PERL_INCLUDE_PATH} ${PERL_CORE_DIR})
+
+ADD_LIBRARY (bindings_perl SHARED solv_perl.c)
+SET_TARGET_PROPERTIES (bindings_perl PROPERTIES PREFIX "" OUTPUT_NAME "solv")
+SET_TARGET_PROPERTIES (bindings_perl PROPERTIES LINK_FLAGS "${PERL_CCLDFLAGS}")
+TARGET_LINK_LIBRARIES (bindings_perl libsolvext libsolv ${SYSTEM_LIBRARIES})
+
+INSTALL (TARGETS bindings_perl LIBRARY DESTINATION ${PERL_INSTALL_DIR})
+INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.pm DESTINATION ${PERL_INSTALL_DIR})
--- /dev/null
+FIND_PACKAGE (PythonLibs)
+FIND_PACKAGE (PythonInterp REQUIRED)
+EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib())" OUTPUT_VARIABLE PYTHON_LIB_DIR)
+
+IF (NOT PYTHON_SITEDIR)
+ SET (PYTHON_SITEDIR ${PYTHON_LIB_DIR})
+ENDIF (NOT PYTHON_SITEDIR)
+
+SET (PYTHON_INSTALL_DIR ${PYTHON_SITEDIR})
+
+MESSAGE (STATUS "Python executable: ${PYTHON_EXECUTABLE}")
+MESSAGE (STATUS "Python installation dir: ${PYTHON_INSTALL_DIR}")
+
+ADD_CUSTOM_COMMAND (
+ OUTPUT solv_python.c
+ COMMAND ${SWIG_EXECUTABLE} -python -I${CMAKE_SOURCE_DIR}/src -o solv_python.c ${CMAKE_SOURCE_DIR}/bindings/solv.i
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/bindings/solv.i
+)
+INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
+
+ADD_LIBRARY (bindings_python SHARED solv_python.c)
+SET_TARGET_PROPERTIES (bindings_python PROPERTIES PREFIX "" OUTPUT_NAME "_solv")
+TARGET_LINK_LIBRARIES (bindings_python libsolvext libsolv ${SYSTEM_LIBRARIES})
+
+INSTALL (TARGETS bindings_python LIBRARY DESTINATION ${PYTHON_INSTALL_DIR})
+INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.py DESTINATION ${PYTHON_INSTALL_DIR})
+
--- /dev/null
+FIND_PACKAGE (Ruby)
+
+IF (USE_VENDORDIRS)
+ SET (RUBY_INSTALL_DIR ${RUBY_VENDORARCH_DIR})
+ELSE (USE_VENDORDIRS)
+ SET (RUBY_INSTALL_DIR ${RUBY_SITEARCH_DIR})
+ENDIF (USE_VENDORDIRS)
+
+MESSAGE (STATUS "Ruby executable: ${RUBY_EXECUTABLE}")
+MESSAGE (STATUS "Ruby installation dir: ${RUBY_INSTALL_DIR}")
+
+ADD_CUSTOM_COMMAND (
+ OUTPUT solv_ruby.c
+ COMMAND ${SWIG_EXECUTABLE} -ruby -I${CMAKE_SOURCE_DIR}/src -o solv_ruby.c ${CMAKE_SOURCE_DIR}/bindings/solv.i
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/bindings/solv.i
+)
+INCLUDE_DIRECTORIES (${RUBY_INCLUDE_PATH})
+
+ADD_LIBRARY (bindings_ruby SHARED solv_ruby.c)
+SET_TARGET_PROPERTIES (bindings_ruby PROPERTIES PREFIX "" OUTPUT_NAME "solv")
+TARGET_LINK_LIBRARIES (bindings_ruby libsolvext libsolv ${SYSTEM_LIBRARIES})
+
+INSTALL (TARGETS bindings_ruby LIBRARY DESTINATION ${RUBY_INSTALL_DIR})
int v;
int e = SWIG_AsVal_int(*o, &v);
if (!SWIG_IsOK(e))
- SWIG_croak("list must contain only integers");
+ {
+ SWIG_Error(SWIG_RuntimeError, "list must contain only integers");
+ SWIG_fail;
+ }
queue_push(&$1, v);
}
}
%include "typemaps.i"
%{
-#include "stdio.h"
-#include "sys/stat.h"
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
#include "pool.h"
+#include "poolarch.h"
#include "solver.h"
#include "policy.h"
#include "solverdebug.h"
char *hex() {
int l;
const unsigned char *b;
- char *ret, *rp;
+ char *ret;
b = solv_chksum_get($self, &l);
ret = solv_malloc(2 * l + 1);
Datamatcher ma;
if (!datamatcher_init(&ma, match, flags)) {
for (id = 1; id < pool->ss.nstrings; id++)
- if (pool->whatprovides[id] && datamatcher_match(&ma, id2str(pool, id)))
+ if (pool->whatprovides[id] && datamatcher_match(&ma, pool_id2str(pool, id)))
queue_push(&q, id);
datamatcher_free(&ma);
}
return $self->key->name;
}
const char *key_idstr() {
- return id2str($self->pool, $self->key->name);
+ return pool_id2str($self->pool, $self->key->name);
}
Id type_id() {
return $self->key->type;
}
const char *type_idstr() {
- return id2str($self->pool, $self->key->type);
+ return pool_id2str($self->pool, $self->key->type);
}
Id id() {
return $self->kv.id;
}
const char *idstr() {
- return id2str($self->pool, $self->kv.id);
+ return pool_id2str($self->pool, $self->kv.id);
}
const char *str() {
return $self->kv.str;
%newobject __next__;
XSolvable *__next__() {
Pool *pool = $self->pool;
- XSolvable *s;
if ($self->id >= pool->nsolvables)
return 0;
while (++$self->id < pool->nsolvables)
XSolvable *__next__() {
Repo *repo = $self->repo;
Pool *pool = repo->pool;
- XSolvable *s;
if (repo->start > 0 && $self->id < repo->start)
$self->id = repo->start - 1;
if ($self->id >= repo->end)
const unsigned char *b = pool_lookup_bin_checksum($self->pool, $self->id, keyname, &type);
return solv_chksum_create_from_bin(type, b);
}
- const char *lookup_location(int *OUTPUT) {
+ const char *lookup_location(unsigned int *OUTPUT) {
return solvable_get_location($self->pool->solvables + $self->id, OUTPUT);
}
#ifdef SWIGRUBY
%{
SWIGINTERN const char *XSolvable_name_get(XSolvable *xs) {
Pool *pool = xs->pool;
- return id2str(pool, pool->solvables[xs->id].name);
+ return pool_id2str(pool, pool->solvables[xs->id].name);
}
%}
Id const nameid;
%{
SWIGINTERN const char *XSolvable_evr_get(XSolvable *xs) {
Pool *pool = xs->pool;
- return id2str(pool, pool->solvables[xs->id].evr);
+ return pool_id2str(pool, pool->solvables[xs->id].evr);
}
%}
Id const evrid;
%{
SWIGINTERN const char *XSolvable_arch_get(XSolvable *xs) {
Pool *pool = xs->pool;
- return id2str(pool, pool->solvables[xs->id].arch);
+ return pool_id2str(pool, pool->solvables[xs->id].arch);
}
%}
Id const archid;
%{
SWIGINTERN const char *XSolvable_vendor_get(XSolvable *xs) {
Pool *pool = xs->pool;
- return id2str(pool, pool->solvables[xs->id].vendor);
+ return pool_id2str(pool, pool->solvables[xs->id].vendor);
}
%}
Id const vendorid;
use POSIX;
use Fcntl;
use Config::IniFiles;
-use File::FnMatch;
use Data::Dumper;
use solv;
use Devel::Peek;
if chksum
fchksum = Solv::Chksum.new(chksum.type)
fchksum.add_fd(f.fileno)
- if !fchksum.matches(chksum)
+ if !fchksum == chksum
puts "#{file}: checksum error"
@incomplete = true if markincomplete
return nil