|
@@ -0,0 +1,186 @@
|
|
|
+package("libsolv")
|
|
|
+ set_homepage("https://github.com/openSUSE/libsolv")
|
|
|
+ set_description("Library for solving packages and reading repositories.")
|
|
|
+ set_license("BSD-3-Clause")
|
|
|
+
|
|
|
+ add_urls("https://github.com/openSUSE/libsolv/archive/refs/tags/$(version).tar.gz",
|
|
|
+ "https://github.com/openSUSE/libsolv.git")
|
|
|
+
|
|
|
+ add_versions("0.7.34", "fd9c8a75d3ca09d9ff7b0d160902fac789b3ce6f9fb5b46a7647895f9d3eaf05")
|
|
|
+
|
|
|
+ add_patches("<=0.7.34", "patches/fix-msvc-c2036.patch", "a924517033d4f8ba18e922e892953834d3ca1a4fa5a69ae04fd308df40d1b2e8")
|
|
|
+ add_patches("<=0.7.34", "patches/fix-compile-on-mingw-w64.patch", "e6ba565110c918363a4499a4fc949f29777e0a189f192c231c81a47da821d21d")
|
|
|
+
|
|
|
+ -- when using mingw, cmake cannot force export of all symbols.
|
|
|
+ if is_plat("mingw", "msys", "cygwin") then
|
|
|
+ add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
|
|
|
+ end
|
|
|
+
|
|
|
+ add_configs("tools", {description = "Build tools.", default = false, type = "boolean"})
|
|
|
+
|
|
|
+ -- needs rpm, rpmdb, rpmio, rpmmisc, db
|
|
|
+ add_configs("rpmdb", {description = "Build with rpm database support.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpmdb_librpm", {description = "Use librpm to access the rpm database.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpmdb_bdb", {description = "Use BerkeleyDB to access the rpm database.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpmdb_byrpmheader", {description = "Build with rpmdb Header support.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpmpkg", {description = "Build with rpm package support.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpmpkg_librpm", {description = "Use librpm to access rpm header information.", default = false, type = "boolean"})
|
|
|
+ add_configs("pubkey", {description = "Build with pubkey support.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpmmd", {description = "Build with rpmmd repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("rpm5", {description = "Enabling RPM 5 support.", default = false, type = "boolean"})
|
|
|
+
|
|
|
+ add_configs("suserepo", {description = "Build with suse repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("comps", {description = "Build with fedora comps support.", default = false, type = "boolean"})
|
|
|
+ add_configs("helixrepo", {description = "Build with helix repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("debian", {description = "Build with debian package/repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("mdkrepo", {description = "Build with mandriva/mageia repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("archrepo", {description = "Build with archlinux repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("apk", {description = "Build with apk package/repository support.", default = false, type = "boolean"})
|
|
|
+ add_configs("cudfrepo", {description = "Build with cudf repository support.", default = false, type = "boolean"})
|
|
|
+
|
|
|
+ add_configs("haiku", {description = "Build with Haiku package support.", default = false, type = "boolean"})
|
|
|
+ add_configs("conda", {description = "Build with conda dependency support.", default = false, type = "boolean"})
|
|
|
+ add_configs("appdata", {description = "Build with AppStream appdata support.", default = false, type = "boolean"})
|
|
|
+ add_configs("multi_semantics", {description = "Build with support for multiple distribution types.", default = false, type = "boolean"})
|
|
|
+
|
|
|
+ add_configs("lzma_compression", {description = "Build with lzma/xz compression support.", default = false, type = "boolean"})
|
|
|
+ add_configs("bzip2_compression", {description = "Build with bzip2 compression support.", default = false, type = "boolean"})
|
|
|
+ add_configs("zstd_compression", {description = "Build with zstd compression support.", default = false, type = "boolean"})
|
|
|
+ add_configs("zchunk_compression", {description = "Build with zchunk compression support.", default = false, type = "boolean"})
|
|
|
+
|
|
|
+ add_configs("libxml2", {description = "Build with libxml2 instead of libexpat.", default = false, type = "boolean"})
|
|
|
+ if not is_plat("windows", "mingw", "msys", "cygwin") then
|
|
|
+ add_configs("cookieopen", {description = "Enable the use of stdio cookie opens.", default = true, type = "boolean"})
|
|
|
+ else
|
|
|
+ add_configs("cookieopen", {description = "Enable the use of stdio cookie opens.", default = false, type = "boolean", readonly = true})
|
|
|
+ end
|
|
|
+
|
|
|
+ add_configs("FEDORA", {description = "Building for Fedora.", default = false, type = "boolean"})
|
|
|
+ add_configs("DEBIAN", {description = "Building for Debian.", default = false, type = "boolean"})
|
|
|
+ add_configs("SUSE", {description = "Building for SUSE.", default = false, type = "boolean"})
|
|
|
+ add_configs("ARCHLINUX", {description = "Building for Archlinux.", default = false, type = "boolean"})
|
|
|
+ add_configs("MANDRIVA", {description = "Building for Mandriva.", default = false, type = "boolean"})
|
|
|
+ add_configs("MAGEIA", {description = "Building for Mageia.", default = false, type = "boolean"})
|
|
|
+ add_configs("HAIKU", {description = "Building for Haiku.", default = false, type = "boolean"}) -- needs haiku be, network, package.
|
|
|
+
|
|
|
+ add_deps("cmake")
|
|
|
+ if not is_subhost("windows") then
|
|
|
+ add_deps("pkg-config")
|
|
|
+ else
|
|
|
+ add_deps("pkgconf")
|
|
|
+ end
|
|
|
+ on_load(function (package)
|
|
|
+ local libxml2_or_expat_enabled = false
|
|
|
+
|
|
|
+ if package:config("ARCHLINUX") then
|
|
|
+ package:config_set("archrepo", true)
|
|
|
+ end
|
|
|
+ if package:config("MANDRIVA") then
|
|
|
+ package:config_set("mdkrepo", true)
|
|
|
+ end
|
|
|
+ if package:config("MAGEIA") then
|
|
|
+ package:config_set("mdkrepo", true)
|
|
|
+ package:config_set("lzma_compression", true)
|
|
|
+ end
|
|
|
+ if package:config("DEBIAN") then
|
|
|
+ package:config_set("debian", true)
|
|
|
+ end
|
|
|
+ if package:config("SUSE") then
|
|
|
+ package:config_set("suserepo", true)
|
|
|
+ package:config_set("helixrepo", true)
|
|
|
+ end
|
|
|
+
|
|
|
+ if package:config("rpm5") then
|
|
|
+ package:config_set("rpmmd", true)
|
|
|
+ end
|
|
|
+ if package:config("archrepo") or package:config("debian") then
|
|
|
+ package:config_set("lzma_compression", true)
|
|
|
+ end
|
|
|
+ if package:config("apk") then
|
|
|
+ package:config_set("zstd_compression", true)
|
|
|
+ end
|
|
|
+ if package:config("rpmmd") or package:config("suserepo") or package:config("appdata") or package:config("comps") or package:config("helixrepo") or mdkrepo_enabled then
|
|
|
+ libxml2_or_expat_enabled = true
|
|
|
+ end
|
|
|
+
|
|
|
+ package:add("deps", "zlib")
|
|
|
+ if package:config("lzma_compression") then
|
|
|
+ package:add("deps", "xz")
|
|
|
+ end
|
|
|
+ if package:config("bzip2_compression") then
|
|
|
+ package:add("deps", "bzip2")
|
|
|
+ end
|
|
|
+ if package:config("zstd_compression") then
|
|
|
+ package:add("deps", "zstd")
|
|
|
+ end
|
|
|
+ if package:config("zchunk_compression") then
|
|
|
+ package:add("deps", "zchunk")
|
|
|
+ end
|
|
|
+ if libxml2_or_expat_enabled then
|
|
|
+ if package:config("libxml2") then
|
|
|
+ package:add("deps", "libxml2")
|
|
|
+ else
|
|
|
+ package:add("deps", "expat")
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end)
|
|
|
+
|
|
|
+ on_install(function (package)
|
|
|
+ local configs = {}
|
|
|
+ table.insert(configs, "-DENABLE_STATIC=" .. (package:config("shared") and "OFF" or "ON"))
|
|
|
+ table.insert(configs, "-DDISABLE_SHARED=" .. (package:config("shared") and "OFF" or "ON"))
|
|
|
+
|
|
|
+ local options = {
|
|
|
+ "rpmdb", "rpmdb_librpm", "rpmdb_bdb", "rpmdb_byrpmheader", "rpmpkg", "rpmpkg_librpm", "pubkey", "rpmmd", "rpm5",
|
|
|
+ "suserepo", "comps", "helixrepo", "debian", "mdkrepo", "archrepo", "apk", "cudfrepo",
|
|
|
+ "haiku", "conda", "appdata", "multi_semantics",
|
|
|
+ "lzma_compression", "bzip2_compression", "zstd_compression", "zchunk_compression"
|
|
|
+ }
|
|
|
+ local no_prefix_options = {
|
|
|
+ "multi_semantics", "rpm5"
|
|
|
+ }
|
|
|
+ for _, option in ipairs(options) do
|
|
|
+ if package:config(option) then
|
|
|
+ if not table.contains(no_prefix_options, option) then
|
|
|
+ table.insert(configs, ("-DENABLE_%s=ON"):format(option:upper()))
|
|
|
+ else
|
|
|
+ table.insert(configs, ("-D%s=ON"):format(option:upper()))
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ table.insert(configs, "-DWITHOUT_COOKIEOPEN=" .. (package:config("cookieopen") and "OFF" or "ON"))
|
|
|
+ table.insert(configs, "-DWITH_LIBXML2=" .. (package:config("libxml2") and "ON" or "OFF"))
|
|
|
+ if package:config("zchunk_compression") then
|
|
|
+ table.insert(configs, "-DWITH_SYSTEM_ZCHUNK=ON")
|
|
|
+ end
|
|
|
+
|
|
|
+ if not package:config("tools") then
|
|
|
+ io.replace("CMakeLists.txt", "ADD_SUBDIRECTORY (tools)", "", {plain = true})
|
|
|
+ end
|
|
|
+ io.replace("CMakeLists.txt", "ADD_SUBDIRECTORY (examples)", "", {plain = true})
|
|
|
+ io.replace("CMakeLists.txt", "ADD_SUBDIRECTORY (doc)", "", {plain = true})
|
|
|
+ io.replace("ext/CMakeLists.txt", "repo_testcase.c", "", {plain = true})
|
|
|
+ io.replace("ext/CMakeLists.txt", "testcase.c", "", {plain = true})
|
|
|
+ io.replace("ext/CMakeLists.txt", "testcase.h", "", {plain = true})
|
|
|
+
|
|
|
+ if package:config("cookieopen") then
|
|
|
+ -- @see https://developer.android.com/ndk/guides/common-problems
|
|
|
+ -- funopen() is sometimes not available when API < 24.
|
|
|
+ if package:is_plat("android") and package:is_arch("armeabi-v7a") then
|
|
|
+ local ndk_sdkver = package:toolchain("ndk"):config("ndk_sdkver")
|
|
|
+ if ndk_sdkver and tonumber(ndk_sdkver) < 24 then
|
|
|
+ io.replace("CMakeLists.txt", "ADD_DEFINITIONS (-D_FILE_OFFSET_BITS=64)", "", {plain = true})
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ import("package.tools.cmake").install(package, configs)
|
|
|
+ end)
|
|
|
+
|
|
|
+ on_test(function (package)
|
|
|
+ assert(package:check_csnippets({test = [[
|
|
|
+ void test() {
|
|
|
+ Pool *pool = pool_create();
|
|
|
+ }
|
|
|
+ ]]}, {configs = {languages = "c99"}, includes = "solv/pool.h"}))
|
|
|
+ end)
|