Merge pull request #92 from cbsiddharth/topic/cmake_build

Switch to cmake builds and fix a bunch of other stuffs
This commit is contained in:
Priyesh 2019-12-06 15:38:17 -08:00 committed by GitHub
commit 59293d015e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 849 additions and 1306 deletions

3
.gitignore vendored
View File

@ -79,3 +79,6 @@ __pycache__/
#generated files
*.pc
# build directory
build/

View File

@ -2,4 +2,4 @@ services:
- docker
script:
- bash ./build-docker.sh
- bash ./docker-build.sh

224
CMakeLists.txt Normal file
View File

@ -0,0 +1,224 @@
#
# Copyright (C) 2019 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU General Public License v2 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
# Author: Siddharth Chandrasekaran <csiddharth@vmware.com>
CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR)
project(tdnf)
set(PROJECT_YEAR 2019)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(AddCCompilerFlag)
include(BuildMetaData)
include(CreatePackages)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
##
## C Flags
##
add_c_compiler_flag(-Wall)
add_c_compiler_flag(-Wextra)
add_c_compiler_flag(-std=gnu99)
add_c_compiler_flag(-O3 RELEASE)
add_c_compiler_flag(-s RELEASE)
add_c_compiler_flag(-O0 DEBUG)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# Custom command produces build_meta_data.c, and a dummy output that's
# not actually produced, in order to force Version.cmake to always be
# re-run before the build
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build_meta_data.c
${CMAKE_CURRENT_BINARY_DIR}/_build_meta_data.c
COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_SOURCE_DIR}/cmake/BuildMetaData.cmake
COMMENT "Generating build meta data.."
)
##
## build libtdnfclient.so
##
### External dependency: rpm-devel
find_package(PkgConfig REQUIRED)
pkg_check_modules(RPM REQUIRED rpm)
include_directories(${RPM_INCLUDE_DIRS})
### External dependency: libsolv
find_package(LibSolv REQUIRED ext)
### External dependency: libcurl
find_package(CURL REQUIRED)
set(LIB_TDNF_CLIENT tdnfclient)
list(APPEND LIB_TDNF_COMMMON_SRC
"${CMAKE_BINARY_DIR}/build_meta_data.c"
"common/memory.c"
"common/strings.c"
"common/configreader.c"
"common/setopt.c"
"common/utils.c"
)
list(APPEND LIB_TDNF_SOLV_SRC
"solv/tdnfpool.c"
"solv/tdnfrepo.c"
"solv/tdnfquery.c"
"solv/tdnfpackage.c"
)
list(APPEND LIB_TDNF_CLIENT_SRC
"client/api.c"
"client/clean.c"
"client/client.c"
"client/config.c"
"client/goal.c"
"client/gpgcheck.c"
"client/init.c"
"client/packageutils.c"
"client/repo.c"
"client/remoterepo.c"
"client/repolist.c"
"client/repoutils.c"
"client/resolve.c"
"client/rpmtrans.c"
"client/updateinfo.c"
"client/utils.c"
"client/validate.c"
)
add_library(${LIB_TDNF_CLIENT} SHARED
${LIB_TDNF_CLIENT_SRC}
${LIB_TDNF_SOLV_SRC}
${LIB_TDNF_COMMMON_SRC}
)
set_target_properties(${LIB_TDNF_CLIENT} PROPERTIES
OUTPUT_NAME "tdnf"
VERSION "2.0.0"
SOVERSION "2"
)
install(TARGETS ${LIB_TDNF_CLIENT} LIBRARY DESTINATION lib COMPONENT library)
##
## build libtdnfcli.so
##
set(LIB_TDNF_CLI tdnfcli)
list(APPEND LIB_TDNF_CLI_SRC
"tools/cli/lib/api.c"
"tools/cli/lib/help.c"
"tools/cli/lib/installcmd.c"
"tools/cli/lib/options.c"
"tools/cli/lib/output.c"
"tools/cli/lib/parseargs.c"
"tools/cli/lib/parsecleanargs.c"
"tools/cli/lib/parselistargs.c"
"tools/cli/lib/parserepolistargs.c"
"tools/cli/lib/parseupdateinfo.c"
"tools/cli/lib/updateinfocmd.c"
)
add_library(${LIB_TDNF_CLI} SHARED ${LIB_TDNF_CLI_SRC})
set_target_properties(${LIB_TDNF_CLI} PROPERTIES
VERSION "2.0.0"
SOVERSION "2"
)
install(TARGETS ${LIB_TDNF_CLI} LIBRARY DESTINATION lib COMPONENT library)
##
## tdnf binary
##
set(TDNF_BIN tdnf)
list(APPEND TDNF_BIN_SRC
"tools/cli/main.c"
)
add_executable(${TDNF_BIN} ${TDNF_BIN_SRC})
target_link_libraries(${TDNF_BIN} PUBLIC
${LIB_TDNF_CLIENT}
${LIB_TDNF_CLI}
${RPM_LIBRARIES}
${LibSolv_LIBRARIES}
${CURL_LIBRARIES}
)
install(TARGETS ${TDNF_BIN} RUNTIME DESTINATION bin COMPONENT binary)
##
## Other static resources
##
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/resources/tdnf.conf"
DESTINATION "/etc/tdnf"
COMPONENT resources
)
install(DIRECTORY DESTINATION "share/bash-completion/completions")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/resources/tdnf-completion.bash"
DESTINATION "share/bash-completion/completions"
COMPONENT resources
)
##
## check target
##
add_custom_target(check
COMMAND pytest --build-dir=${CMAKE_CURRENT_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/pytests
COMMENT "Running tests.."
)
##
## python modules
##
find_package(PythonInterp 3.7 REQUIRED)
find_package(PythonLibs 3.7 REQUIRED)
set(PYTDNF_PACKAGE_NAME "${PROJECT_NAME}")
set(PYTDNF_VERSION "${VERSION_STRING}")
set(PYTDNF_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/python")
set(PYTDNF_INC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(PYTDNF_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/lib")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py.in"
"${CMAKE_CURRENT_BINARY_DIR}/python/setup.py"
)
add_custom_target(python
COMMAND cp -r "${CMAKE_CURRENT_SOURCE_DIR}/python/tdnf" .
COMMAND ${PYTHON_EXECUTABLE} setup.py build
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/python"
)
add_custom_target(package_pytdnf
COMMAND ${PYTHON_EXECUTABLE} setup.py bdist --formats=rpm
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/python"
)

View File

@ -4,12 +4,11 @@ MAINTAINER csiddharth@vmware.com
RUN tdnf update -q -y
RUN tdnf remove -q -y toybox
RUN tdnf install -q -y build-essential autoconf automake make \
libtool sed curl-devel rpm-build popt-devel \
libsolv-devel createrepo_c glib libxml2 findutils \
python3 python3-pip python3-setuptools
RUN tdnf install -q -y build-essential cmake curl-devel rpm-build libsolv-devel \
popt-devel sed createrepo_c glib libxml2 findutils \
python3 python3-pip python3-setuptools python3-devel
# python build/test dependencies
RUN pip3 install -q requests urllib3 pyOpenSSL pytest
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["/bin/bash"]

View File

@ -1,57 +0,0 @@
ACLOCAL_AMFLAGS = -I m4
APP_NAME=tdnf
CLEANFILES =
EXTRA_DIST =
noinst_DATA =
conf_DATA = tdnf.conf
pkginclude_HEADERS = include/*.h
pkgconfigdir = $(libdir)/pkgconfig
SUBDIRS = \
solv \
common \
client \
tests \
tools
if ENABLE_PYTHON
SUBDIRS += python
endif
noinst_DATA += tdnf.spec
tdnf.spec: $(top_srcdir)/tdnf.spec.in
./config.status --file=${subdir}/tdnf.spec:${subdir}/tdnf.spec.in
pkgconfig_DATA = tdnf.pc tdnf-cli-libs.pc
tdnf.pc: $(top_srcdir)/tdnf.pc.in
./config.status --file=${subdir}/tdnf.pc:${subdir}/tdnf.pc.in
tdnf-cli-libs.pc: $(top_srcdir)/tdnf-cli-libs.pc.in
./config.status --file=${subdir}/tdnf-cli-libs.pc:${subdir}/tdnf-cli-libs.pc.in
CLEANFILES += tdnf.pc
CLEANFILES += tdnf-cli-libs.pc
EXTRA_DIST += tdnf.pc.in
EXTRA_DIST += tdnf-cli-libs.pc.in
tar-src:
git archive --format=tar.gz --prefix=$(APP_NAME)-$(VERSION)/ -o $(APP_NAME)-$(VERSION).tar.gz HEAD
rpm: tar-src tdnf.spec
mkdir -p .rpm/SOURCES
mkdir -p .rpm/BUILD
mkdir -p .rpm/RPMS/x86_64
-rm -rf .rpm/RPMS/$(APP_NAME)-*
-rm -rf .rpm/SOURCES/$(APP_NAME)-*
mv $(APP_NAME)-$(VERSION).tar.gz .rpm/SOURCES
rpmbuild --quiet --nodeps --define="_topdir $(abs_top_builddir)/.rpm" \
-bb $(APP_NAME).spec
mkdir -p rpms
mv .rpm/RPMS/x86_64/*$(APP_NAME)-*$(VERSION)-*.x86_64.rpm rpms
clean-local:
-rm -rf .rpm
-rm -rf rpms

View File

@ -1,3 +0,0 @@
rpm:
autoreconf -mif
./configure --enable-python && make rpm

View File

@ -1,4 +0,0 @@
#!/bin/bash
docker build -t photon/tdnf-build .
docker run --rm -it -v$(pwd):/build -w/build photon/tdnf-build

View File

@ -1,30 +0,0 @@
lib_LTLIBRARIES = libtdnf.la
libtdnf_la_CPPFLAGS = -I$(top_srcdir)/include
AM_CFLAGS += $(LIBCURL_CFLAGS)
libtdnf_la_SOURCES = \
api.c \
clean.c \
client.c \
config.c \
goal.c \
gpgcheck.c \
init.c \
packageutils.c \
repo.c \
remoterepo.c \
repolist.c \
repoutils.c \
resolve.c \
rpmtrans.c \
updateinfo.c \
utils.c \
validate.c
libtdnf_la_LIBADD = \
@top_builddir@/solv/libtdnfsolv.la \
$(top_builddir)/common/libcommon.la \
@LIBCURL_LIBS@ \
@RPM_LIBS@ \
@LIBSOLVEXT_LIBS@

View File

@ -20,6 +20,9 @@
#include "includes.h"
extern const char *PACKAGE_VERSION;
extern const char *PACKAGE_NAME;
static TDNF_ENV gEnv = {0};
uint32_t
@ -1266,3 +1269,10 @@ TDNFGetVersion(
{
return PACKAGE_VERSION;
}
const char*
TDNFGetPackageName(
)
{
return PACKAGE_NAME;
}

View File

@ -0,0 +1,38 @@
# - Adds a compiler flag if it is supported by the compiler
#
# This function checks that the supplied compiler flag is supported and then
# adds it to the corresponding compiler flags
#
# add_c_compiler_flag(<FLAG> [<VARIANT>])
#
# - Example
#
# include(AddCCompilerFlag)
# add_c_compiler_flag(-Wall)
# add_c_compiler_flag(-no-strict-aliasing RELEASE)
# Requires CMake 2.6+
if(__add_c_compiler_flag)
return()
endif()
set(__add_c_compiler_flag INCLUDED)
include(CheckCCompilerFlag)
function(add_c_compiler_flag FLAG)
string(TOUPPER "HAVE_C_FLAG_${FLAG}" SANITIZED_FLAG)
string(REPLACE "+" "X" SANITIZED_FLAG ${SANITIZED_FLAG})
string(REGEX REPLACE "[^A-Za-z_0-9]" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
string(REGEX REPLACE "_+" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
set(CMAKE_REQUIRED_FLAGS "${FLAG}")
check_c_compiler_flag("" ${SANITIZED_FLAG})
if(${SANITIZED_FLAG})
set(VARIANT ${ARGV1})
if(ARGV1)
string(REGEX REPLACE "[^A-Za-z_0-9]" "_" VARIANT "${VARIANT}")
string(TOUPPER "_${VARIANT}" VARIANT)
endif()
set(CMAKE_C_FLAGS${VARIANT} "${CMAKE_C_FLAGS${VARIANT}} ${FLAG}" PARENT_SCOPE)
endif()
endfunction()

80
cmake/BuildMetaData.cmake Normal file
View File

@ -0,0 +1,80 @@
execute_process(COMMAND
git log --pretty=format:'%h' -n 1
OUTPUT_VARIABLE GIT_REV
ERROR_QUIET
)
string(STRIP "${GIT_REV}" GIT_REV)
if (NOT "${GIT_REV}" STREQUAL "")
# GIT_REV
string(SUBSTRING "${GIT_REV}" 1 7 GIT_REV)
# GIT_DIFF
execute_process(COMMAND
bash -c "git diff --quiet --exit-code || echo +"
OUTPUT_VARIABLE GIT_DIFF
)
string(STRIP "${GIT_DIFF}" GIT_DIFF)
# GIT_TAG
execute_process(COMMAND
git describe --exact-match --tags
OUTPUT_VARIABLE GIT_TAG ERROR_QUIET
)
string(STRIP "${GIT_TAG}" GIT_TAG)
# GIT_BRANCH
execute_process(COMMAND
git rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE GIT_BRANCH
)
string(STRIP "${GIT_BRANCH}" GIT_BRANCH)
# VERSION_STRING
execute_process(COMMAND
git describe --tags --abbrev=0
OUTPUT_VARIABLE GIT_TAG_VERSION ERROR_QUIET
)
string(STRIP "${GIT_TAG_VERSION}" GIT_TAG_VERSION)
if (NOT ${GIT_TAG_VERSION} STREQUAL "")
string(REGEX
REPLACE "^v?(([0-9]+)\\.([0-9]+)(\\.([0-9]+))?).*$" "\\1"
VERSION_STRING ${GIT_TAG_VERSION}
)
endif()
endif()
if ("${GIT_REV}" STREQUAL "")
set(GIT_REV "000000")
endif()
if ("${GIT_DIFF}" STREQUAL "")
set(GIT_DIFF "?")
endif()
if ("${GIT_TAG}" STREQUAL "")
set(GIT_TAG "NONE")
endif()
if ("${GIT_BRANCH}" STREQUAL "")
set(GIT_BRANCH "NONE")
endif()
if ("${VERSION_STRING}" STREQUAL "")
set(VERSION_STRING "0.0.0")
endif()
string(CONCAT BUILD_META_C
"const char *PACKAGE_NAME = \"tdnf\";\n"
"const char *PACKAGE_VERSION = \"${VERSION_STRING}\";\n"
"const char *GIT_REV = \"${GIT_REV}${GIT_DIFF}\";\n"
"const char *GIT_TAG = \"${GIT_TAG}\";\n"
"const char *GIT_BRANCH = \"${GIT_BRANCH}\";\n"
"const char *VERSION = \"${VERSION_STRING}\";\n"
)
if(EXISTS ${CMAKE_BINARY_DIR}/build_meta_data.c)
file(READ ${CMAKE_BINARY_DIR}/build_meta_data.c BUILD_META_C_OLD)
else()
set(BUILD_META_C_OLD "")
endif()
if (NOT "${BUILD_META_C}" STREQUAL "${BUILD_META_C_OLD}")
file(WRITE ${CMAKE_BINARY_DIR}/build_meta_data.c "${BUILD_META_C}")
endif()

View File

@ -0,0 +1,19 @@
if(NOT EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
message(FATAL_ERROR "Cpack module is not present!")
endif()
set(CPACK_PACKAGE_NAME "tdnf")
set(CPACK_PACKAGE_VENDOR "VMware, Inc.")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "tdnf is a yum/dnf equivalent which uses libsolv and libcurl")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_PACKAGE_VERSION ${VERSION_STRING})
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_PROCESSOR}")
#set(CPACK_RPM_PACKAGE_ARCHITECTURE "noarch")
set(CPACK_GENERATOR "RPM")
#set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/pre.sh")
#set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/post.sh")
include(CPack)

95
cmake/FindLibSolv.cmake Normal file
View File

@ -0,0 +1,95 @@
# FindLibSolv - Find libsolv headers and libraries.
#
# Sample:
#
# SET( LibSolv_USE_STATIC_LIBS OFF )
# FIND_PACKAGE( LibSolv REQUIRED ext )
# IF( LibSolv_FOUND )
# INCLUDE_DIRECTORIES( ${LibSolv_INCLUDE_DIRS} )
# TARGET_LINK_LIBRARIES( ... ${LibSolv_LIBRARIES} )
# ENDIF()
#
# Variables used by this module need to be set before calling find_package
# (not that they are cmale cased like the modiulemane itself):
#
# LibSolv_USE_STATIC_LIBS Can be set to ON to force the use of the static
# libsolv libraries. Defaults to OFF.
#
# Supported components:
#
# ext Also include libsolvext
#
# Variables provided by this module:
#
# LibSolv_FOUND Include dir, libsolv and all extra libraries
# specified in the COMPONENTS list were found.
#
# LibSolv_LIBRARIES Link to these to use all the libraries you specified.
#
# LibSolv_INCLUDE_DIRS Include directories.
#
# For each component you specify in find_package(), the following (UPPER-CASE)
# variables are set to pick and choose components instead of just using LibSolv_LIBRARIES:
#
# LIBSOLV_FOUND TRUE if libsolv was found
# LIBSOLV_LIBRARY libsolv libraries
#
# LIBSOLV_${COMPONENT}_FOUND TRUE if the library component was found
# LIBSOLV_${COMPONENT}_LIBRARY The libraries for the specified component
#
# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
IF(LibSolv_USE_STATIC_LIBS)
SET( _ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
SET(CMAKE_FIND_LIBRARY_SUFFIXES .a )
ENDIF()
# Look for the header files
UNSET(LibSolv_INCLUDE_DIRS CACHE)
FIND_PATH(LibSolv_INCLUDE_DIRS NAMES solv/solvable.h)
# Look for the core library
UNSET(LIBSOLV_LIBRARY CACHE)
FIND_LIBRARY(LIBSOLV_LIBRARY NAMES solv)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibSolv DEFAULT_MSG LIBSOLV_LIBRARY LibSolv_INCLUDE_DIRS)
MARK_AS_ADVANCED(
LIBSOLV_FOUND
LIBSOLV_LIBRARY
)
# Prepare return values and collectiong more components
SET(LibSolv_FOUND ${LIBSOLV_FOUND})
SET(LibSolv_LIBRARIES ${LIBSOLV_LIBRARY})
MARK_AS_ADVANCED(
LibSolv_FOUND
LibSolv_LIBRARIES
LibSolv_INCLUDE_DIRS
)
# Look for components
FOREACH(COMPONENT ${LibSolv_FIND_COMPONENTS})
STRING(TOUPPER ${COMPONENT} _UPPERCOMPONENT)
UNSET(LIBSOLV_${_UPPERCOMPONENT}_LIBRARY CACHE)
FIND_LIBRARY(LIBSOLV_${_UPPERCOMPONENT}_LIBRARY NAMES solv${COMPONENT})
SET(LibSolv_${COMPONENT}_FIND_REQUIRED ${LibSolv_FIND_REQUIRED})
SET(LibSolv_${COMPONENT}_FIND_QUIETLY ${LibSolv_FIND_QUIETLY})
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibSolv_${COMPONENT} DEFAULT_MSG LIBSOLV_${_UPPERCOMPONENT}_LIBRARY)
MARK_AS_ADVANCED(
LIBSOLV_${_UPPERCOMPONENT}_FOUND
LIBSOLV_${_UPPERCOMPONENT}_LIBRARY
)
IF(LIBSOLV_${_UPPERCOMPONENT}_FOUND)
SET(LibSolv_LIBRARIES ${LibSolv_LIBRARIES} ${LIBSOLV_${_UPPERCOMPONENT}_LIBRARY})
ELSE()
SET(LibSolv_FOUND FALSE)
ENDIF()
ENDFOREACH()
# restore CMAKE_FIND_LIBRARY_SUFFIXES
IF(Solv_USE_STATIC_LIBS)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES} )
ENDIF()
IF(LibSolv_FOUND AND NOT LibSolv_FIND_QUIETLY)
MESSAGE(STATUS "Found LibSolv: ${LibSolv_INCLUDE_DIRS} ${LibSolv_LIBRARIES}")
ENDIF()

View File

@ -0,0 +1,316 @@
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
#
# This function is intended to be used in FindXXX.cmake modules files.
# It handles the REQUIRED, QUIET and version-related arguments to FIND_PACKAGE().
# It also sets the <UPPERCASED_NAME>_FOUND variable.
# The package is considered found if all variables <var1>... listed contain
# valid results, e.g. valid filepaths.
#
# There are two modes of this function. The first argument in both modes is
# the name of the Find-module where it is called (in original casing).
#
# The first simple mode looks like this:
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> )
# If the variables <var1> to <varN> are all valid, then <UPPERCASED_NAME>_FOUND
# will be set to TRUE.
# If DEFAULT_MSG is given as second argument, then the function will generate
# itself useful success and error messages. You can also supply a custom error message
# for the failure case. This is not recommended.
#
# The second mode is more powerful and also supports version checking:
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS <var1>...<varN>]
# [VERSION_VAR <versionvar>]
# [HANDLE_COMPONENTS]
# [CONFIG_MODE]
# [FAIL_MESSAGE "Custom failure message"] )
#
# As above, if <var1> through <varN> are all valid, <UPPERCASED_NAME>_FOUND
# will be set to TRUE.
# After REQUIRED_VARS the variables which are required for this package are listed.
# Following VERSION_VAR the name of the variable can be specified which holds
# the version of the package which has been found. If this is done, this version
# will be checked against the (potentially) specified required version used
# in the find_package() call. The EXACT keyword is also handled. The default
# messages include information about the required version and the version
# which has been actually found, both if the version is ok or not.
# If the package supports components, use the HANDLE_COMPONENTS option to enable
# handling them. In this case, find_package_handle_standard_args() will report
# which components have been found and which are missing, and the <NAME>_FOUND
# variable will be set to FALSE if any of the required components (i.e. not the
# ones listed after OPTIONAL_COMPONENTS) are missing.
# Use the option CONFIG_MODE if your FindXXX.cmake module is a wrapper for
# a find_package(... NO_MODULE) call. In this case VERSION_VAR will be set
# to <NAME>_VERSION and the macro will automatically check whether the
# Config module was found.
# Via FAIL_MESSAGE a custom failure message can be specified, if this is not
# used, the default message will be displayed.
#
# Example for mode 1:
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
#
# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and
# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE.
# If it is not found and REQUIRED was used, it fails with FATAL_ERROR,
# independent whether QUIET was used or not.
# If it is found, success will be reported, including the content of <var1>.
# On repeated Cmake runs, the same message won't be printed again.
#
# Example for mode 2:
#
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE
# VERSION_VAR BISON_VERSION)
# In this case, BISON is considered to be found if the variable(s) listed
# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case.
# Also the version of BISON will be checked by using the version contained
# in BISON_VERSION.
# Since no FAIL_MESSAGE is given, the default messages will be printed.
#
# Another example for mode 2:
#
# FIND_PACKAGE(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(Automoc4 CONFIG_MODE)
# In this case, FindAutmoc4.cmake wraps a call to FIND_PACKAGE(Automoc4 NO_MODULE)
# and adds an additional search directory for automoc4.
# The following FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper
# success/error message.
#=============================================================================
# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
# nor the names of their contributors may be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
INCLUDE(FindPackageMessage)
INCLUDE(_CMakeParseArguments)
# internal helper macro
MACRO(_FPHSA_FAILURE_MESSAGE _msg)
IF (${_NAME}_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "${_msg}")
ELSE (${_NAME}_FIND_REQUIRED)
IF (NOT ${_NAME}_FIND_QUIETLY)
MESSAGE(STATUS "${_msg}")
ENDIF (NOT ${_NAME}_FIND_QUIETLY)
ENDIF (${_NAME}_FIND_REQUIRED)
ENDMACRO(_FPHSA_FAILURE_MESSAGE _msg)
# internal helper macro to generate the failure message when used in CONFIG_MODE:
MACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
# <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
IF(${_NAME}_CONFIG)
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing: ${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})")
ELSE(${_NAME}_CONFIG)
# If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
# List them all in the error message:
IF(${_NAME}_CONSIDERED_CONFIGS)
SET(configsText "")
LIST(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount)
MATH(EXPR configsCount "${configsCount} - 1")
FOREACH(currentConfigIndex RANGE ${configsCount})
LIST(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename)
LIST(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version)
SET(configsText "${configsText} ${filename} (version ${version})\n")
ENDFOREACH(currentConfigIndex)
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:\n${configsText}")
ELSE(${_NAME}_CONSIDERED_CONFIGS)
# Simple case: No Config-file was found at all:
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}")
ENDIF(${_NAME}_CONSIDERED_CONFIGS)
ENDIF(${_NAME}_CONFIG)
ENDMACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG)
# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in
# new extended or in the "old" mode:
SET(options CONFIG_MODE HANDLE_COMPONENTS)
SET(oneValueArgs FAIL_MESSAGE VERSION_VAR)
SET(multiValueArgs REQUIRED_VARS)
SET(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} )
LIST(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
IF(${INDEX} EQUAL -1)
SET(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
SET(FPHSA_REQUIRED_VARS ${ARGN})
SET(FPHSA_VERSION_VAR)
ELSE(${INDEX} EQUAL -1)
CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN})
IF(FPHSA_UNPARSED_ARGUMENTS)
MESSAGE(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"")
ENDIF(FPHSA_UNPARSED_ARGUMENTS)
IF(NOT FPHSA_FAIL_MESSAGE)
SET(FPHSA_FAIL_MESSAGE "DEFAULT_MSG")
ENDIF(NOT FPHSA_FAIL_MESSAGE)
ENDIF(${INDEX} EQUAL -1)
# now that we collected all arguments, process them
IF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
SET(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
ENDIF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
# In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package()
# when it successfully found the config-file, including version checking:
IF(FPHSA_CONFIG_MODE)
LIST(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG)
LIST(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS)
SET(FPHSA_VERSION_VAR ${_NAME}_VERSION)
ENDIF(FPHSA_CONFIG_MODE)
IF(NOT FPHSA_REQUIRED_VARS)
MESSAGE(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()")
ENDIF(NOT FPHSA_REQUIRED_VARS)
LIST(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
STRING(TOUPPER ${_NAME} _NAME_UPPER)
STRING(TOLOWER ${_NAME} _NAME_LOWER)
# collect all variables which were not found, so they can be printed, so the
# user knows better what went wrong (#6375)
SET(MISSING_VARS "")
SET(DETAILS "")
SET(${_NAME_UPPER}_FOUND TRUE)
# check if all passed variables are valid
FOREACH(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
IF(NOT ${_CURRENT_VAR})
SET(${_NAME_UPPER}_FOUND FALSE)
SET(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}")
ELSE(NOT ${_CURRENT_VAR})
SET(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]")
ENDIF(NOT ${_CURRENT_VAR})
ENDFOREACH(_CURRENT_VAR)
# component handling
SET(FOUND_COMPONENTS_MSG "")
SET(MISSING_COMPONENTS_MSG "")
IF(FPHSA_HANDLE_COMPONENTS)
FOREACH(comp ${${_NAME}_FIND_COMPONENTS})
IF(${_NAME}_${comp}_FOUND)
IF(NOT FOUND_COMPONENTS_MSG)
SET(FOUND_COMPONENTS_MSG "found components: ")
ENDIF()
SET(FOUND_COMPONENTS_MSG "${FOUND_COMPONENTS_MSG} ${comp}")
ELSE()
IF(NOT MISSING_COMPONENTS_MSG)
SET(MISSING_COMPONENTS_MSG "missing components: ")
ENDIF()
SET(MISSING_COMPONENTS_MSG "${MISSING_COMPONENTS_MSG} ${comp}")
IF(${_NAME}_FIND_REQUIRED_${comp})
SET(${_NAME_UPPER}_FOUND FALSE)
SET(MISSING_VARS "${MISSING_VARS} ${comp}")
ENDIF()
ENDIF()
ENDFOREACH(comp)
SET(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}")
SET(DETAILS "${DETAILS}[c${COMPONENT_MSG}]")
ENDIF(FPHSA_HANDLE_COMPONENTS)
# version handling:
SET(VERSION_MSG "")
SET(VERSION_OK TRUE)
SET(VERSION ${${FPHSA_VERSION_VAR}} )
IF (${_NAME}_FIND_VERSION)
IF(VERSION)
IF(${_NAME}_FIND_VERSION_EXACT) # exact version required
IF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"")
SET(VERSION_OK FALSE)
ELSE (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
SET(VERSION_MSG "(found suitable exact version \"${VERSION}\")")
ENDIF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
ELSE(${_NAME}_FIND_VERSION_EXACT) # minimum version specified:
IF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"")
SET(VERSION_OK FALSE)
ELSE ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
SET(VERSION_MSG "(found suitable version \"${VERSION}\", required is \"${${_NAME}_FIND_VERSION}\")")
ENDIF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
ENDIF(${_NAME}_FIND_VERSION_EXACT)
ELSE(VERSION)
# if the package was not found, but a version was given, add that to the output:
IF(${_NAME}_FIND_VERSION_EXACT)
SET(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")")
ELSE(${_NAME}_FIND_VERSION_EXACT)
SET(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")")
ENDIF(${_NAME}_FIND_VERSION_EXACT)
ENDIF(VERSION)
ELSE (${_NAME}_FIND_VERSION)
IF(VERSION)
SET(VERSION_MSG "(found version \"${VERSION}\")")
ENDIF(VERSION)
ENDIF (${_NAME}_FIND_VERSION)
IF(VERSION_OK)
SET(DETAILS "${DETAILS}[v${VERSION}(${${_NAME}_FIND_VERSION})]")
ELSE(VERSION_OK)
SET(${_NAME_UPPER}_FOUND FALSE)
ENDIF(VERSION_OK)
# print the result:
IF (${_NAME_UPPER}_FOUND)
FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}")
ELSE (${_NAME_UPPER}_FOUND)
IF(FPHSA_CONFIG_MODE)
_FPHSA_HANDLE_FAILURE_CONFIG_MODE()
ELSE(FPHSA_CONFIG_MODE)
IF(NOT VERSION_OK)
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_FIRST_REQUIRED_VAR}})")
ELSE(NOT VERSION_OK)
_FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing: ${MISSING_VARS}) ${VERSION_MSG}")
ENDIF(NOT VERSION_OK)
ENDIF(FPHSA_CONFIG_MODE)
ENDIF (${_NAME_UPPER}_FOUND)
SET(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE)
ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _FIRST_ARG)

View File

@ -1,14 +0,0 @@
noinst_LTLIBRARIES = libcommon.la
libcommon_la_SOURCES = \
memory.c \
strings.c \
configreader.c \
setopt.c \
utils.c
libcommon_la_CPPFLAGS = \
-I$(top_srcdir)/include
libcommon_la_LDFLAGS = \
-static

View File

@ -1,83 +0,0 @@
AC_INIT(tdnf, 2.0.0)
AM_SILENT_RULES([yes])
AC_MSG_NOTICE([tdnf configuration])
AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE([-Wall foreign])
AC_CONFIG_TESTDIR(tests)
AM_PROG_AR
AC_PROG_CC
#LT_INIT
AC_PROG_LIBTOOL
CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_GNU_SOURCE -fPIC"
AM_CPPFLAGS="$AM_CPPFLAGS -I${top_srcdir}/include"
AM_CFLAGS="$AM_CFLAGS -std=gnu99 -Wall -fno-strict-aliasing"
CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_GNU_SOURCE -fPIC"
AC_SUBST(AM_CPPFLAGS)
AC_SUBST(AM_CFLAGS)
#libsolv
PKG_CHECK_MODULES([LIBSOLV], [libsolv], [have_libsolv=yes], [have_libsolv=no])
PKG_CHECK_MODULES([LIBSOLVEXT], [libsolvext], [have_libsolvext=yes], [have_libsolvext=no])
AM_CONDITIONAL([LIBSOLV], [test "$have_libsolv" = "yes"])
AM_CONDITIONAL([LIBSOLVEXT], [test "$have_libsolvext" = "yes"])
#libcurl
PKG_CHECK_MODULES([LIBCURL], [libcurl], [have_libcurl=yes], [have_libcurl=no])
AM_CONDITIONAL([LIBCURL], [test "$have_libcurl" = "yes"])
#rpm
PKG_CHECK_MODULES([RPM], [rpm], [have_rpm=yes], [have_rpm=no])
AM_CONDITIONAL([RPM], [test "$have_rpm" = "yes"])
# test to prove rpm.org rpm
echo "Looking for rpm.org librpm headers"
AC_CHECK_HEADERS(rpm/header.h)
WITH_PYTHON=0
AC_ARG_ENABLE([python],
[AS_HELP_STRING([--enable-python], [build tdnf python bindings (default: disabled)])],
[
if test x"$enableval" = x"yes"
then
PYTHON="${PYTHON:-python3}"
AM_PATH_PYTHON([3.5],[
PKG_CHECK_MODULES([PYTHON], [python-${PYTHON_VERSION}], [WITH_PYTHON=1])
AC_SUBST(PYTHON_CFLAGS)
AC_SUBST(PYTHON_LIB)
])
fi
])
AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON" = 1])
#makefiles
AC_CONFIG_FILES([Makefile
solv/Makefile
common/Makefile
client/Makefile
tests/Makefile
tools/Makefile
tools/cli/Makefile
tools/cli/lib/Makefile
python/Makefile
python/setup.py
])
#tdnf conf dir
confdir=$sysconfdir/tdnf
AC_SUBST(confdir)
#yum repo dir
yumrepodir=$sysconfdir/yum.repos.d
AC_SUBST(yumrepodir)
#
AC_OUTPUT

4
docker-build.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
docker build -t photon/tdnf-build .
docker run --rm -it -v$(pwd):/build -w/build photon/tdnf-build ./docker-entrypoint.sh

View File

@ -1,13 +1,6 @@
#!/bin/bash
aclocal
libtoolize
automake --add-missing
autoreconf
./configure
make
make check
rm -rf build
mkdir build && cd build
cmake .. && make && make check
# pytests
make install
cd pytests && pytest --verbose

View File

@ -137,6 +137,11 @@ const char*
TDNFGetVersion(
);
//package name
const char*
TDNFGetPackageName(
);
//Search installed and available packages for keywords
//in description, name
uint32_t

View File

@ -34,10 +34,11 @@ class JsonWrapper(object):
class TestUtils(object):
def __init__(self):
def __init__(self, cli_args):
cur_dir = os.path.dirname(os.path.realpath(__file__))
config_file = os.path.join(cur_dir, 'config.json')
self.config = JsonWrapper(config_file).read()
self.config.update(cli_args)
def check_package(self, package):
""" Check if a package exists """
@ -97,6 +98,8 @@ class TestUtils(object):
return True, None
def run(self, cmd):
if cmd[0] is 'tdnf' and self.config['build_dir']:
cmd[0] = os.path.join(self.config['build_dir'], 'bin/tdnf')
use_shell = not isinstance(cmd, list)
process = subprocess.Popen(cmd, shell=use_shell,
stdout=subprocess.PIPE,
@ -122,9 +125,22 @@ def restore_config_files():
# Restore /etc/yum.repos.d/* and /etc/tdnf/tdnf.conf
pass
def pytest_addoption(parser):
group = parser.getgroup("tdnf", "tdnf specifc options")
group.addoption(
"--build-dir", action="store", default="",
help="directory containing tdnf binary to be tested"
)
@pytest.fixture(scope='session')
def utils():
test_utils = TestUtils()
def tdnf_args(request):
arg = {}
arg['build_dir'] = request.config.getoption("--build-dir")
return arg
@pytest.fixture(scope='session')
def utils(tdnf_args):
test_utils = TestUtils(tdnf_args)
backup_config_files()
yield test_utils
restore_config_files()

View File

@ -13,7 +13,8 @@ import pytest
def setup_test(utils):
# remove sglversion_pkgname at the beginning of tests
pkgname = utils.config['sglversion_pkgname']
utils.run([ 'tdnf', 'erase', '-y', pkgname ])
if utils.check_package(pkgname):
utils.run([ 'tdnf', 'erase', '-y', pkgname ])
yield
teardown_test(utils)
@ -27,5 +28,7 @@ def test_assumeno_install(utils):
def test_assumeno_erase(utils):
pkgname = utils.config['sglversion_pkgname']
utils.run([ 'tdnf', 'install', '-y', pkgname ])
assert (utils.check_package(pkgname) == True)
utils.run([ 'tdnf', '--assumeno', 'erase', pkgname ])
assert (utils.check_package(pkgname) == False)
assert (utils.check_package(pkgname) == True)

View File

@ -1,25 +0,0 @@
pkgpyexec_LTLIBRARIES = _tdnf.la
pkgpyexec_DATA = tdnf/__init__.py
CLEANFILES =
_tdnf_la_CPPFLAGS = \
-I$(top_srcdir)/include \
@PYTHON_CFLAGS@
_tdnf_la_SOURCES = \
tdnfbase.c \
tdnfpycommands.c \
tdnfmodule.c \
tdnfpyrepodata.c \
utils.c
_tdnf_la_LDFLAGS= -module -avoid-version
_tdnf_la_LIBADD = \
$(top_builddir)/common/libcommon.la \
$(top_builddir)/client/libtdnf.la \
@PYTHON_LIBS@
CLEANFILES += tdnf/__pycache__
CLEANFILES += build

View File

@ -9,27 +9,31 @@
from distutils.core import setup, Extension
import os
link_args = []
cflags = []
cflags = [
'-I@PYTDNF_INC_DIR@'
]
if os.access('Makefile.am', os.F_OK):
cflags.append('-I../include')
link_args.extend(['-Wl,-L../client/.libs'])
link_args = [
'-Wl,-L@PYTDNF_LIB_DIR@'
]
pytdnf_sources = [
'@PYTDNF_SRC_DIR@/tdnfbase.c',
'@PYTDNF_SRC_DIR@/tdnfpyrepodata.c',
'@PYTDNF_SRC_DIR@/tdnfpycommands.c',
'@PYTDNF_SRC_DIR@/tdnfmodule.c',
'@PYTDNF_SRC_DIR@/utils.c'
]
tdnfmodule = Extension('tdnf._tdnf',
libraries = ['tdnf'],
sources = ['tdnfbase.c',
'tdnfpyrepodata.c',
'tdnfpycommands.c',
'tdnfmodule.c',
'utils.c'],
libraries = ['tdnf'],
sources = pytdnf_sources,
extra_compile_args = cflags,
extra_link_args = link_args)
extra_compile_args = cflags,
extra_link_args = link_args)
setup (name = '@PACKAGE_NAME@',
version = '@VERSION@',
description = 'Python bindings for @PACKAGE_NAME@',
packages = ['@PACKAGE_NAME@'],
setup (name = '@PYTDNF_PACKAGE_NAME@',
version = '@PYTDNF_VERSION@',
description = 'Python bindings for @PYTDNF_PACKAGE_NAME@',
packages = ['@PYTDNF_PACKAGE_NAME@'],
url='https://github.com/vmware/tdnf',
ext_modules = [tdnfmodule])

View File

@ -1,4 +0,0 @@
#!/bin/sh
make clean && make distclean
autoreconf -mif && ./configure --enable-python
make

View File

@ -1,14 +0,0 @@
noinst_LTLIBRARIES = libtdnfsolv.la
libtdnfsolv_la_CPPFLAGS = -I$(top_srcdir)/include
libtdnfsolv_la_SOURCES = \
tdnfpool.c \
tdnfrepo.c \
tdnfquery.c \
tdnfpackage.c
libtdnfsolv_la_LDFLAGS = \
-static \
@RPM_LIBS@ \
@LIBSOLV_LIBS@

View File

@ -1,11 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@/tdnf
Name: tdnf-cli-libs
Description: tdnf cli libs
Version: @VERSION@
Requires: tdnf
Libs: -L${libdir} -ltdnfcli
Cflags: -I${includedir}

View File

@ -1,11 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@/tdnf
Name: tdnf
Description: tiny dandified yum
Version: @VERSION@
Requires: libsolv libsolvext rpm libcurl
Libs: -L${libdir} -ltdnf
Cflags: -I${includedir}

View File

@ -1,149 +0,0 @@
#
# tdnf spec file
#
%define _python3_sitearch %(python3 -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))")
Summary: dnf/yum equivalent using C libs
Name: tdnf
Version: @VERSION@
Release: 1%{?dist}
Vendor: VMware, Inc.
Distribution: Photon
License: LGPLv2.1,GPLv2
URL: http://www.vmware.com
Group: Applications/RPM
Requires: rpm-libs
Requires: curl
Requires: tdnf-cli-libs = %{version}-%{release}
Requires: libsolv
BuildRequires: popt-devel
BuildRequires: rpm-devel
BuildRequires: openssl-devel
BuildRequires: libsolv-devel
BuildRequires: curl-devel
Source0: %{name}-%{version}.tar.gz
%description
tdnf is a yum/dnf equivalent which uses libsolv and libcurl
%package devel
Summary: A Library providing C API for tdnf
Group: Development/Libraries
Requires: tdnf = %{version}-%{release}
Requires: libsolv-devel
%description devel
Development files for tdnf
%package cli-libs
Summary: Library providing cli libs for tdnf like clients
Group: Development/Libraries
%description cli-libs
Library providing cli libs for tdnf like clients.
%package -n python2-tdnf
Summary: Python2 bindings for tdnf
Group: Development/Libraries
Requires: python2 >= 2.7
Requires: %{name} = %{version}-%{release}
BuildRequires: python2-devel >= 2.7
%description -n python2-tdnf
Python2 bindings for tdnf
%package -n python3-tdnf
Summary: Python3 bindings for tdnf
Group: Development/Libraries
Requires: python3 >= 3.5
Requires: %{name} = %{version}-%{release}
BuildRequires: python3-devel >= 3.5
%description -n python3-tdnf
Python3 bindings for tdnf
%prep
%setup -q %{name}-%{version}
%build
autoreconf -i
%configure \
--disable-static \
--enable-python
make %{?_smp_mflags}
pushd python
python2 setup.py build
python3 setup.py build
popd
%install
make DESTDIR=%{buildroot} install
find %{buildroot} -name '*.la' -delete
mkdir -p %{buildroot}/var/cache/tdnf
pushd python
python2 setup.py install --skip-build --root %{buildroot}
python3 setup.py install --skip-build --root %{buildroot}
popd
# Pre-install
%pre
# First argument is 1 => New Installation
# First argument is 2 => Upgrade
# Post-install
%post
# First argument is 1 => New Installation
# First argument is 2 => Upgrade
/sbin/ldconfig
# Pre-uninstall
%preun
# First argument is 0 => Uninstall
# First argument is 1 => Upgrade
# Post-uninstall
%postun
/sbin/ldconfig
# First argument is 0 => Uninstall
# First argument is 1 => Upgrade
%files
%defattr(-,root,root,0755)
%{_bindir}/tdnf
%{_libdir}/libtdnf.so.*
%config(noreplace) %{_sysconfdir}/tdnf/tdnf.conf
%dir /var/cache/tdnf
%files devel
%defattr(-,root,root)
%{_includedir}/tdnf/*.h
%{_libdir}/libtdnf.so
%{_libdir}/libtdnfcli.so
%exclude %{_libdir}/debug
%{_libdir}/pkgconfig/tdnf.pc
%{_libdir}/pkgconfig/tdnf-cli-libs.pc
%files cli-libs
%defattr(-,root,root)
%{_libdir}/libtdnfcli.so.*
%files -n python2-tdnf
%{python_sitearch}/%{name}/
%{python_sitearch}/%{name}-*.egg-info
%files -n python3-tdnf
%{_python3_sitearch}/%{name}/
%{_python3_sitearch}/%{name}-*.egg-info
%changelog
* Fri Jan 23 2015 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.0
- Initial build. First version

View File

@ -1,52 +0,0 @@
# The `:;' works around a Bash 3.2 bug when the output is not writeable.
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
:;{ \
echo '# Signature of the current package.' && \
echo 'm4_define([AT_PACKAGE_NAME],' && \
echo ' [$(PACKAGE_NAME)])' && \
echo 'm4_define([AT_PACKAGE_TARNAME],' && \
echo ' [$(PACKAGE_TARNAME)])' && \
echo 'm4_define([AT_PACKAGE_VERSION],' && \
echo ' [$(PACKAGE_VERSION)])' && \
echo 'm4_define([AT_PACKAGE_STRING],' && \
echo ' [$(PACKAGE_STRING)])' && \
echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
echo ' [$(PACKAGE_BUGREPORT)])'; \
echo 'm4_define([AT_PACKAGE_URL],' && \
echo ' [$(PACKAGE_URL)])'; \
} >'$(srcdir)/package.m4'
TESTSUITE = $(srcdir)/testsuite
EXTRA_DIST = init.at $(srcdir)/package.m4 $(TESTSUITE)
#testsuites
TESTSUITE_AT = testsuite.at
TESTSUITE_AT += version.at
TESTSUITE_AT += list.at
TESTSUITE_AT += install.at
TESTSUITE_AT += erase.at
TESTSUITE_AT += update.at
TESTSUITE_AT += downgrade.at
EXTRA_DIST += $(TESTSUITE_AT)
DISTCLEANFILES = atconfig testsuite
check-local: atconfig $(TESTSUITE)
$(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(abs_top_srcdir)/tools/cli' \
$(TESTSUITEFLAGS)
installcheck-local: atconfig $(TESTSUITE)
$(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(abs_top_srcdir)/tools/cli' \
$(TESTSUITEFLAGS)
clean-local:
test ! -f '$(TESTSUITE)' || \
$(SHELL) '$(TESTSUITE)' --clean
rm -rf testroot
AUTOM4TE = $(SHELL) $(top_srcdir)/missing --run autom4te
AUTOTEST = $(AUTOM4TE) --language=autotest
$(TESTSUITE): $(srcdir)/package.m4 init.at $(TESTSUITE_AT)
$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
mv $@.tmp $@

View File

@ -1,22 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf check-local tests)
AT_SETUP([check-local check])
AT_KEYWORDS([check-local])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT check-local $abs_top_builddir/tests/testroot/RPMS/x86_64/
],
[21],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,53 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf check tests)
# Test tdnf check commands
AT_SETUP([check])
AT_KEYWORDS([check])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT check
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([check skipconflicts])
AT_KEYWORDS([check])
AT_CHECK([
TDNF_CLI_W_CHROOT check --skipconflicts
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([check skipobsoletes])
AT_KEYWORDS([check])
AT_CHECK([
TDNF_CLI_W_CHROOT check --skipobsoletes
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([check skipconflicts skipobsoletes])
AT_KEYWORDS([check])
AT_CHECK([
TDNF_CLI_W_CHROOT check --skipconflicts --skipobsoletes
],
[0],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,34 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf downgrade tests)
AT_SETUP([downgrade check])
AT_KEYWORDS([downgrade])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT install tdnf-test-multiversion -y
TDNF_CLI_W_CHROOT downgrade -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([downgrade by version])
AT_KEYWORDS([downgrade])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion -y
TDNF_CLI_W_CHROOT downgrade tdnf-test-multiversion-1.0.1 -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,33 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf erase tests)
AT_SETUP([erase basic])
AT_KEYWORDS([erase])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT install tdnf-test-one -y
TDNF_CLI_W_CHROOT erase tdnf-test-one -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([erase non existent])
AT_KEYWORDS([erase])
AT_CHECK([
TDNF_CLI_W_CHROOT erase pkg-not-found
],
[243],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,77 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_TESTED([tdnf])
m4_define([TDNF_CLI],[[$abs_top_builddir/tools/cli/tdnf]])
m4_define([TDNF_CHROOT],[[$abs_top_builddir/tests/testroot]])
m4_define([TDNF_CLI_W_CHROOT],[[$abs_top_builddir/tools/cli/tdnf --config "$abs_top_builddir/tests/testroot/etc/tdnf/tdnf.conf" --installroot $abs_top_builddir/tests/testroot]])
m4_define([TDNF_CHROOT_INIT],[[
rm -rf $abs_top_builddir/tests/testroot
mkdir $abs_top_builddir/tests/testroot
rpm --root $abs_top_builddir/tests/testroot --initdb
mkdir -p $abs_top_builddir/tests/testroot/var/cache/tdnf
mkdir -p $abs_top_builddir/tests/testroot/etc/yum.repos.d
mkdir -p $abs_top_builddir/tests/testroot/etc/tdnf
mkdir -p $abs_top_builddir/tests/testroot/etc/pki/rpm-gpg
mkdir $abs_top_builddir/tests/testroot/BUILD
mkdir $abs_top_builddir/tests/testroot/RPMS
mkdir $abs_top_builddir/tests/testroot/SRPMS
cat << EOF > $abs_top_builddir/tests/testroot/etc/tdnf/tdnf.conf
[main]
repodir=$abs_top_builddir/tests/testroot/etc/yum.repos.d
cachedir=$abs_top_builddir/tests/testroot/var/cache/tdnf
EOF
cat << EOF > $abs_top_builddir/tests/testroot/etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
mI0ESAP+VwEEAMZylR8dOijUPNn3He3GdgM/kOXEhn3uQl+sRMNJUDm1qebi2D5b
Qa7GNBIlXm3DEMAS+ZlkiFQ4WnhUq5awEXU7MGcWCEGfums5FckV2tysSfn7HeWd
9mkEnsY2CUZF54lyKfY0f+vdFd6QdYo6b+YxGnLyiunEYHXSEo1TNj1vABEBAAG0
QlZNd2FyZSwgSW5jLiAtLSBMaW51eCBQYWNrYWdpbmcgS2V5IC0tIDxsaW51eC1w
YWNrYWdlc0B2bXdhcmUuY29tPoi8BBMBAgAmBQJIA/5XAhsDBQkRcu4ZBgsJCAcD
AgQVAggDBBYCAwECHgECF4AACgkQwLXgq2b9SUkw0AP/UlmWQIjMNcYfTKCOOyFx
Csl3bY5OZ6HZs4qCRvzESVTyKs0YN1gX5YDDRmE5EbaqSO7OLriA7p81CYhstYID
GjVTBqH/zJz/DGKQUv0A7qGvnX4MDt/cvvgEXjGpeRx42le/mkPsHdwbG/8jKveY
S/eu0g9IenS49i0hcOnjShGIRgQQEQIABgUCSAQWfAAKCRD1ZoIQEyn810LTAJ9k
IOziCqa/awfBvlLq4eRgN/NnkwCeJLOuL6eAueYjaODTcFEGKUXlgM4=
=bXtp
-----END PGP PUBLIC KEY BLOCK-----
EOF
]])
m4_define([TDNF_BUILD_INSTALL_RPMS],[[
rpmbuild --define "_topdir $abs_top_builddir/tests/testroot" -r $abs_top_builddir/tests/testroot -ba $abs_top_builddir/tests/specs/*.spec
createrepo $abs_top_builddir/tests/testroot/RPMS
modifyrepo $abs_top_builddir/tests/specs/updateinfo.xml $abs_top_builddir/tests/testroot/RPMS/repodata/
modifyrepo $abs_top_builddir/tests/updateinfo.xml $abs_top_builddir/tests/testroot/RPMS/repodata
cat << EOF > $abs_top_builddir/tests/testroot/etc/yum.repos.d/basic.repo
[basic]
name=basic
baseurl=file://$abs_top_builddir/tests/testroot/RPMS
gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY
gpgcheck=0
enabled=1
EOF
]])
m4_define([TDNF_ENABLE_GPGCHECK],[[
sed -i 's/gpgcheck=0/gpgcheck=1/g' $abs_top_builddir/tests/testroot/etc/yum.repos.d/basic.repo
]])
m4_define([TDNF_CHROOT_CLEAN],[[
rm -rf $abs_top_builddir/tests/testroot
]])
AT_INIT

View File

@ -1,64 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf install tests)
AT_SETUP([install basic])
AT_KEYWORDS([install])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT install tdnf-test-one -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([install existing])
AT_KEYWORDS([install])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-one -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([install non existent])
AT_KEYWORDS([install])
AT_CHECK([
TDNF_CLI_W_CHROOT install pkg-not-found
],
[243],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([install by version])
AT_KEYWORDS([install])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.2 -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([install without gpgcheck])
AT_KEYWORDS([install])
AT_CHECK([
TDNF_ENABLE_GPGCHECK
TDNF_CLI_W_CHROOT --nogpgcheck install tdnf-test-two -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,47 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf list tests)
# check tdnf list commands
AT_SETUP([list])
AT_KEYWORDS([list])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT list
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([list installed])
AT_KEYWORDS([list])
AT_CHECK([TDNF_CLI_W_CHROOT list installed],\
[243], [ignore], [ignore])
AT_CLEANUP
AT_SETUP([list multi])
AT_KEYWORDS([list])
AT_CHECK([TDNF_CLI_W_CHROOT list tdnf-test-one tdnf-test-tw* | cut -d' ' -f1],\
[0],
[tdnf-test-one.x86_64
tdnf-test-two.x86_64
], [ignore])
AT_CLEANUP
AT_SETUP([list multi])
AT_KEYWORDS([list])
AT_CHECK([TDNF_CLI_W_CHROOT list tdnf-test-one tdnf-test-tw* | cut -d' ' -f1],\
[0],
[tdnf-test-one.x86_64
tdnf-test-two.x86_64
], [ignore])
AT_CLEANUP

View File

@ -1,29 +0,0 @@
#
# Copyright (C) 2017 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf repolist tests)
# check tdnf repolist commands
AT_SETUP([repolist])
AT_KEYWORDS([repolist])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT repolist
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([repolist all])
AT_KEYWORDS([repolist])
AT_CHECK([TDNF_CLI_W_CHROOT repolist all],\
[0], [ignore], [ignore])
AT_CLEANUP

View File

@ -1,27 +0,0 @@
#
# tdnf-test-multiversion spec file version 1.0.1
#
Summary: basic multiversoin install test file.
Name: tdnf-test-multiversion
Version: 1.0.1
Release: 1
Vendor: VMware, Inc.
Distribution: Photon
License: VMware
Url: http://www.vmware.com
Group: Applications/tdnftest
%description
Part of tdnf test spec. Basic install/remove/upgrade test
%prep
%build
%install
%files
%changelog
* Wed Apr 22 2015 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.0.1
- Initial build. First version

View File

@ -1,27 +0,0 @@
#
# tdnf-test-multiversion spec file version 1.0.2
#
Summary: basic multiversoin install test file.
Name: tdnf-test-multiversion
Version: 1.0.2
Release: 1
Vendor: VMware, Inc.
Distribution: Photon
License: VMware
Url: http://www.vmware.com
Group: Applications/tdnftest
%description
Part of tdnf test spec. Basic install/remove/upgrade test
%prep
%build
%install
%files
%changelog
* Wed Apr 22 2015 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.0.2
- Initial build. First version

View File

@ -1,36 +0,0 @@
#
# tdnf-test-one spec file
#
Summary: basic install test file.
Name: tdnf-test-one
Version: 1.0.1
Release: 2
Vendor: VMware, Inc.
Distribution: Photon
License: VMware
Url: http://www.vmware.com
Group: Applications/tdnftest
%description
Part of tdnf test spec. Basic install/remove/upgrade test
%prep
%build
%install
mkdir -p %_topdir/%buildroot/lib/systemd/system/
cat << EOF >> %_topdir/%buildroot/lib/systemd/system/tdnf-test-one.service
[Unit]
Description=tdnf-test-one.service for whatprovides test.
EOF
%files
/lib/systemd/system/tdnf-test-one.service
%changelog
* Tue Nov 15 2016 Xiaolin Li <xiaolinl@vmware.com> 1.0.1-2
- Add a service file for whatprovides test.
* Tue Dec 15 2015 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.0
- Initial build. First version

View File

@ -1,27 +0,0 @@
#
# tdnf-test-two spec file
#
Summary: basic install test file.
Name: tdnf-test-two
Version: 1.0.1
Release: 1
Vendor: VMware, Inc.
Distribution: Photon
License: VMware
Url: http://www.vmware.com
Group: Applications/tdnftest
%description
Part of tdnf test spec. Basic install/remove/upgrade test
%prep
%build
%install
%files
%changelog
* Mon May 23 2016 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.0
- Initial build. First version

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<updates>
<update from="discus-updates@project-discus.org" status="stable" type="bugfix" version="1.0.2">
<id>DISCUS-2015-5-01</id>
<title>etcd</title>
<release>Discus 1</release>
<issued date="2015-05-01 12:00:00"/>
<references>
<reference href="http://www.vmware.com" id="1" title="tdnf-test-multiversion spec file version 1.0.1" type="vendor"/>
<reference href="http://www.vmware.com" id="2" title="tdnf-test-multiversion spec file version 1.0.2" type="vendor"/>
</references>
<description>update tdnf-test-multiversion to 1.0.2. </description>
<pkglist>
<collection short="DS-1">
<name>Discus 1</name>
<package arch="x86_64" epoch="0" name="tdnf-test-multiversion" release="1.0.2" src="file:///root/tdnf/tests/testroot/RPMS/x86_64/tdnf-test-multiversion-1.0.2-1.x86_64.rpm" version="1.0.2-1">
<filename>tdnf-test-multiversion-1.0.2-1.x86_64.rpm</filename>
</package>
</collection>
</pkglist>
</update>
</updates>

View File

@ -1,19 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
m4_include([init.at])
m4_include([version.at])
m4_include([repolist.at])
m4_include([list.at])
m4_include([install.at])
m4_include([erase.at])
m4_include([update.at])
m4_include([downgrade.at])
m4_include([whatprovides.at])
m4_include([check-local.at])
m4_include([check.at])
m4_include([updateinfo.at])

View File

@ -1,109 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf update tests)
AT_SETUP([update check])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT check-update
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update all])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT update -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update by version])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT update tdnf-test-multiversion-1.0.2 -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update non installed])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT update tdnf-test-one -y
],
[243],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update by version with exclude])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT update --exclude tdnf-test-multiversion -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update with security])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT update --security -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update with sec-severity GT than updates])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT update --sec-severity 7.8 -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update with sec-severity LE than updates])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT update --sec-severity 7.5 -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([update with reboot-required])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT update --reboot-required -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,67 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf updateinfo tests)
AT_SETUP([updateifo list])
AT_KEYWORDS([updateinfo])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT updateinfo list
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([updateinfo info])
AT_KEYWORDS([updateinfo])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT updateinfo info
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([updateinfo summary])
AT_KEYWORDS([updateinfo])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT updateinfo
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([updateinfo by package])
AT_KEYWORDS([update])
AT_CHECK([
TDNF_CLI_W_CHROOT install tdnf-test-multiversion-1.0.1 -y
TDNF_CLI_W_CHROOT updateinfo tdnf-test-multiversion -y
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([updateinfo non installed])
AT_KEYWORDS([updateinfo])
AT_CHECK([
TDNF_CLI_W_CHROOT updateinfo update tdnf-test-one -y
],
[243],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,21 +0,0 @@
<updates>
<update from="photonpublish@vmware.com" status="stable" type="security" version="1.0.2">
<id>PHSA-2017-2.0-0001</id>
<title>tdnf-test-multiversion</title>
<severity>7.5</severity>
<release>1</release>
<rights>Copyright 2007 Company Inc</rights>
<issued date="2007-12-28 16:42:30"/>
<updated date="2008-03-14 12:00:00"/>
<description>This update includes a fix for a denial-of-service issue.</description>
<pkglist>
<collection short="1">
<name>Photon 1</name>
<package arch="x86_64" name="tdnf-test-multiversion" release="1" version="1.0.2">
<filename>tdnf-test-multiversion-1.0.2-1.x86_64.rpm</filename>
<reboot_suggested>True</reboot_suggested>
</package>
</collection>
</pkglist>
</update>
</updates>

View File

@ -1,18 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER([tdnf tests start])
AT_SETUP([version])
AT_KEYWORDS([version])
AT_CHECK([$abs_top_builddir/tools/cli/tdnf --version],
[0],
[AT_PACKAGE_NAME: AT_PACKAGE_VERSION
],
[ignore])
AT_CLEANUP

View File

@ -1,44 +0,0 @@
#
# Copyright (C) 2015 VMware, Inc. All Rights Reserved.
#
# Licensed under the GNU Lesser General Public License v2.1 (the "License");
# you may not use this file except in compliance with the License. The terms
# of the License are located in the COPYING file of this distribution.
#
AT_BANNER(tdnf list tests)
# check tdnf list commands
AT_SETUP([whatprovides])
AT_KEYWORDS([whatprovides])
AT_CHECK([
TDNF_CHROOT_CLEAN
TDNF_CHROOT_INIT
TDNF_BUILD_INSTALL_RPMS
TDNF_CLI_W_CHROOT whatprovides tdnf-test-one
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([whatprovides file])
AT_KEYWORDS([whatprovides])
AT_CHECK([
TDNF_CLI_W_CHROOT whatprovides /lib/systemd/system/tdnf-test-one.service
],
[0],
[ignore],
[ignore])
AT_CLEANUP
AT_SETUP([whatprovides non existent])
AT_KEYWORDS([whatprovides])
AT_CHECK([
TDNF_CLI_W_CHROOT whatprovides aa
],
[0],
[ignore],
[ignore])
AT_CLEANUP

View File

@ -1,2 +0,0 @@
SUBDIRS = \
cli

View File

@ -1,13 +0,0 @@
bin_PROGRAMS = tdnf
tdnf_CPPFLAGS = -I$(top_srcdir)/include
tdnf_SOURCES = \
main.c
SUBDIRS = \
lib
tdnf_LDADD = \
$(top_builddir)/common/libcommon.la \
$(top_builddir)/client/libtdnf.la \
$(top_builddir)/tools/cli/lib/libtdnfcli.la

View File

@ -1,18 +0,0 @@
lib_LTLIBRARIES = libtdnfcli.la
libtdnfcli_la_CPPFLAGS = -I$(top_srcdir)/include
libtdnfcli_la_SOURCES = \
api.c \
help.c \
installcmd.c \
options.c \
output.c \
parseargs.c \
parsecleanargs.c \
parselistargs.c \
parserepolistargs.c \
parseupdateinfo.c \
updateinfocmd.c
libtdnfcli_la_LIBADD = \
$(top_builddir)/common/libcommon.la

View File

@ -217,7 +217,7 @@ void
TDNFCliShowVersion(
)
{
printf("%s: %s\n", PACKAGE_NAME, TDNFGetVersion());
printf("%s: %s\n", TDNFGetPackageName(), TDNFGetVersion());
}
uint32_t