[DO-973] harfbuzz package (!10)
Co-authored-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech> Reviewed-on: https://git.avroid.tech/Conan/conan_build/pulls/10
This commit is contained in:
10
recipes/flex/all/conandata.yml
Normal file
10
recipes/flex/all/conandata.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
sources:
|
||||
"2.6.4":
|
||||
sha256: "e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995"
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz"
|
||||
patches:
|
||||
"2.6.4":
|
||||
- patch_file: patches/darwin-newer-versions.patch
|
||||
patch_description: "missing linker flags skipped due to a problem in configure."
|
||||
patch_source: "https://github.com/westes/flex/issues/509"
|
||||
patch_type: "portability"
|
||||
99
recipes/flex/all/conanfile.py
Normal file
99
recipes/flex/all/conanfile.py
Normal file
@@ -0,0 +1,99 @@
|
||||
import os
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.tools.apple import fix_apple_shared_install_name
|
||||
from conan.tools.build import cross_building
|
||||
from conan.tools.files import get, rmdir, copy, rm, export_conandata_patches, apply_conandata_patches
|
||||
from conan.tools.gnu import AutotoolsToolchain, Autotools
|
||||
|
||||
required_conan_version = ">=1.53.0"
|
||||
|
||||
|
||||
class FlexConan(ConanFile):
|
||||
name = "flex"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://github.com/westes/flex"
|
||||
description = "Flex, the fast lexical analyzer generator"
|
||||
topics = ("lex", "lexer", "lexical analyzer generator")
|
||||
license = "BSD-2-Clause"
|
||||
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def requirements(self):
|
||||
# Flex requires M4 to be compiled. If consumer does not have M4
|
||||
# installed, Conan will need to know that Flex requires it.
|
||||
self.requires("m4/1.4.19")
|
||||
|
||||
def build_requirements(self):
|
||||
self.tool_requires("m4/1.4.19")
|
||||
if hasattr(self, "settings_build") and cross_building(self):
|
||||
self.tool_requires(f"{self.name}/{self.version}")
|
||||
|
||||
def validate(self):
|
||||
if self.settings.os == "Windows":
|
||||
raise ConanInvalidConfiguration("Flex package is not compatible with Windows. "
|
||||
"Consider using winflexbison instead.")
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
|
||||
def generate(self):
|
||||
at = AutotoolsToolchain(self)
|
||||
at.configure_args.extend([
|
||||
"--disable-nls",
|
||||
"--disable-bootstrap",
|
||||
"HELP2MAN=/bin/true",
|
||||
"M4=m4",
|
||||
# https://github.com/westes/flex/issues/247
|
||||
"ac_cv_func_malloc_0_nonnull=yes", "ac_cv_func_realloc_0_nonnull=yes",
|
||||
# https://github.com/easybuilders/easybuild-easyconfigs/pull/5792
|
||||
"ac_cv_func_reallocarray=no",
|
||||
])
|
||||
at.generate()
|
||||
|
||||
def build(self):
|
||||
apply_conandata_patches(self)
|
||||
autotools = Autotools(self)
|
||||
autotools.configure()
|
||||
autotools.make()
|
||||
|
||||
def package(self):
|
||||
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
|
||||
autotools = Autotools(self)
|
||||
autotools.install()
|
||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
||||
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
|
||||
fix_apple_shared_install_name(self)
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.libs = ["fl"]
|
||||
self.cpp_info.system_libs = ["m"]
|
||||
# Avoid CMakeDeps messing with Conan targets
|
||||
self.cpp_info.set_property("cmake_find_mode", "none")
|
||||
|
||||
bindir = os.path.join(self.package_folder, "bin")
|
||||
self.output.info("Appending PATH environment variable: {}".format(bindir))
|
||||
self.env_info.PATH.append(bindir)
|
||||
|
||||
lex_path = os.path.join(bindir, "flex").replace("\\", "/")
|
||||
self.output.info("Setting LEX environment variable: {}".format(lex_path))
|
||||
self.env_info.LEX = lex_path
|
||||
13
recipes/flex/all/patches/darwin-newer-versions.patch
Normal file
13
recipes/flex/all/patches/darwin-newer-versions.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/configure b/configure
|
||||
index d88c47c..827c01a 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -6842,7 +6842,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
10.[012][,.]*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
- 10.*)
|
||||
+ *)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
esac
|
||||
;;
|
||||
9
recipes/flex/all/test_package/CMakeLists.txt
Normal file
9
recipes/flex/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(test_package LANGUAGES CXX)
|
||||
|
||||
find_package(FLEX REQUIRED)
|
||||
flex_target(flex_scanner basic_nr.l ${PROJECT_BINARY_DIR}/basic_nr.cpp)
|
||||
|
||||
add_executable(${PROJECT_NAME} basic_nr.cpp)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${FLEX_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${FLEX_LIBRARIES})
|
||||
9
recipes/flex/all/test_package/CMakeUserPresets.json
Normal file
9
recipes/flex/all/test_package/CMakeUserPresets.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
89
recipes/flex/all/test_package/basic_nr.l
Normal file
89
recipes/flex/all/test_package/basic_nr.l
Normal file
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* This file is part of flex.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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 name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE.
|
||||
*/
|
||||
|
||||
%option C++ noyywrap
|
||||
|
||||
%{
|
||||
int mylineno = 0;
|
||||
%}
|
||||
|
||||
string \"[^\n"]+\"
|
||||
|
||||
ws [ \t]+
|
||||
|
||||
alpha [A-Za-z]
|
||||
dig [0-9]
|
||||
name ({alpha}|{dig}|\$)({alpha}|{dig}|\_|\.|\-|\/|\$)*
|
||||
num1 [-+]?{dig}+\.?([eE][-+]?{dig}+)?
|
||||
num2 [-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)?
|
||||
number {num1}|{num2}
|
||||
|
||||
%%
|
||||
|
||||
{ws} /* skip blanks and tabs */
|
||||
|
||||
"/*" {
|
||||
int c;
|
||||
|
||||
while((c = yyinput()) != 0)
|
||||
{
|
||||
if(c == '\n')
|
||||
++mylineno;
|
||||
|
||||
else if(c == '*')
|
||||
{
|
||||
if((c = yyinput()) == '/')
|
||||
break;
|
||||
else
|
||||
unput(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{number} std::cout << "number " << YYText() << '\n';
|
||||
|
||||
\n mylineno++;
|
||||
|
||||
{name} std::cout << "name " << YYText() << '\n';
|
||||
|
||||
{string} std::cout << "string " << YYText() << '\n';
|
||||
|
||||
%%
|
||||
|
||||
extern "C" {
|
||||
int yylex() {return 0;}
|
||||
}
|
||||
|
||||
#include <fstream>
|
||||
|
||||
int main( int argc, const char *argv[]) {
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "Need an argument\n");
|
||||
return 1;
|
||||
}
|
||||
std::ifstream ifs(argv[1]);
|
||||
FlexLexer *lexer = new yyFlexLexer(ifs, std::cout);
|
||||
while(lexer->yylex() != 0)
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
6
recipes/flex/all/test_package/basic_nr.txt
Normal file
6
recipes/flex/all/test_package/basic_nr.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
/* this is a multi line comment
|
||||
still in the comment
|
||||
and done */
|
||||
foo = "bar"
|
||||
num = 43
|
||||
setting = false
|
||||
50
recipes/flex/all/test_package/conanfile.py
Normal file
50
recipes/flex/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import os
|
||||
import re
|
||||
from io import StringIO
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import CMake, cmake_layout
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
generators = "CMakeToolchain", "VirtualBuildEnv", "VirtualRunEnv", "CMakeDeps"
|
||||
test_type = "explicit"
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def build_requirements(self):
|
||||
self.tool_requires(self.tested_reference_str)
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def _assert_expected_version(self):
|
||||
|
||||
def tested_reference_version():
|
||||
tokens = re.split('[@#]', self.tested_reference_str)
|
||||
return tokens[0].split("/", 1)[1]
|
||||
|
||||
output = StringIO()
|
||||
self.run("flex --version", output)
|
||||
output_str = str(output.getvalue())
|
||||
self.output.info("Installed version: {}".format(output_str))
|
||||
expected_version = tested_reference_version()
|
||||
self.output.info("Expected version: {}".format(expected_version))
|
||||
assert_flex_version = "flex {}".format(expected_version)
|
||||
assert(assert_flex_version in output_str)
|
||||
|
||||
def build(self):
|
||||
# Let's check flex version installed
|
||||
self._assert_expected_version()
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
txt_file = os.path.join(self.source_folder, "basic_nr.txt")
|
||||
self.run(f"{bin_path} {txt_file}", env="conanrun")
|
||||
3
recipes/flex/config.yml
Normal file
3
recipes/flex/config.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
versions:
|
||||
"2.6.4":
|
||||
folder: all
|
||||
33
recipes/glib/all/conandata.yml
Normal file
33
recipes/glib/all/conandata.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
sources:
|
||||
"2.81.0":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-download_gnome_org/sources/glib/2.81/glib-2.81.0.tar.xz"
|
||||
sha256: "1665188ed9cc941c0a189dc6295e6859872523d1bfc84a5a84732a7ae87b02e4"
|
||||
"2.78.3":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-download_gnome_org/sources/glib/2.78/glib-2.78.3.tar.xz"
|
||||
sha256: "609801dd373796e515972bf95fc0b2daa44545481ee2f465c4f204d224b2bc21"
|
||||
"2.77.3":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-download_gnome_org/sources/glib/2.77/glib-2.77.3.tar.xz"
|
||||
sha256: "1753f963bb680b28a83d6e2095f63d0d4b94244675bcd2603850b2ebc1ac6a61"
|
||||
"2.76.3":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-download_gnome_org/sources/glib/2.76/glib-2.76.3.tar.xz"
|
||||
sha256: "c0be444e403d7c3184d1f394f89f0b644710b5e9331b54fa4e8b5037813ad32a"
|
||||
patches:
|
||||
"2.81.0":
|
||||
- patch_file: "patches/dont-use-python-packaging-2.81.0.patch"
|
||||
patch_type: bugfix
|
||||
patch_description: replace package.version.Version by internal code
|
||||
patch_source: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3352
|
||||
"2.78.3":
|
||||
- patch_file: "patches/remove-distutils-2.77.0.patch"
|
||||
patch_type: bugfix
|
||||
patch_description: remove distutils
|
||||
patch_source: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4133
|
||||
"2.76.3":
|
||||
- patch_file: "patches/libintl-discovery.patch"
|
||||
patch_type: bugfix
|
||||
patch_description: fix libintl discovery
|
||||
patch_source: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3352
|
||||
- patch_file: "patches/remove-distutils.patch"
|
||||
patch_type: bugfix
|
||||
patch_description: remove distutils
|
||||
patch_source: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4133
|
||||
299
recipes/glib/all/conanfile.py
Normal file
299
recipes/glib/all/conanfile.py
Normal file
@@ -0,0 +1,299 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.apple import fix_apple_shared_install_name, is_apple_os
|
||||
from conan.tools.env import VirtualBuildEnv
|
||||
from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, replace_in_file, rm, rmdir
|
||||
from conan.tools.gnu import PkgConfigDeps
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.meson import Meson, MesonToolchain
|
||||
from conan.tools.microsoft import is_msvc
|
||||
import os
|
||||
import shutil
|
||||
|
||||
|
||||
required_conan_version = ">=2.0"
|
||||
|
||||
|
||||
class GLibConan(ConanFile):
|
||||
name = "glib"
|
||||
description = (
|
||||
"Low-level core library that forms the basis for projects such as GTK+ and GNOME. "
|
||||
"It provides data structure handling for C, portability wrappers, and interfaces "
|
||||
"for such runtime functionality as an event loop, threads, dynamic loading, and an object system."
|
||||
)
|
||||
topics = "gio", "gmodule", "gnome", "gobject", "gtk"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://gitlab.gnome.org/GNOME/glib"
|
||||
license = "LGPL-2.1-or-later"
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
"with_elf": [True, False],
|
||||
"with_selinux": [True, False],
|
||||
"with_mount": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
"with_elf": True,
|
||||
"with_mount": True,
|
||||
"with_selinux": True,
|
||||
}
|
||||
short_paths = True
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def config_options(self):
|
||||
if self.settings.os == "Windows":
|
||||
del self.options.fPIC
|
||||
if self.settings.os != "Linux":
|
||||
del self.options.with_mount
|
||||
del self.options.with_selinux
|
||||
if is_msvc(self):
|
||||
del self.options.with_elf
|
||||
|
||||
if self.settings.os == "Neutrino":
|
||||
del self.options.with_elf
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def requirements(self):
|
||||
self.requires("zlib/[>=1.2.11 <2]")
|
||||
self.requires("libffi/3.4.4")
|
||||
self.requires("pcre2/[>=10.42]")
|
||||
if self.options.get_safe("with_elf"):
|
||||
self.requires("libelf/0.8.13")
|
||||
if self.options.get_safe("with_mount"):
|
||||
self.requires("libmount/2.39.2")
|
||||
if self.options.get_safe("with_selinux"):
|
||||
self.requires("libselinux/3.6")
|
||||
if self.settings.os != "Linux":
|
||||
# for Linux, gettext is provided by libc
|
||||
self.requires("libgettext/0.22", transitive_headers=True, transitive_libs=True)
|
||||
|
||||
if is_apple_os(self):
|
||||
self.requires("libiconv/1.17")
|
||||
|
||||
def build_requirements(self):
|
||||
# self.tool_requires("meson/[>=1.2.3 <2]")
|
||||
if not self.conf.get("tools.gnu:pkg_config", check_type=str):
|
||||
self.tool_requires("pkgconf/[>=2.2 <3]")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
virtual_build_env = VirtualBuildEnv(self)
|
||||
virtual_build_env.generate()
|
||||
tc = PkgConfigDeps(self)
|
||||
tc.generate()
|
||||
tc = MesonToolchain(self)
|
||||
|
||||
tc.project_options["selinux"] = "enabled" if self.options.get_safe("with_selinux") else "disabled"
|
||||
tc.project_options["libmount"] = "enabled" if self.options.get_safe("with_mount") else "disabled"
|
||||
if self.settings.os == "FreeBSD" or self.settings.os == "Neutrino":
|
||||
tc.project_options["xattr"] = "false"
|
||||
tc.project_options["tests"] = "false"
|
||||
tc.project_options["libelf"] = "enabled" if self.options.get_safe("with_elf") else "disabled"
|
||||
|
||||
if self.settings.os == "Neutrino":
|
||||
tc.cross_build["host"]["system"] = "qnx"
|
||||
tc.c_link_args.append("-lm")
|
||||
tc.c_link_args.append("-lsocket")
|
||||
|
||||
tc.generate()
|
||||
|
||||
def _patch_sources(self):
|
||||
apply_conandata_patches(self)
|
||||
replace_in_file(self,
|
||||
os.path.join(self.source_folder, "meson.build"),
|
||||
"subdir('fuzzing')",
|
||||
"#subdir('fuzzing')",
|
||||
) # https://gitlab.gnome.org/GNOME/glib/-/issues/2152
|
||||
if self.settings.os != "Linux" and self.settings.os != "Neutrino":
|
||||
# allow to find gettext
|
||||
replace_in_file(self,
|
||||
os.path.join(self.source_folder, "meson.build"),
|
||||
"libintl = dependency('intl', required: false",
|
||||
"libintl = dependency('libgettext', method : 'pkg-config', required : false",
|
||||
)
|
||||
|
||||
replace_in_file(self,
|
||||
os.path.join(
|
||||
self.source_folder,
|
||||
"gio",
|
||||
"gdbus-2.0",
|
||||
"codegen",
|
||||
"gdbus-codegen.in",
|
||||
),
|
||||
"'share'",
|
||||
"'res'",
|
||||
)
|
||||
|
||||
def build(self):
|
||||
self._patch_sources()
|
||||
meson = Meson(self)
|
||||
meson.configure()
|
||||
meson.build()
|
||||
|
||||
def package(self):
|
||||
copy(self, pattern="LGPL-2.1-or-later.txt", dst=os.path.join(self.package_folder, "licenses"), src=os.path.join(self.source_folder, "LICENSES"))
|
||||
meson = Meson(self)
|
||||
meson.install()
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
||||
rmdir(self, os.path.join(self.package_folder, "libexec"))
|
||||
shutil.move(
|
||||
os.path.join(self.package_folder, "share"),
|
||||
os.path.join(self.package_folder, "res"),
|
||||
)
|
||||
rm(self, "*.pdb", os.path.join(self.package_folder, "bin"))
|
||||
fix_apple_shared_install_name(self)
|
||||
fix_msvc_libname(self)
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.components["glib-2.0"].set_property("pkg_config_name", "glib-2.0")
|
||||
self.cpp_info.components["glib-2.0"].libs = ["glib-2.0"]
|
||||
self.cpp_info.components["glib-2.0"].includedirs += [
|
||||
os.path.join("include", "glib-2.0"),
|
||||
os.path.join("lib", "glib-2.0", "include")
|
||||
]
|
||||
self.cpp_info.components["glib-2.0"].resdirs = ["res"]
|
||||
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].set_property("pkg_config_name", "gmodule-no-export-2.0")
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].libs = ["gmodule-2.0"]
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].resdirs = ["res"]
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].requires.append("glib-2.0")
|
||||
|
||||
self.cpp_info.components["gmodule-export-2.0"].set_property("pkg_config_name", "gmodule-export-2.0")
|
||||
self.cpp_info.components["gmodule-export-2.0"].requires += ["gmodule-no-export-2.0", "glib-2.0"]
|
||||
|
||||
self.cpp_info.components["gmodule-2.0"].set_property("pkg_config_name", "gmodule-2.0")
|
||||
self.cpp_info.components["gmodule-2.0"].requires += ["gmodule-no-export-2.0", "glib-2.0"]
|
||||
|
||||
self.cpp_info.components["gobject-2.0"].set_property("pkg_config_name", "gobject-2.0")
|
||||
self.cpp_info.components["gobject-2.0"].libs = ["gobject-2.0"]
|
||||
self.cpp_info.components["gobject-2.0"].resdirs = ["res"]
|
||||
self.cpp_info.components["gobject-2.0"].requires += ["glib-2.0", "libffi::libffi"]
|
||||
|
||||
self.cpp_info.components["gthread-2.0"].set_property("pkg_config_name", "gthread-2.0")
|
||||
self.cpp_info.components["gthread-2.0"].libs = ["gthread-2.0"]
|
||||
self.cpp_info.components["gthread-2.0"].resdirs = ["res"]
|
||||
self.cpp_info.components["gthread-2.0"].requires.append("glib-2.0")
|
||||
|
||||
self.cpp_info.components["gio-2.0"].set_property("pkg_config_name", "gio-2.0")
|
||||
self.cpp_info.components["gio-2.0"].libs = ["gio-2.0"]
|
||||
self.cpp_info.components["gio-2.0"].resdirs = ["res"]
|
||||
self.cpp_info.components["gio-2.0"].requires += ["glib-2.0", "gobject-2.0", "gmodule-2.0", "zlib::zlib"]
|
||||
|
||||
self.cpp_info.components["gresource"].set_property("pkg_config_name", "gresource")
|
||||
self.cpp_info.components["gresource"].libs = [] # this is actually an executable
|
||||
|
||||
if self.settings.os in ["Linux", "FreeBSD"]:
|
||||
self.cpp_info.components["glib-2.0"].system_libs.append("pthread")
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].system_libs.append("pthread")
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].system_libs.append("dl")
|
||||
self.cpp_info.components["gmodule-export-2.0"].sharedlinkflags.append("-Wl,--export-dynamic")
|
||||
self.cpp_info.components["gmodule-2.0"].sharedlinkflags.append("-Wl,--export-dynamic")
|
||||
self.cpp_info.components["gthread-2.0"].system_libs.append("pthread")
|
||||
self.cpp_info.components["gio-2.0"].system_libs.append("dl")
|
||||
|
||||
if self.settings.os == "Neutrino":
|
||||
self.cpp_info.components["gmodule-export-2.0"].sharedlinkflags.append("-Wl,--export-dynamic")
|
||||
self.cpp_info.components["gmodule-2.0"].sharedlinkflags.append("-Wl,--export-dynamic")
|
||||
self.cpp_info.components["glib-2.0"].system_libs.append("m")
|
||||
self.cpp_info.components["glib-2.0"].system_libs.append("socket")
|
||||
self.cpp_info.components["gmodule-no-export-2.0"].system_libs.append("c")
|
||||
self.cpp_info.components["gio-2.0"].system_libs.append("c")
|
||||
self.cpp_info.components["gio-2.0"].system_libs.append("socket")
|
||||
|
||||
if self.settings.os == "Windows":
|
||||
self.cpp_info.components["glib-2.0"].system_libs += ["ws2_32", "ole32", "shell32", "user32", "advapi32"]
|
||||
self.cpp_info.components["gio-2.0"].system_libs.extend(["iphlpapi", "dnsapi", "shlwapi"])
|
||||
self.cpp_info.components["gio-windows-2.0"].set_property("pkg_config_name", "gio-windows-2.0")
|
||||
self.cpp_info.components["gio-windows-2.0"].requires = ["gobject-2.0", "gmodule-no-export-2.0", "gio-2.0"]
|
||||
self.cpp_info.components["gio-windows-2.0"].includedirs = [os.path.join("include", "gio-win32-2.0")]
|
||||
else:
|
||||
self.cpp_info.components["gio-unix-2.0"].set_property("pkg_config_name", "gio-unix-2.0")
|
||||
self.cpp_info.components["gio-unix-2.0"].requires += ["gobject-2.0", "gio-2.0"]
|
||||
self.cpp_info.components["gio-unix-2.0"].includedirs = [os.path.join("include", "gio-unix-2.0")]
|
||||
|
||||
if self.settings.os == "Macos":
|
||||
self.cpp_info.components["glib-2.0"].system_libs.append("resolv")
|
||||
self.cpp_info.components["glib-2.0"].frameworks += ["Foundation", "CoreServices", "CoreFoundation"]
|
||||
self.cpp_info.components["gio-2.0"].frameworks.append("AppKit")
|
||||
|
||||
if is_apple_os(self):
|
||||
self.cpp_info.components["glib-2.0"].requires.append("libiconv::libiconv")
|
||||
|
||||
self.cpp_info.components["glib-2.0"].requires.append("pcre2::pcre2")
|
||||
|
||||
if self.settings.os == "Linux":
|
||||
self.cpp_info.components["gio-2.0"].system_libs.append("resolv")
|
||||
else:
|
||||
self.cpp_info.components["glib-2.0"].requires.append("libgettext::libgettext")
|
||||
|
||||
if self.options.get_safe("with_mount"):
|
||||
self.cpp_info.components["gio-2.0"].requires.append("libmount::libmount")
|
||||
|
||||
if self.options.get_safe("with_selinux"):
|
||||
self.cpp_info.components["gio-2.0"].requires.append("libselinux::libselinux")
|
||||
|
||||
if self.options.get_safe("with_elf"):
|
||||
self.cpp_info.components["gresource"].requires.append("libelf::libelf") # this is actually an executable
|
||||
|
||||
self.env_info.GLIB_COMPILE_SCHEMAS = os.path.join(self.package_folder, "bin", "glib-compile-schemas")
|
||||
self.env_info.PATH.append(os.path.join(self.package_folder, "bin"))
|
||||
|
||||
pkgconfig_variables = {
|
||||
'datadir': '${prefix}/res',
|
||||
'schemasdir': '${datadir}/glib-2.0/schemas',
|
||||
'bindir': '${prefix}/bin',
|
||||
# Can't use libdir here as it is libdir1 when using the PkgConfigDeps generator.
|
||||
'giomoduledir': '${prefix}/lib/gio/modules',
|
||||
'gio': '${bindir}/gio',
|
||||
'gio_querymodules': '${bindir}/gio-querymodules',
|
||||
'glib_compile_schemas': '${bindir}/glib-compile-schemas',
|
||||
'glib_compile_resources': '${bindir}/glib-compile-resources',
|
||||
'gdbus': '${bindir}/gdbus',
|
||||
'gdbus_codegen': '${bindir}/gdbus-codegen',
|
||||
'gresource': '${bindir}/gresource',
|
||||
'gsettings': '${bindir}/gsettings'
|
||||
}
|
||||
self.cpp_info.components["gio-2.0"].set_property(
|
||||
"pkg_config_custom_content",
|
||||
"\n".join(f"{key}={value}" for key,value in pkgconfig_variables.items()))
|
||||
|
||||
pkgconfig_variables = {
|
||||
'bindir': '${prefix}/bin',
|
||||
'glib_genmarshal': '${bindir}/glib-genmarshal',
|
||||
'gobject_query': '${bindir}/gobject-query',
|
||||
'glib_mkenums': '${bindir}/glib-mkenums'
|
||||
}
|
||||
self.cpp_info.components["glib-2.0"].set_property(
|
||||
"pkg_config_custom_content",
|
||||
"\n".join(f"{key}={value}" for key, value in pkgconfig_variables.items()))
|
||||
|
||||
def fix_msvc_libname(conanfile, remove_lib_prefix=True):
|
||||
"""remove lib prefix & change extension to .lib in case of cl like compiler"""
|
||||
from conan.tools.files import rename
|
||||
import glob
|
||||
if not conanfile.settings.get_safe("compiler.runtime"):
|
||||
return
|
||||
libdirs = getattr(conanfile.cpp.package, "libdirs")
|
||||
for libdir in libdirs:
|
||||
for ext in [".dll.a", ".dll.lib", ".a"]:
|
||||
full_folder = os.path.join(conanfile.package_folder, libdir)
|
||||
for filepath in glob.glob(os.path.join(full_folder, f"*{ext}")):
|
||||
libname = os.path.basename(filepath)[0:-len(ext)]
|
||||
if remove_lib_prefix and libname[0:3] == "lib":
|
||||
libname = libname[3:]
|
||||
rename(conanfile, filepath, os.path.join(os.path.dirname(filepath), f"{libname}.lib"))
|
||||
148
recipes/glib/all/patches/dont-use-python-packaging-2.81.0.patch
Normal file
148
recipes/glib/all/patches/dont-use-python-packaging-2.81.0.patch
Normal file
@@ -0,0 +1,148 @@
|
||||
diff --git a/gio/gdbus-2.0/codegen/gdbus-codegen.in b/gio/gdbus-2.0/codegen/gdbus-codegen.in
|
||||
index 9c409e6..1913b6d 100755
|
||||
--- a/gio/gdbus-2.0/codegen/gdbus-codegen.in
|
||||
+++ b/gio/gdbus-2.0/codegen/gdbus-codegen.in
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!@PYTHON@
|
||||
+#!/usr/bin/env @PYTHON@
|
||||
|
||||
# GDBus - GLib D-Bus Library
|
||||
#
|
||||
diff --git a/gio/gdbus-2.0/codegen/meson.build b/gio/gdbus-2.0/codegen/meson.build
|
||||
index 67ea9f2..2ee1fc8 100644
|
||||
--- a/gio/gdbus-2.0/codegen/meson.build
|
||||
+++ b/gio/gdbus-2.0/codegen/meson.build
|
||||
@@ -31,7 +31,7 @@ gdbus_codegen_conf = configuration_data()
|
||||
gdbus_codegen_conf.set('VERSION', glib_version)
|
||||
gdbus_codegen_conf.set('MAJOR_VERSION', major_version)
|
||||
gdbus_codegen_conf.set('MINOR_VERSION', minor_version)
|
||||
-gdbus_codegen_conf.set('PYTHON', python.full_path())
|
||||
+gdbus_codegen_conf.set('PYTHON', python_name)
|
||||
gdbus_codegen_conf.set('DATADIR', glib_datadir)
|
||||
|
||||
# Install gdbus-codegen executable
|
||||
diff --git a/gio/gdbus-2.0/codegen/utils.py b/gio/gdbus-2.0/codegen/utils.py
|
||||
index 6399945..86024d7 100644
|
||||
--- a/gio/gdbus-2.0/codegen/utils.py
|
||||
+++ b/gio/gdbus-2.0/codegen/utils.py
|
||||
@@ -21,10 +21,9 @@
|
||||
#
|
||||
# Author: David Zeuthen <davidz@redhat.com>
|
||||
|
||||
-import packaging.version
|
||||
import os
|
||||
import sys
|
||||
-
|
||||
+import re
|
||||
|
||||
# pylint: disable=too-few-public-methods
|
||||
class Color:
|
||||
@@ -161,11 +160,35 @@ def lookup_brief_docs(annotations):
|
||||
def version_cmp_key(key):
|
||||
# If the 'since' version is 'UNRELEASED', compare higher than anything else
|
||||
# If it is empty put a 0 in its place as this will
|
||||
- # allow LooseVersion to work and will always compare lower.
|
||||
+ # allow _parse_version() to work and will always compare lower.
|
||||
if key[0] == "UNRELEASED":
|
||||
v = "9999"
|
||||
elif key[0]:
|
||||
v = str(key[0])
|
||||
else:
|
||||
v = "0"
|
||||
- return (packaging.version.Version(v), key[1])
|
||||
+ return (_parse_version(v), key[1])
|
||||
+
|
||||
+
|
||||
+def _parse_version(version):
|
||||
+ """
|
||||
+ Parse a version string into a list of integers and strings.
|
||||
+
|
||||
+ This function takes a version string and breaks it down into its component parts.
|
||||
+ It separates numeric and non-numeric segments, converting numeric segments to integers.
|
||||
+
|
||||
+ Args:
|
||||
+ version (str): The version string to parse.
|
||||
+
|
||||
+ Returns:
|
||||
+ list: A list where each element is either an integer (for numeric parts)
|
||||
+ or a string (for non-numeric parts).
|
||||
+
|
||||
+ Example:
|
||||
+ >>> parseversion("1.2.3a")
|
||||
+ [1, 2, 3, 'a']
|
||||
+ >>> parseversion("2.0.0-rc1")
|
||||
+ [2, 0, 0, 'rc1']
|
||||
+ """
|
||||
+ blocks = re.findall(r"(\d+|\w+)", version)
|
||||
+ return [int(b) if b.isdigit() else b for b in blocks]
|
||||
diff --git a/glib/gtester-report.in b/glib/gtester-report.in
|
||||
index 0745d53..b8291d2 100644
|
||||
--- a/glib/gtester-report.in
|
||||
+++ b/glib/gtester-report.in
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!@PYTHON@
|
||||
+#! /usr/bin/env @PYTHON@
|
||||
# GLib Testing Framework Utility -*- Mode: python; -*-
|
||||
# Copyright (C) 2007 Imendio AB
|
||||
# Authors: Tim Janik
|
||||
diff --git a/glib/meson.build b/glib/meson.build
|
||||
index b2dd569..5c29bb7 100644
|
||||
--- a/glib/meson.build
|
||||
+++ b/glib/meson.build
|
||||
@@ -502,7 +502,7 @@ endif
|
||||
|
||||
report_conf = configuration_data()
|
||||
report_conf.set('GLIB_VERSION', glib_version)
|
||||
-report_conf.set('PYTHON', python.full_path())
|
||||
+report_conf.set('PYTHON', python_name)
|
||||
configure_file(
|
||||
input: 'gtester-report.in',
|
||||
output: 'gtester-report',
|
||||
diff --git a/gobject/glib-genmarshal.in b/gobject/glib-genmarshal.in
|
||||
index 0578b74..aa5af43 100755
|
||||
--- a/gobject/glib-genmarshal.in
|
||||
+++ b/gobject/glib-genmarshal.in
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!@PYTHON@
|
||||
+#!/usr/bin/env @PYTHON@
|
||||
|
||||
# pylint: disable=too-many-lines, missing-docstring, invalid-name
|
||||
|
||||
diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in
|
||||
index 7e794e9..e10b910 100755
|
||||
--- a/gobject/glib-mkenums.in
|
||||
+++ b/gobject/glib-mkenums.in
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!@PYTHON@
|
||||
+#!/usr/bin/env @PYTHON@
|
||||
|
||||
# If the code below looks horrible and unpythonic, do not panic.
|
||||
#
|
||||
diff --git a/gobject/meson.build b/gobject/meson.build
|
||||
index 78b732b..2129aaf 100644
|
||||
--- a/gobject/meson.build
|
||||
+++ b/gobject/meson.build
|
||||
@@ -87,7 +87,7 @@ python_tools = [
|
||||
|
||||
python_tools_conf = configuration_data()
|
||||
python_tools_conf.set('VERSION', glib_version)
|
||||
-python_tools_conf.set('PYTHON', python.full_path())
|
||||
+python_tools_conf.set('PYTHON', python_name)
|
||||
|
||||
foreach tool: python_tools
|
||||
tool_bin = configure_file(
|
||||
diff --git a/meson.build b/meson.build
|
||||
index bcc2887..6cca73d 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -2457,7 +2457,9 @@ endif
|
||||
|
||||
glib_conf.set('HAVE_PROC_SELF_CMDLINE', have_proc_self_cmdline)
|
||||
|
||||
-python = import('python').find_installation(modules: ['packaging'])
|
||||
+python = import('python').find_installation()
|
||||
+# used for '#!/usr/bin/env <name>'
|
||||
+python_name = 'python3'
|
||||
|
||||
python_version = python.language_version()
|
||||
python_version_req = '>=3.7'
|
||||
49
recipes/glib/all/patches/libintl-discovery.patch
Normal file
49
recipes/glib/all/patches/libintl-discovery.patch
Normal file
@@ -0,0 +1,49 @@
|
||||
From 32249a22fc39319651e7c23442d37ec837f05764 Mon Sep 17 00:00:00 2001
|
||||
From: Nirbheek Chauhan <nirbheek@centricular.com>
|
||||
Date: Thu, 8 Sep 2022 02:36:33 +0530
|
||||
Subject: [PATCH] meson: Fix detection of a system-provided proxy-libintl
|
||||
|
||||
proxy-libintl defines ngettext() as a define in the header that points
|
||||
to the actual symbol in the library which is g_libintl_ngettext().
|
||||
Same with bind_textdomain_codeset().
|
||||
---
|
||||
meson.build | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 0cbc9689f5..de0bee5a39 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -2089,6 +2089,7 @@ libz_dep = dependency('zlib')
|
||||
# FIXME: glib-gettext.m4 has much more checks to detect broken/uncompatible
|
||||
# implementations. This could be extended if issues are found in some platforms.
|
||||
libintl_deps = []
|
||||
+libintl_prefix = '#include <libintl.h>'
|
||||
libintl = dependency('intl', required: false, allow_fallback: false)
|
||||
if libintl.found()
|
||||
# libintl supports different threading APIs, which may not
|
||||
@@ -2100,11 +2101,11 @@ if libintl.found()
|
||||
#
|
||||
# Meson's builtin dependency lookup as of 0.60.0 doesn't check for
|
||||
# pthread, so we do this manually here.
|
||||
- if cc.has_function('ngettext', dependencies : libintl)
|
||||
+ if cc.has_function('ngettext', dependencies : libintl, prefix: libintl_prefix)
|
||||
libintl_deps += [libintl]
|
||||
else
|
||||
libintl_pthread = cc.find_library('pthread', required : false)
|
||||
- if libintl_pthread.found() and cc.has_function('ngettext', dependencies : [libintl, libintl_pthread])
|
||||
+ if libintl_pthread.found() and cc.has_function('ngettext', dependencies : [libintl, libintl_pthread], prefix: libintl_prefix)
|
||||
libintl_deps += [libintl, libintl_pthread]
|
||||
else
|
||||
libintl = disabler()
|
||||
@@ -2113,7 +2114,7 @@ if libintl.found()
|
||||
endif
|
||||
|
||||
if libintl.found()
|
||||
- have_bind_textdomain_codeset = cc.has_function('bind_textdomain_codeset', dependencies: libintl_deps)
|
||||
+ have_bind_textdomain_codeset = cc.has_function('bind_textdomain_codeset', dependencies: libintl_deps, prefix: libintl_prefix)
|
||||
else
|
||||
libintl = dependency('intl', allow_fallback: true)
|
||||
assert(libintl.type_name() == 'internal')
|
||||
--
|
||||
GitLab
|
||||
51
recipes/glib/all/patches/remove-distutils-2.77.0.patch
Normal file
51
recipes/glib/all/patches/remove-distutils-2.77.0.patch
Normal file
@@ -0,0 +1,51 @@
|
||||
diff --git a/gio/gdbus-2.0/codegen/utils.py b/gio/gdbus-2.0/codegen/utils.py
|
||||
index 0204610..f8d758c 100644
|
||||
--- a/gio/gdbus-2.0/codegen/utils.py
|
||||
+++ b/gio/gdbus-2.0/codegen/utils.py
|
||||
@@ -19,7 +19,7 @@
|
||||
#
|
||||
# Author: David Zeuthen <davidz@redhat.com>
|
||||
|
||||
-import distutils.version
|
||||
+import re
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -159,11 +159,35 @@ def lookup_brief_docs(annotations):
|
||||
def version_cmp_key(key):
|
||||
# If the 'since' version is 'UNRELEASED', compare higher than anything else
|
||||
# If it is empty put a 0 in its place as this will
|
||||
- # allow LooseVersion to work and will always compare lower.
|
||||
+ # allow _parse_version() to work and will always compare lower.
|
||||
if key[0] == "UNRELEASED":
|
||||
v = "9999"
|
||||
elif key[0]:
|
||||
v = str(key[0])
|
||||
else:
|
||||
v = "0"
|
||||
- return (distutils.version.LooseVersion(v), key[1])
|
||||
+ return (_parse_version(v), key[1])
|
||||
+
|
||||
+
|
||||
+def _parse_version(version):
|
||||
+ """
|
||||
+ Parse a version string into a list of integers and strings.
|
||||
+
|
||||
+ This function takes a version string and breaks it down into its component parts.
|
||||
+ It separates numeric and non-numeric segments, converting numeric segments to integers.
|
||||
+
|
||||
+ Args:
|
||||
+ version (str): The version string to parse.
|
||||
+
|
||||
+ Returns:
|
||||
+ list: A list where each element is either an integer (for numeric parts)
|
||||
+ or a string (for non-numeric parts).
|
||||
+
|
||||
+ Example:
|
||||
+ >>> parseversion("1.2.3a")
|
||||
+ [1, 2, 3, 'a']
|
||||
+ >>> parseversion("2.0.0-rc1")
|
||||
+ [2, 0, 0, 'rc1']
|
||||
+ """
|
||||
+ blocks = re.findall(r"(\d+|\w+)", version)
|
||||
+ return [int(b) if b.isdigit() else b for b in blocks]
|
||||
51
recipes/glib/all/patches/remove-distutils.patch
Normal file
51
recipes/glib/all/patches/remove-distutils.patch
Normal file
@@ -0,0 +1,51 @@
|
||||
diff --git a/gio/gdbus-2.0/codegen/utils.py b/gio/gdbus-2.0/codegen/utils.py
|
||||
index 95559d3..2b7a176 100644
|
||||
--- a/gio/gdbus-2.0/codegen/utils.py
|
||||
+++ b/gio/gdbus-2.0/codegen/utils.py
|
||||
@@ -19,7 +19,7 @@
|
||||
#
|
||||
# Author: David Zeuthen <davidz@redhat.com>
|
||||
|
||||
-import distutils.version
|
||||
+import re
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -155,11 +155,35 @@ def lookup_brief_docs(annotations):
|
||||
def version_cmp_key(key):
|
||||
# If the 'since' version is 'UNRELEASED', compare higher than anything else
|
||||
# If it is empty put a 0 in its place as this will
|
||||
- # allow LooseVersion to work and will always compare lower.
|
||||
+ # allow _parse_version() to work and will always compare lower.
|
||||
if key[0] == "UNRELEASED":
|
||||
v = "9999"
|
||||
elif key[0]:
|
||||
v = str(key[0])
|
||||
else:
|
||||
v = "0"
|
||||
- return (distutils.version.LooseVersion(v), key[1])
|
||||
+ return (_parse_version(v), key[1])
|
||||
+
|
||||
+
|
||||
+def _parse_version(version):
|
||||
+ """
|
||||
+ Parse a version string into a list of integers and strings.
|
||||
+
|
||||
+ This function takes a version string and breaks it down into its component parts.
|
||||
+ It separates numeric and non-numeric segments, converting numeric segments to integers.
|
||||
+
|
||||
+ Args:
|
||||
+ version (str): The version string to parse.
|
||||
+
|
||||
+ Returns:
|
||||
+ list: A list where each element is either an integer (for numeric parts)
|
||||
+ or a string (for non-numeric parts).
|
||||
+
|
||||
+ Example:
|
||||
+ >>> parseversion("1.2.3a")
|
||||
+ [1, 2, 3, 'a']
|
||||
+ >>> parseversion("2.0.0-rc1")
|
||||
+ [2, 0, 0, 'rc1']
|
||||
+ """
|
||||
+ blocks = re.findall(r"(\d+|\w+)", version)
|
||||
+ return [int(b) if b.isdigit() else b for b in blocks]
|
||||
7
recipes/glib/all/test_package/CMakeLists.txt
Normal file
7
recipes/glib/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(test_package LANGUAGES C)
|
||||
|
||||
find_package(glib CONFIG REQUIRED)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE glib::glib-2.0 glib::gio-2.0 glib::gmodule-2.0 glib::gobject-2.0 glib::gthread-2.0)
|
||||
10
recipes/glib/all/test_package/CMakeUserPresets.json
Normal file
10
recipes/glib/all/test_package/CMakeUserPresets.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json",
|
||||
"build/gcc-11.5-x86_64-17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
28
recipes/glib/all/test_package/conanfile.py
Normal file
28
recipes/glib/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import cmake_layout, CMake
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
generators = "CMakeDeps", "CMakeToolchain", "VirtualBuildEnv", "VirtualRunEnv"
|
||||
test_type = "explicit"
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str, run=True)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
if self.settings.os != "Windows":
|
||||
self.run("gdbus-codegen -h", env="conanrun")
|
||||
26
recipes/glib/all/test_package/test_package.c
Normal file
26
recipes/glib/all/test_package/test_package.c
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "glib.h"
|
||||
#include "gmodule.h"
|
||||
#include "gio/gio.h"
|
||||
|
||||
|
||||
int main() {
|
||||
printf("glib %d.%d.%d\n", glib_major_version, glib_minor_version, glib_micro_version);
|
||||
printf("glib interface age: %d\n", glib_interface_age);
|
||||
printf("glib binary age: %d\n", glib_binary_age);
|
||||
|
||||
GQueue *queue = g_queue_new();
|
||||
g_queue_free(queue);
|
||||
|
||||
printf("glib module supported: %s\n", g_module_supported() ? "true" : "false");
|
||||
|
||||
GMutex m;
|
||||
g_mutex_init(&m);
|
||||
g_mutex_clear(&m);
|
||||
|
||||
printf("type name for char: %s\n", g_type_name(G_TYPE_CHAR));
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
9
recipes/glib/config.yml
Normal file
9
recipes/glib/config.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
versions:
|
||||
"2.81.0":
|
||||
folder: all
|
||||
"2.78.3":
|
||||
folder: all
|
||||
"2.77.3":
|
||||
folder: all
|
||||
"2.76.3":
|
||||
folder: all
|
||||
31
recipes/harfbuzz/all/conandata.yml
Normal file
31
recipes/harfbuzz/all/conandata.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
sources:
|
||||
"8.3.0":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/8.3.0/harfbuzz-8.3.0.tar.xz"
|
||||
sha256: "109501eaeb8bde3eadb25fab4164e993fbace29c3d775bcaa1c1e58e2f15f847"
|
||||
"8.2.2":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/8.2.2/harfbuzz-8.2.2.tar.xz"
|
||||
sha256: "e433ad85fbdf57f680be29479b3f964577379aaf319f557eb76569f0ecbc90f3"
|
||||
"8.2.1":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/8.2.1/harfbuzz-8.2.1.tar.xz"
|
||||
sha256: "0fec78f98c9c8faf228957a201c8846f809452c20f8445eb092a1ba6f22dbea5"
|
||||
"8.1.1":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/8.1.1/harfbuzz-8.1.1.tar.xz"
|
||||
sha256: "0305ad702e11906a5fc0c1ba11c270b7f64a8f5390d676aacfd71db129d6565f"
|
||||
"8.0.1":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/8.0.1/harfbuzz-8.0.1.tar.xz"
|
||||
sha256: "c1ce780acd385569f25b9a29603d1d5bc71e6940e55bfdd4f7266fad50e42620"
|
||||
"7.3.0":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/7.3.0/harfbuzz-7.3.0.tar.xz"
|
||||
sha256: "20770789749ac9ba846df33983dbda22db836c70d9f5d050cb9aa5347094a8fb"
|
||||
"6.0.0":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/6.0.0/harfbuzz-6.0.0.tar.xz"
|
||||
sha256: "1d1010a1751d076d5291e433c138502a794d679a7498d1268ee21e2d4a140eb4"
|
||||
"5.1.0":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/releases/download/5.1.0/harfbuzz-5.1.0.tar.xz"
|
||||
sha256: "2edb95db668781aaa8d60959d21be2ff80085f31b12053cdd660d9a50ce84f05"
|
||||
patches:
|
||||
"5.1.0":
|
||||
- patch_file: "patches/0000-fix-freetype-lookup-5.1.0.patch"
|
||||
patch_type: "portability"
|
||||
patch_description: "fix fretype and icu dependency lookup"
|
||||
patch_source: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/harfbuzz/harfbuzz/pull/3811"
|
||||
226
recipes/harfbuzz/all/conanfile.py
Normal file
226
recipes/harfbuzz/all/conanfile.py
Normal file
@@ -0,0 +1,226 @@
|
||||
from conan import ConanFile, conan_version
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.tools.apple import is_apple_os, fix_apple_shared_install_name
|
||||
from conan.tools.build import can_run, stdcpp_library
|
||||
from conan.tools.env import Environment, VirtualBuildEnv
|
||||
from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rm, rmdir, replace_in_file
|
||||
from conan.tools.gnu import PkgConfigDeps
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.meson import Meson, MesonToolchain
|
||||
from conan.tools.microsoft import is_msvc_static_runtime, is_msvc
|
||||
from conan.tools.scm import Version
|
||||
|
||||
import os
|
||||
|
||||
required_conan_version = ">=1.60.0 <2.0 || >=2.0.6"
|
||||
|
||||
|
||||
class HarfbuzzConan(ConanFile):
|
||||
name = "harfbuzz"
|
||||
description = "HarfBuzz is an OpenType text shaping engine."
|
||||
topics = ("opentype", "text", "engine")
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://harfbuzz.github.io/"
|
||||
license = "MIT"
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
"with_freetype": [True, False],
|
||||
"with_icu": [True, False],
|
||||
"with_glib": [True, False],
|
||||
"with_gdi": [True, False],
|
||||
"with_uniscribe": [True, False],
|
||||
"with_directwrite": [True, False],
|
||||
"with_subset": [True, False],
|
||||
"with_coretext": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
"with_freetype": True,
|
||||
"with_icu": False,
|
||||
"with_glib": True,
|
||||
"with_gdi": True,
|
||||
"with_uniscribe": True,
|
||||
"with_directwrite": False,
|
||||
"with_subset": False,
|
||||
"with_coretext": True,
|
||||
}
|
||||
|
||||
short_paths = True
|
||||
|
||||
@property
|
||||
def _settings_build(self):
|
||||
return getattr(self, "settings_build", self.settings)
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def config_options(self):
|
||||
if self.settings.os == "Windows":
|
||||
del self.options.fPIC
|
||||
else:
|
||||
del self.options.with_gdi
|
||||
del self.options.with_uniscribe
|
||||
del self.options.with_directwrite
|
||||
if not is_apple_os(self):
|
||||
del self.options.with_coretext
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
if self.options.shared and self.options.with_glib:
|
||||
wildcard = "" if Version(conan_version) < "2.0.0" else "/*"
|
||||
self.options[f"glib{wildcard}"].shared = True
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def requirements(self):
|
||||
if self.options.with_freetype:
|
||||
self.requires("freetype/2.13.2")
|
||||
if self.options.with_icu:
|
||||
self.requires("icu/74.1")
|
||||
if self.options.with_glib:
|
||||
self.requires("glib/2.78.3")
|
||||
|
||||
def validate(self):
|
||||
if self.options.shared and self.options.with_glib and not self.dependencies["glib"].options.shared:
|
||||
raise ConanInvalidConfiguration(
|
||||
"Linking a shared library against static glib can cause unexpected behaviour."
|
||||
)
|
||||
if self.settings.compiler == "gcc" and Version(self.settings.compiler.version) < "7":
|
||||
raise ConanInvalidConfiguration("New versions of harfbuzz require at least gcc 7")
|
||||
|
||||
if self.options.with_glib and self.dependencies["glib"].options.shared and is_msvc_static_runtime(self):
|
||||
raise ConanInvalidConfiguration(
|
||||
"Linking shared glib with the MSVC static runtime is not supported"
|
||||
)
|
||||
|
||||
def build_requirements(self):
|
||||
# self.tool_requires("meson/1.4.0")
|
||||
if not self.conf.get("tools.gnu:pkg_config", check_type=str):
|
||||
self.tool_requires("pkgconf/[>=2.1.0]")
|
||||
if self.options.with_glib:
|
||||
self.tool_requires("glib/<host_version>")
|
||||
if self.settings.os == "Macos":
|
||||
# Ensure that the gettext we use at build time is compatible
|
||||
# with the libiconv that is transitively exposed by glib
|
||||
self.tool_requires("gettext/0.21")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
def is_enabled(value):
|
||||
return "enabled" if value else "disabled"
|
||||
|
||||
def meson_backend_and_flags():
|
||||
def is_vs_2017():
|
||||
version = Version(self.settings.compiler.version)
|
||||
return version == "15" or version == "191"
|
||||
|
||||
if is_msvc(self) and is_vs_2017() and self.settings.build_type == "Debug":
|
||||
# Mitigate https://learn.microsoft.com/en-us/cpp/build/reference/zf?view=msvc-170
|
||||
return "vs", ["/bigobj"]
|
||||
return "ninja", []
|
||||
|
||||
VirtualBuildEnv(self).generate()
|
||||
|
||||
# Avoid conflicts with libiconv
|
||||
# see: https://github.com/conan-io/conan-center-index/pull/17046#issuecomment-1554629094
|
||||
if self._settings_build.os == "Macos":
|
||||
env = Environment()
|
||||
env.define_path("DYLD_FALLBACK_LIBRARY_PATH", "$DYLD_LIBRARY_PATH")
|
||||
env.define_path("DYLD_LIBRARY_PATH", "")
|
||||
env.vars(self, scope="build").save_script("conanbuild_macos_runtimepath")
|
||||
|
||||
PkgConfigDeps(self).generate()
|
||||
|
||||
backend, cxxflags = meson_backend_and_flags()
|
||||
tc = MesonToolchain(self, backend=backend)
|
||||
tc.project_options["auto_features"] = "disabled"
|
||||
tc.project_options.update({
|
||||
"glib": is_enabled(self.options.with_glib),
|
||||
"icu": is_enabled(self.options.with_icu),
|
||||
"freetype": is_enabled(self.options.with_freetype),
|
||||
"gdi": is_enabled(self.options.get_safe("with_gdi")),
|
||||
"coretext": is_enabled(self.options.get_safe("with_coretext")),
|
||||
"directwrite": is_enabled(self.options.get_safe("with_directwrite")),
|
||||
"gobject": is_enabled(can_run(self) and self.options.with_glib),
|
||||
"introspection": is_enabled(False),
|
||||
"tests": "disabled",
|
||||
"docs": "disabled",
|
||||
"benchmark": "disabled",
|
||||
"icu_builtin": "false"
|
||||
})
|
||||
tc.cpp_args += cxxflags
|
||||
tc.generate()
|
||||
|
||||
def build(self):
|
||||
apply_conandata_patches(self)
|
||||
replace_in_file(self, os.path.join(self.source_folder, "meson.build"), "subdir('util')", "")
|
||||
meson = Meson(self)
|
||||
meson.configure()
|
||||
meson.build()
|
||||
|
||||
def package(self):
|
||||
copy(self, "COPYING", self.source_folder, os.path.join(self.package_folder, "licenses"))
|
||||
meson = Meson(self)
|
||||
meson.install()
|
||||
rm(self, "*.pdb", os.path.join(self.package_folder, "bin"))
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
||||
fix_apple_shared_install_name(self)
|
||||
fix_msvc_libname(self)
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.set_property("cmake_file_name", "harfbuzz")
|
||||
self.cpp_info.set_property("cmake_target_name", "harfbuzz::harfbuzz")
|
||||
self.cpp_info.set_property("pkg_config_name", "harfbuzz")
|
||||
if self.options.with_icu:
|
||||
self.cpp_info.libs.append("harfbuzz-icu")
|
||||
if self.options.with_subset:
|
||||
self.cpp_info.libs.append("harfbuzz-subset")
|
||||
self.cpp_info.libs.append("harfbuzz")
|
||||
self.cpp_info.includedirs.append(os.path.join("include", "harfbuzz"))
|
||||
if self.settings.os in ["Linux", "FreeBSD"]:
|
||||
self.cpp_info.system_libs.append("m")
|
||||
if self.settings.os == "Windows" and not self.options.shared:
|
||||
self.cpp_info.system_libs.append("user32")
|
||||
if self.options.with_gdi or self.options.with_uniscribe:
|
||||
self.cpp_info.system_libs.append("gdi32")
|
||||
if self.options.with_uniscribe or self.options.with_directwrite:
|
||||
self.cpp_info.system_libs.append("rpcrt4")
|
||||
if self.options.with_uniscribe:
|
||||
self.cpp_info.system_libs.append("usp10")
|
||||
if self.options.with_directwrite:
|
||||
self.cpp_info.system_libs.append("dwrite")
|
||||
if is_apple_os(self) and self.options.get_safe("with_coretext", False):
|
||||
if self.settings.os == "Macos":
|
||||
self.cpp_info.frameworks.append("ApplicationServices")
|
||||
else:
|
||||
self.cpp_info.frameworks.extend(["CoreFoundation", "CoreGraphics", "CoreText"])
|
||||
if not self.options.shared:
|
||||
libcxx = stdcpp_library(self)
|
||||
if libcxx:
|
||||
self.cpp_info.system_libs.append(libcxx)
|
||||
|
||||
|
||||
def fix_msvc_libname(conanfile, remove_lib_prefix=True):
|
||||
"""remove lib prefix & change extension to .lib in case of cl like compiler"""
|
||||
from conan.tools.files import rename
|
||||
import glob
|
||||
if not conanfile.settings.get_safe("compiler.runtime"):
|
||||
return
|
||||
libdirs = getattr(conanfile.cpp.package, "libdirs")
|
||||
for libdir in libdirs:
|
||||
for ext in [".dll.a", ".dll.lib", ".a"]:
|
||||
full_folder = os.path.join(conanfile.package_folder, libdir)
|
||||
for filepath in glob.glob(os.path.join(full_folder, f"*{ext}")):
|
||||
libname = os.path.basename(filepath)[0:-len(ext)]
|
||||
if remove_lib_prefix and libname[0:3] == "lib":
|
||||
libname = libname[3:]
|
||||
rename(conanfile, filepath, os.path.join(os.path.dirname(filepath), f"{libname}.lib"))
|
||||
@@ -0,0 +1,72 @@
|
||||
diff --git a/meson.build b/meson.build
|
||||
index df4443fb2..b8b143948 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -21,7 +21,7 @@ pkgmod = import('pkgconfig')
|
||||
cpp = meson.get_compiler('cpp')
|
||||
null_dep = dependency('', required: false)
|
||||
|
||||
-if cpp.get_id() == 'msvc'
|
||||
+if cpp.get_argument_syntax() == 'msvc'
|
||||
# Ignore several spurious warnings for things HarfBuzz does very commonly.
|
||||
# If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
|
||||
# If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
|
||||
@@ -83,25 +83,39 @@ check_funcs = [
|
||||
|
||||
m_dep = cpp.find_library('m', required: false)
|
||||
|
||||
-# https://github.com/harfbuzz/harfbuzz/pull/2498
|
||||
-freetype_dep = dependency(cpp.get_argument_syntax() == 'msvc' ? 'freetype' : 'freetype2',
|
||||
- required: get_option('freetype'),
|
||||
- default_options: ['harfbuzz=disabled'])
|
||||
+
|
||||
+# Try pkgconfig name
|
||||
+freetype_dep = dependency('freetype2', required: false)
|
||||
+if not freetype_dep.found()
|
||||
+ # Try cmake name
|
||||
+ freetype_dep = dependency('freetype', required: false)
|
||||
+endif
|
||||
+if not freetype_dep.found()
|
||||
+ # Subproject fallback, `allow_fallback: true` means the fallback will be
|
||||
+ # tried even if the freetype option is set to `auto`.
|
||||
+ freetype_dep = dependency('freetype2',
|
||||
+ required: get_option('freetype'),
|
||||
+ default_options: ['harfbuzz=disabled'],
|
||||
+ allow_fallback: true)
|
||||
+endif
|
||||
|
||||
glib_dep = dependency('glib-2.0', required: get_option('glib'))
|
||||
gobject_dep = dependency('gobject-2.0', required: get_option('gobject'))
|
||||
graphite2_dep = dependency('graphite2', required: get_option('graphite2'))
|
||||
graphite_dep = dependency('graphite2', required: get_option('graphite'))
|
||||
|
||||
-if cpp.get_argument_syntax() == 'msvc'
|
||||
+# Try pkgconfig name
|
||||
+icu_dep = dependency('icu-uc', required: false)
|
||||
+if not icu_dep.found()
|
||||
+ # Try cmake name
|
||||
icu_dep = dependency('ICU',
|
||||
- required: get_option('icu'),
|
||||
+ required: false,
|
||||
components: 'uc',
|
||||
method: 'cmake')
|
||||
-else
|
||||
- icu_dep = dependency('icu-uc',
|
||||
- required: get_option('icu'),
|
||||
- method: 'pkg-config')
|
||||
+endif
|
||||
+if not icu_dep.found()
|
||||
+ # Subproject fallback if icu option is enabled
|
||||
+ icu_dep = dependency('icu-uc', required: get_option('icu'))
|
||||
endif
|
||||
|
||||
if icu_dep.found() and icu_dep.type_name() == 'pkgconfig'
|
||||
@@ -118,7 +132,7 @@ if not get_option('cairo').disabled()
|
||||
cairo_ft_dep = dependency('cairo-ft', required: false)
|
||||
|
||||
if (not cairo_dep.found() and
|
||||
- cpp.get_id() == 'msvc' and
|
||||
+ cpp.get_argument_syntax() == 'msvc' and
|
||||
cpp.has_header('cairo.h'))
|
||||
cairo_dep = cpp.find_library('cairo', required: false)
|
||||
if cairo_dep.found() and cpp.has_function('cairo_ft_font_face_create_for_ft_face',
|
||||
8
recipes/harfbuzz/all/test_package/CMakeLists.txt
Normal file
8
recipes/harfbuzz/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
project(test_package LANGUAGES C)
|
||||
|
||||
find_package(harfbuzz REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE harfbuzz::harfbuzz)
|
||||
target_compile_features(${PROJECT_NAME} PRIVATE c_std_99)
|
||||
10
recipes/harfbuzz/all/test_package/CMakeUserPresets.json
Normal file
10
recipes/harfbuzz/all/test_package/CMakeUserPresets.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json",
|
||||
"build/gcc-11.5-x86_64-17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
27
recipes/harfbuzz/all/test_package/conanfile.py
Normal file
27
recipes/harfbuzz/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import CMake, cmake_layout
|
||||
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
test_type = "explicit"
|
||||
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
9
recipes/harfbuzz/all/test_package/test_package.c
Normal file
9
recipes/harfbuzz/all/test_package/test_package.c
Normal file
@@ -0,0 +1,9 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <hb.h>
|
||||
|
||||
int main() {
|
||||
const char *version = hb_version_string();
|
||||
printf("harfbuzz version: %s\n", version);
|
||||
return 0;
|
||||
}
|
||||
8
recipes/harfbuzz/all/test_v1_package/CMakeLists.txt
Normal file
8
recipes/harfbuzz/all/test_v1_package/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(test_package)
|
||||
|
||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup(TARGETS)
|
||||
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package/
|
||||
${CMAKE_CURRENT_BINARY_DIR}/test_package/)
|
||||
18
recipes/harfbuzz/all/test_v1_package/conanfile.py
Normal file
18
recipes/harfbuzz/all/test_v1_package/conanfile.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from conans import ConanFile, CMake, tools
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
generators = "cmake", "cmake_find_package_multi"
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if not tools.cross_building(self):
|
||||
bin_path = os.path.join("bin", "test_package")
|
||||
self.run(bin_path, run_environment=True)
|
||||
|
||||
17
recipes/harfbuzz/config.yml
Normal file
17
recipes/harfbuzz/config.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
versions:
|
||||
"8.3.0":
|
||||
folder: all
|
||||
"8.2.2":
|
||||
folder: all
|
||||
"8.2.1":
|
||||
folder: all
|
||||
"8.1.1":
|
||||
folder: all
|
||||
"8.0.1":
|
||||
folder: all
|
||||
"7.3.0":
|
||||
folder: all
|
||||
"6.0.0":
|
||||
folder: all
|
||||
"5.1.0":
|
||||
folder: all
|
||||
31
recipes/libelf/all/CMakeLists.txt
Normal file
31
recipes/libelf/all/CMakeLists.txt
Normal file
@@ -0,0 +1,31 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
project(elf LANGUAGES C)
|
||||
|
||||
if(EXISTS "${LIBELF_SRC_DIR}/lib/sys_elf.h.w32")
|
||||
file(RENAME "${LIBELF_SRC_DIR}/lib/sys_elf.h.w32" "${LIBELF_SRC_DIR}/lib/sys_elf.h")
|
||||
file(RENAME "${LIBELF_SRC_DIR}/lib/config.h.w32" "${LIBELF_SRC_DIR}/lib/config.h")
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE SOURCES "${LIBELF_SRC_DIR}/lib/*.c")
|
||||
file(GLOB_RECURSE HEADERS "${LIBELF_SRC_DIR}/lib/*.h")
|
||||
|
||||
add_library(${PROJECT_NAME} ${SOURCES})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
PUBLIC_HEADER "${HEADERS}"
|
||||
WINDOWS_EXPORT_ALL_SYMBOLS TRUE
|
||||
)
|
||||
target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC "${LIBELF_SRC_DIR}/lib")
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC HAVE_MEMCMP=1 HAVE_MEMCPY=1 HAVE_MEMMOVE=1 HAVE_CONFIG_H=1)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libelf
|
||||
)
|
||||
|
||||
install(FILES "${LIBELF_SRC_DIR}/lib/libelf.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
install(FILES "${LIBELF_SRC_DIR}/lib/gelf.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
install(FILES "${LIBELF_SRC_DIR}/lib/nlist.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
4
recipes/libelf/all/conandata.yml
Normal file
4
recipes/libelf/all/conandata.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
sources:
|
||||
"0.8.13":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-fossies_org/linux/misc/old/libelf-0.8.13.tar.gz"
|
||||
sha256: "591a9b4ec81c1f2042a97aa60564e0cb79d041c52faa7416acb38bc95bd2c76d"
|
||||
119
recipes/libelf/all/conanfile.py
Normal file
119
recipes/libelf/all/conanfile.py
Normal file
@@ -0,0 +1,119 @@
|
||||
from conan import ConanFile
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
|
||||
from conan.tools.env import VirtualBuildEnv
|
||||
from conan.tools.files import copy, get, replace_in_file, rm, rmdir
|
||||
from conan.tools.gnu import Autotools, AutotoolsToolchain
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.microsoft import unix_path
|
||||
import os
|
||||
|
||||
required_conan_version = ">=1.54.0"
|
||||
|
||||
|
||||
class LibelfConan(ConanFile):
|
||||
name = "libelf"
|
||||
description = "ELF object file access library"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://directory.fsf.org/wiki/Libelf"
|
||||
license = "LGPL-2.0"
|
||||
topics = ("elf", "fsf", "libelf", "object-file")
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
|
||||
exports_sources = "CMakeLists.txt"
|
||||
|
||||
def config_options(self):
|
||||
if self.settings.os == "Windows":
|
||||
del self.options.fPIC
|
||||
|
||||
def configure(self):
|
||||
if self.settings.os not in ["Linux", "FreeBSD", "Windows"]:
|
||||
self.options.rm_safe("shared")
|
||||
self.package_type = "static-library"
|
||||
if self.options.get_safe("shared"):
|
||||
self.options.rm_safe("fPIC")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
|
||||
def layout(self):
|
||||
if self.settings.os == "Windows":
|
||||
cmake_layout(self, src_folder="src")
|
||||
else:
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def build_requirements(self):
|
||||
if self.settings.os != "Windows":
|
||||
# self.tool_requires("autoconf/2.71")
|
||||
# self.tool_requires("gnu-config/cci.20210814")
|
||||
if self.settings_build.os == "Windows":
|
||||
self.win_bash = True
|
||||
if not self.conf.get("tools.microsoft.bash:path", check_type=str):
|
||||
self.tool_requires("msys2/cci.latest")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
if self.settings.os == "Windows":
|
||||
tc = CMakeToolchain(self)
|
||||
tc.variables["LIBELF_SRC_DIR"] = self.source_folder.replace("\\", "/")
|
||||
tc.generate()
|
||||
else:
|
||||
env = VirtualBuildEnv(self)
|
||||
env.generate()
|
||||
tc = AutotoolsToolchain(self)
|
||||
tc.configure_args.extend([
|
||||
# it's required, libelf doesnt seem to understand DESTDIR
|
||||
f"--prefix={unix_path(self, self.package_folder)}",
|
||||
])
|
||||
tc.generate()
|
||||
|
||||
def build(self):
|
||||
if self.settings.os == "Windows":
|
||||
cmake = CMake(self)
|
||||
cmake.configure(build_script_folder=os.path.join(self.source_folder, os.pardir))
|
||||
cmake.build()
|
||||
else:
|
||||
replace_in_file(self, os.path.join(self.source_folder, "lib", "Makefile.in"),
|
||||
"$(LINK_SHLIB)",
|
||||
"$(LINK_SHLIB) $(LDFLAGS)")
|
||||
# libelf sources contains really outdated 'config.sub' and
|
||||
# 'config.guess' files. It not allows to build libelf for armv8 arch.
|
||||
for gnu_config in [
|
||||
self.conf.get("user.gnu-config:config_guess", check_type=str),
|
||||
self.conf.get("user.gnu-config:config_sub", check_type=str),
|
||||
]:
|
||||
if gnu_config:
|
||||
copy(self, os.path.basename(gnu_config), src=os.path.dirname(gnu_config), dst=self.source_folder)
|
||||
autotools = Autotools(self)
|
||||
autotools.autoreconf()
|
||||
autotools.configure()
|
||||
autotools.make()
|
||||
|
||||
def package(self):
|
||||
copy(self, "COPYING.LIB", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
|
||||
if self.settings.os == "Windows":
|
||||
cmake = CMake(self)
|
||||
cmake.install()
|
||||
else:
|
||||
autotools = Autotools(self)
|
||||
autotools.install()
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "locale"))
|
||||
if self.options.get_safe("shared"):
|
||||
rm(self, "*.a", os.path.join(self.package_folder, "lib"))
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.set_property("pkg_config_name", "libelf")
|
||||
self.cpp_info.libs = ["elf"]
|
||||
self.cpp_info.includedirs.append(os.path.join("include", "libelf"))
|
||||
7
recipes/libelf/all/test_package/CMakeLists.txt
Normal file
7
recipes/libelf/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(test_package LANGUAGES C)
|
||||
|
||||
find_package(libelf REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libelf::libelf)
|
||||
10
recipes/libelf/all/test_package/CMakeUserPresets.json
Normal file
10
recipes/libelf/all/test_package/CMakeUserPresets.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json",
|
||||
"build/gcc-11.5-x86_64-17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
26
recipes/libelf/all/test_package/conanfile.py
Normal file
26
recipes/libelf/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import CMake, cmake_layout
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
|
||||
test_type = "explicit"
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
114
recipes/libelf/all/test_package/test_package.c
Normal file
114
recipes/libelf/all/test_package/test_package.c
Normal file
@@ -0,0 +1,114 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#ifdef _MSC_VER
|
||||
#include <io.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "libelf.h"
|
||||
|
||||
int main(int argc , char **argv) {
|
||||
int fd;
|
||||
Elf *e;
|
||||
const char *k;
|
||||
Elf_Kind ek;
|
||||
|
||||
if (elf_version(EV_CURRENT) == EV_NONE) {
|
||||
printf("ELF library initialization failed: %s\n", elf_errmsg ( -1));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
return EXIT_SUCCESS;
|
||||
#endif
|
||||
|
||||
#ifdef _MSVC_VER
|
||||
if ((fd = _open(argv[0], _O_RDONLY , 0)) < 0) {
|
||||
#else
|
||||
if ((fd = open(argv[0], O_RDONLY , 0)) < 0) {
|
||||
#endif
|
||||
printf("open %s failed\n", argv [0]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if(ELF_C_NULL != 0)
|
||||
{
|
||||
printf("ELF_C_NULL has wrong value: %d\n", ELF_C_NULL);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_READ != 1)
|
||||
{
|
||||
printf("ELF_C_READ has wrong value: %d\n", ELF_C_READ);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_WRITE != 2)
|
||||
{
|
||||
printf("ELF_C_WRITE has wrong value: %d\n", ELF_C_WRITE);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_CLR != 3)
|
||||
{
|
||||
printf("ELF_C_CLR has wrong value: %d\n", ELF_C_CLR);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_SET != 4)
|
||||
{
|
||||
printf("ELF_C_SET has wrong value: %d\n", ELF_C_SET);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_FDDONE != 5)
|
||||
{
|
||||
printf("ELF_C_FDDONE has wrong value: %d\n", ELF_C_FDDONE);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_FDREAD != 6)
|
||||
{
|
||||
printf("ELF_C_FDREAD has wrong value: %d\n", ELF_C_FDREAD);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_RDWR != 7)
|
||||
{
|
||||
printf("ELF_C_RDWR has wrong value: %d\n", ELF_C_RDWR);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(ELF_C_NUM != 8)
|
||||
{
|
||||
printf("ELF_C_NUM has wrong value: %d\n", ELF_C_NUM);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if ((e = elf_begin(fd, ELF_C_READ, NULL)) == NULL) {
|
||||
printf("elf_begin () failed: %s.\n", elf_errmsg ( -1));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
ek = elf_kind(e);
|
||||
|
||||
switch (ek) {
|
||||
case ELF_K_AR:
|
||||
k = "ar(1) archive";
|
||||
break;
|
||||
case ELF_K_ELF:
|
||||
k = "elf object";
|
||||
break;
|
||||
case ELF_K_NONE:
|
||||
k = "data";
|
||||
break;
|
||||
default:
|
||||
k = "unrecognized";
|
||||
}
|
||||
|
||||
printf("%s: %s\n", argv[0], k);
|
||||
elf_end(e);
|
||||
|
||||
#ifdef _MSVC_VER
|
||||
_close(fd);
|
||||
#else
|
||||
close(fd);
|
||||
#endif
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
3
recipes/libelf/config.yml
Normal file
3
recipes/libelf/config.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
versions:
|
||||
"0.8.13":
|
||||
folder: all
|
||||
30
recipes/libffi/all/conandata.yml
Normal file
30
recipes/libffi/all/conandata.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
sources:
|
||||
"3.4.6":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/libffi/libffi/releases/download/v3.4.6/libffi-3.4.6.tar.gz"
|
||||
sha256: "b0dea9df23c863a7a50e825440f3ebffabd65df1497108e5d437747843895a4e"
|
||||
"3.4.4":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz"
|
||||
sha256: "d66c56ad259a82cf2a9dfc408b32bf5da52371500b84745f7fb8b645712df676"
|
||||
"3.3":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz"
|
||||
sha256: "72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056"
|
||||
patches:
|
||||
"3.4.6":
|
||||
- patch_file: "patches/0002-3.4.6-fix-libtool-path.patch"
|
||||
- patch_file: "patches/0004-3.4.6-fix-complex-type-msvc.patch"
|
||||
- patch_file: "patches/0005-3.4.4-do-not-install-libraries-to-arch-dependent-directories.patch"
|
||||
- patch_file: "patches/0006-3.4.6-library-no-version-suffix.patch"
|
||||
"3.4.4":
|
||||
- patch_file: "patches/0002-3.4.3-fix-libtool-path.patch"
|
||||
- patch_file: "patches/0004-3.3-fix-complex-type-msvc.patch"
|
||||
- patch_file: "patches/0005-3.4.4-do-not-install-libraries-to-arch-dependent-directories.patch"
|
||||
- patch_file: "patches/0006-3.4.4-library-no-version-suffix.patch"
|
||||
- patch_file: "patches/0007-3.4.3-forward-declare-open_temp_exec_file.patch"
|
||||
patch_type: "portability"
|
||||
patch_source: "https://github.com/libffi/libffi/pull/764"
|
||||
patch_description: "Forward declare the open_temp_exec_file function which is required by the C99 standard"
|
||||
"3.3":
|
||||
- patch_file: "patches/0002-3.3-fix-libtool-path.patch"
|
||||
- patch_file: "patches/0004-3.3-fix-complex-type-msvc.patch"
|
||||
- patch_file: "patches/0005-3.3-do-not-install-libraries-to-arch-dependent-directories.patch"
|
||||
- patch_file: "patches/0006-3.3-library-no-version-suffix.patch"
|
||||
169
recipes/libffi/all/conanfile.py
Normal file
169
recipes/libffi/all/conanfile.py
Normal file
@@ -0,0 +1,169 @@
|
||||
from conan import ConanFile
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.tools.apple import fix_apple_shared_install_name, is_apple_os
|
||||
from conan.tools.env import VirtualBuildEnv
|
||||
from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, mkdir, rm, rmdir
|
||||
from conan.tools.gnu import Autotools, AutotoolsToolchain
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.microsoft import check_min_vs, is_msvc, is_msvc_static_runtime, msvc_runtime_flag, unix_path
|
||||
from conan.tools.scm import Version
|
||||
import glob
|
||||
import os
|
||||
import shutil
|
||||
|
||||
required_conan_version = ">=1.57.0"
|
||||
|
||||
|
||||
class LibffiConan(ConanFile):
|
||||
name = "libffi"
|
||||
description = "A portable, high level programming interface to various calling conventions"
|
||||
license = "MIT"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://sourceware.org/libffi/"
|
||||
topics = ("runtime", "foreign-function-interface", "runtime-library")
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
package_type = "library"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
|
||||
@property
|
||||
def _settings_build(self):
|
||||
# TODO: Remove for Conan v2
|
||||
return getattr(self, "settings_build", self.settings)
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def config_options(self):
|
||||
if self.settings.os == "Windows":
|
||||
del self.options.fPIC
|
||||
|
||||
def validate(self):
|
||||
if is_apple_os(self) and self.settings.arch == "armv8" and Version(self.version) < "3.4.0":
|
||||
raise ConanInvalidConfiguration(f"{self.ref} does not support Apple ARM CPUs")
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def build_requirements(self):
|
||||
if self._settings_build.os == "Windows":
|
||||
self.win_bash = True
|
||||
if not self.conf.get("tools.microsoft.bash:path", default=False, check_type=str):
|
||||
self.tool_requires("msys2/cci.latest")
|
||||
if is_msvc(self):
|
||||
self.tool_requires("automake/1.16.5")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
virtual_build_env = VirtualBuildEnv(self)
|
||||
virtual_build_env.generate()
|
||||
|
||||
yes_no = lambda v: "yes" if v else "no"
|
||||
tc = AutotoolsToolchain(self)
|
||||
tc.configure_args.extend([
|
||||
f"--enable-debug={yes_no(self.settings.build_type == 'Debug')}",
|
||||
"--enable-builddir=no",
|
||||
"--enable-docs=no",
|
||||
])
|
||||
|
||||
if self._settings_build.compiler == "apple-clang":
|
||||
tc.configure_args.append("--disable-multi-os-directory")
|
||||
|
||||
if self.options.shared:
|
||||
tc.extra_defines.append("FFI_BUILDING_DLL")
|
||||
if Version(self.version) < "3.4.6":
|
||||
tc.extra_defines.append("FFI_BUILDING")
|
||||
elif not self.options.shared:
|
||||
tc.extra_defines.append("FFI_STATIC_BUILD")
|
||||
|
||||
env = tc.environment()
|
||||
if self._settings_build.os == "Windows" and (is_msvc(self) or self.settings.compiler == "clang"):
|
||||
build = "{}-{}-{}".format(
|
||||
"x86_64" if self._settings_build.arch == "x86_64" else "i686",
|
||||
"pc" if self._settings_build.arch == "x86" else "win64",
|
||||
"mingw64")
|
||||
host = "{}-{}-{}".format(
|
||||
"x86_64" if self.settings.arch == "x86_64" else "i686",
|
||||
"pc" if self.settings.arch == "x86" else "win64",
|
||||
"mingw64")
|
||||
tc.update_configure_args({
|
||||
"--build": build,
|
||||
"--host": host
|
||||
})
|
||||
|
||||
if is_msvc(self) and check_min_vs(self, "180", raise_invalid=False):
|
||||
# https://github.com/conan-io/conan/issues/6514
|
||||
tc.extra_cflags.append("-FS")
|
||||
|
||||
if is_msvc_static_runtime(self):
|
||||
tc.extra_defines.append("USE_STATIC_RTL")
|
||||
if "d" in msvc_runtime_flag(self):
|
||||
tc.extra_defines.append("USE_DEBUG_RTL")
|
||||
|
||||
architecture_flag = ""
|
||||
if is_msvc(self):
|
||||
if self.settings.arch == "x86_64":
|
||||
architecture_flag = "-m64"
|
||||
elif self.settings.arch == "x86":
|
||||
architecture_flag = "-m32"
|
||||
elif self.settings.compiler == "clang":
|
||||
architecture_flag = "-clang-cl"
|
||||
|
||||
compile_wrapper = unix_path(self, os.path.join(self.source_folder, "msvcc.sh"))
|
||||
if architecture_flag:
|
||||
compile_wrapper = f"{compile_wrapper} {architecture_flag}"
|
||||
|
||||
ar_wrapper = unix_path(self, self.dependencies.build["automake"].conf_info.get("user.automake:lib-wrapper"))
|
||||
env.define("CC", f"{compile_wrapper}")
|
||||
env.define("CXX", f"{compile_wrapper}")
|
||||
env.define("LD", "link -nologo")
|
||||
env.define("AR", f"{ar_wrapper} \"lib -nologo\"")
|
||||
env.define("NM", "dumpbin -symbols")
|
||||
env.define("OBJDUMP", ":")
|
||||
env.define("RANLIB", ":")
|
||||
env.define("STRIP", ":")
|
||||
env.define("CXXCPP", "cl -nologo -EP")
|
||||
env.define("CPP", "cl -nologo -EP")
|
||||
env.define("LIBTOOL", unix_path(self, os.path.join(self.source_folder, "ltmain.sh")))
|
||||
env.define("INSTALL", unix_path(self, os.path.join(self.source_folder, "install-sh")))
|
||||
tc.generate(env=env)
|
||||
|
||||
def build(self):
|
||||
apply_conandata_patches(self)
|
||||
|
||||
autotools = Autotools(self)
|
||||
autotools.configure()
|
||||
autotools.make()
|
||||
|
||||
def package(self):
|
||||
autotools = Autotools(self)
|
||||
autotools.install(args=[f"DESTDIR={unix_path(self, self.package_folder)}"]) # Need to specify the `DESTDIR` as a Unix path, aware of the subsystem
|
||||
fix_apple_shared_install_name(self)
|
||||
mkdir(self, os.path.join(self.package_folder, "bin"))
|
||||
for dll in glob.glob(os.path.join(self.package_folder, "lib", "*.dll")):
|
||||
shutil.move(dll, os.path.join(self.package_folder, "bin"))
|
||||
copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))
|
||||
rm(self, "*.la", os.path.join(self.package_folder, "lib"), recursive=True)
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.libs = ["{}ffi".format("lib" if is_msvc(self) else "")]
|
||||
self.cpp_info.set_property("pkg_config_name", "libffi")
|
||||
if not self.options.shared:
|
||||
static_define = "FFI_STATIC_BUILD" if Version(self.version) >= "3.4.6" else "FFI_BUILDING"
|
||||
self.cpp_info.defines = [static_define]
|
||||
20
recipes/libffi/all/patches/0002-3.3-fix-libtool-path.patch
Normal file
20
recipes/libffi/all/patches/0002-3.3-fix-libtool-path.patch
Normal file
@@ -0,0 +1,20 @@
|
||||
--- configure
|
||||
+++ configure
|
||||
@@ -8964,7 +8964,7 @@
|
||||
LIBTOOL_DEPS=$ltmain
|
||||
|
||||
# Always use our own libtool.
|
||||
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
||||
+LIBTOOL='$(SHELL) $(top_builddir)/libtool.sh'
|
||||
|
||||
|
||||
|
||||
@@ -9057,7 +9057,7 @@
|
||||
esac
|
||||
|
||||
# Global variables:
|
||||
-ofile=libtool
|
||||
+ofile=libtool.sh
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||
20
recipes/libffi/all/patches/0002-3.4.3-fix-libtool-path.patch
Normal file
20
recipes/libffi/all/patches/0002-3.4.3-fix-libtool-path.patch
Normal file
@@ -0,0 +1,20 @@
|
||||
--- configure
|
||||
+++ configure
|
||||
@@ -9940,7 +9940,7 @@
|
||||
LIBTOOL_DEPS=$ltmain
|
||||
|
||||
# Always use our own libtool.
|
||||
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
||||
+LIBTOOL='$(SHELL) $(top_builddir)/libtool.sh'
|
||||
|
||||
|
||||
|
||||
@@ -10032,7 +10032,7 @@
|
||||
esac
|
||||
|
||||
# Global variables:
|
||||
-ofile=libtool
|
||||
+ofile=libtool.sh
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC and
|
||||
20
recipes/libffi/all/patches/0002-3.4.6-fix-libtool-path.patch
Normal file
20
recipes/libffi/all/patches/0002-3.4.6-fix-libtool-path.patch
Normal file
@@ -0,0 +1,20 @@
|
||||
--- configure
|
||||
+++ configure
|
||||
@@ -9882,7 +9882,7 @@
|
||||
LIBTOOL_DEPS=$ltmain
|
||||
|
||||
# Always use our own libtool.
|
||||
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
||||
+LIBTOOL='$(SHELL) $(top_builddir)/libtool.sh'
|
||||
|
||||
|
||||
|
||||
@@ -9974,7 +9974,7 @@
|
||||
esac
|
||||
|
||||
# Global variables:
|
||||
-ofile=libtool
|
||||
+ofile=libtool.sh
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC and
|
||||
@@ -0,0 +1,56 @@
|
||||
--- src/types.c
|
||||
+++ src/types.c
|
||||
@@ -31,6 +31,8 @@
|
||||
#include <ffi.h>
|
||||
#include <ffi_common.h>
|
||||
|
||||
+#include <complex.h>
|
||||
+
|
||||
/* Type definitions */
|
||||
|
||||
#define FFI_TYPEDEF(name, type, id, maybe_const)\
|
||||
@@ -45,17 +47,17 @@
|
||||
id, NULL \
|
||||
}
|
||||
|
||||
-#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \
|
||||
+#define FFI_COMPLEX_TYPEDEF(name, complex_type, maybe_const) \
|
||||
static ffi_type *ffi_elements_complex_##name [2] = { \
|
||||
(ffi_type *)(&ffi_type_##name), NULL \
|
||||
}; \
|
||||
struct struct_align_complex_##name { \
|
||||
char c; \
|
||||
- _Complex type x; \
|
||||
+ complex_type x; \
|
||||
}; \
|
||||
FFI_EXTERN \
|
||||
maybe_const ffi_type ffi_type_complex_##name = { \
|
||||
- sizeof(_Complex type), \
|
||||
+ sizeof(complex_type), \
|
||||
offsetof(struct struct_align_complex_##name, x), \
|
||||
FFI_TYPE_COMPLEX, \
|
||||
(ffi_type **)ffi_elements_complex_##name \
|
||||
@@ -99,10 +101,20 @@
|
||||
FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST);
|
||||
#endif
|
||||
|
||||
+#ifdef _MSC_VER
|
||||
+# define FLOAT_COMPLEX _C_float_complex
|
||||
+# define DOUBLE_COMPLEX _C_double_complex
|
||||
+# define LDOUBLE_COMPLEX _C_ldouble_complex
|
||||
+#else
|
||||
+# define FLOAT_COMPLEX float _Complex
|
||||
+# define DOUBLE_COMPLEX double _Complex
|
||||
+# define LDOUBLE_COMPLEX long double _Complex
|
||||
+#endif
|
||||
+
|
||||
#ifdef FFI_TARGET_HAS_COMPLEX_TYPE
|
||||
-FFI_COMPLEX_TYPEDEF(float, float, const);
|
||||
-FFI_COMPLEX_TYPEDEF(double, double, const);
|
||||
+FFI_COMPLEX_TYPEDEF(float, FLOAT_COMPLEX, const);
|
||||
+FFI_COMPLEX_TYPEDEF(double, DOUBLE_COMPLEX, const);
|
||||
#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
|
||||
-FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST);
|
||||
+FFI_COMPLEX_TYPEDEF(longdouble, LDOUBLE_COMPLEX, FFI_LDBL_CONST);
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,56 @@
|
||||
diff --git a/src/types.c b/src/types.c
|
||||
index c1c27f3..d5d52bb 100644
|
||||
--- a/src/types.c
|
||||
+++ b/src/types.c
|
||||
@@ -31,6 +31,8 @@
|
||||
#include <ffi.h>
|
||||
#include <ffi_common.h>
|
||||
|
||||
+#include <complex.h>
|
||||
+
|
||||
/* Type definitions */
|
||||
|
||||
#define FFI_TYPEDEF(name, type, id, maybe_const)\
|
||||
@@ -45,17 +47,17 @@ maybe_const ffi_type ffi_type_##name = { \
|
||||
id, NULL \
|
||||
}
|
||||
|
||||
-#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \
|
||||
+#define FFI_COMPLEX_TYPEDEF(name, complex_type, maybe_const) \
|
||||
static ffi_type *ffi_elements_complex_##name [2] = { \
|
||||
(ffi_type *)(&ffi_type_##name), NULL \
|
||||
}; \
|
||||
struct struct_align_complex_##name { \
|
||||
char c; \
|
||||
- _Complex type x; \
|
||||
+ complex_type x; \
|
||||
}; \
|
||||
FFI_EXTERN \
|
||||
maybe_const ffi_type ffi_type_complex_##name = { \
|
||||
- sizeof(_Complex type), \
|
||||
+ sizeof(complex_type), \
|
||||
offsetof(struct struct_align_complex_##name, x), \
|
||||
FFI_TYPE_COMPLEX, \
|
||||
(ffi_type **)ffi_elements_complex_##name \
|
||||
@@ -99,8 +101,18 @@ const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL };
|
||||
FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST);
|
||||
#endif
|
||||
|
||||
+#ifdef _MSC_VER
|
||||
+# define FLOAT_COMPLEX _C_float_complex
|
||||
+# define DOUBLE_COMPLEX _C_double_complex
|
||||
+# define LDOUBLE_COMPLEX _C_ldouble_complex
|
||||
+#else
|
||||
+# define FLOAT_COMPLEX float _Complex
|
||||
+# define DOUBLE_COMPLEX double _Complex
|
||||
+# define LDOUBLE_COMPLEX long double _Complex
|
||||
+#endif
|
||||
+
|
||||
#ifdef FFI_TARGET_HAS_COMPLEX_TYPE
|
||||
-FFI_COMPLEX_TYPEDEF(float, float, const);
|
||||
-FFI_COMPLEX_TYPEDEF(double, double, const);
|
||||
-FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST);
|
||||
+FFI_COMPLEX_TYPEDEF(float, FLOAT_COMPLEX, const);
|
||||
+FFI_COMPLEX_TYPEDEF(double, DOUBLE_COMPLEX, const);
|
||||
+FFI_COMPLEX_TYPEDEF(longdouble, LDOUBLE_COMPLEX, FFI_LDBL_CONST);
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
--- Makefile.in
|
||||
+++ Makefile.in
|
||||
@@ -510,7 +510,7 @@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
toolexecdir = @toolexecdir@
|
||||
-toolexeclibdir = @toolexeclibdir@
|
||||
+toolexeclibdir = @libdir@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@@ -0,0 +1,13 @@
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 86eb4a5..450200a 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -521,7 +521,7 @@ target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
tmake_file = @tmake_file@
|
||||
toolexecdir = @toolexecdir@
|
||||
-toolexeclibdir = @toolexeclibdir@
|
||||
+toolexeclibdir = @libdir@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@@ -0,0 +1,11 @@
|
||||
--- Makefile.in
|
||||
+++ Makefile.in
|
||||
@@ -613,7 +613,7 @@
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_dep =
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun
|
||||
-libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
|
||||
+libffi_version_info = -avoid-version
|
||||
libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
|
||||
libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
|
||||
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
|
||||
@@ -0,0 +1,13 @@
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 450200a..abcee85 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -616,7 +616,7 @@ AM_CFLAGS = $(am__append_3)
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_dep =
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun
|
||||
-libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
|
||||
+libffi_version_info = -avoid-version
|
||||
libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
|
||||
libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
|
||||
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
|
||||
@@ -0,0 +1,13 @@
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 450200a..abcee85 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -618,7 +618,7 @@ AM_CFLAGS = $(am__append_3)
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_dep =
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map
|
||||
@LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun
|
||||
-libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
|
||||
+libffi_version_info = -avoid-version
|
||||
libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
|
||||
libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)
|
||||
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
|
||||
@@ -0,0 +1,30 @@
|
||||
diff --git a/include/ffi_common.h b/include/ffi_common.h
|
||||
index 2bd31b0..c53a794 100644
|
||||
--- a/include/ffi_common.h
|
||||
+++ b/include/ffi_common.h
|
||||
@@ -128,6 +128,10 @@ void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN;
|
||||
static trampoline. */
|
||||
int ffi_tramp_is_present (void *closure) FFI_HIDDEN;
|
||||
|
||||
+/* Return a file descriptor of a temporary zero-sized file in a
|
||||
+ writable and executable filesystem. */
|
||||
+int open_temp_exec_file(void) FFI_HIDDEN;
|
||||
+
|
||||
/* Extended cif, used in callback from assembly routine */
|
||||
typedef struct
|
||||
{
|
||||
diff --git a/src/tramp.c b/src/tramp.c
|
||||
index b9d273a..c3f4c99 100644
|
||||
--- a/src/tramp.c
|
||||
+++ b/src/tramp.c
|
||||
@@ -39,6 +39,10 @@
|
||||
#ifdef __linux__
|
||||
#define _GNU_SOURCE 1
|
||||
#endif
|
||||
+
|
||||
+#include <ffi.h>
|
||||
+#include <ffi_common.h>
|
||||
+
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
8
recipes/libffi/all/test_package/CMakeLists.txt
Normal file
8
recipes/libffi/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
|
||||
project(test_package LANGUAGES C)
|
||||
|
||||
find_package(libffi REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libffi::libffi)
|
||||
10
recipes/libffi/all/test_package/CMakeUserPresets.json
Normal file
10
recipes/libffi/all/test_package/CMakeUserPresets.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json",
|
||||
"build/gcc-11.5-x86_64-17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
37
recipes/libffi/all/test_package/conanfile.py
Normal file
37
recipes/libffi/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import cmake_layout, CMake, CMakeDeps, CMakeToolchain
|
||||
from conan.tools.env import VirtualRunEnv
|
||||
from conan.tools.microsoft import msvc_runtime_flag
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
test_type = "explicit"
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def generate(self):
|
||||
cmake_deps = CMakeDeps(self)
|
||||
cmake_deps.generate()
|
||||
tc = CMakeToolchain(self)
|
||||
if "d" in msvc_runtime_flag(self):
|
||||
tc.preprocessor_definitions["DISABLE_FFI_CALL"] = 1
|
||||
tc.generate()
|
||||
virtual_run_env = VirtualRunEnv(self)
|
||||
virtual_run_env.generate()
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
99
recipes/libffi/all/test_package/test_package.c
Normal file
99
recipes/libffi/all/test_package/test_package.c
Normal file
@@ -0,0 +1,99 @@
|
||||
#if defined(_MSC_VER)
|
||||
#pragma runtime_checks("s", off)
|
||||
#endif
|
||||
|
||||
#include <ffi.h>
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
unsigned print_uint(unsigned arg) {
|
||||
printf("print_int(%u)\n", arg);
|
||||
return 3 * arg;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
FILE *stream;
|
||||
} puts_binding_userdata;
|
||||
|
||||
void puts_binding(ffi_cif *cif, void *ret, void** args, void *userdata)
|
||||
{
|
||||
fputs(*(char **)args[0], ((puts_binding_userdata *)userdata)->stream);
|
||||
*((unsigned*)ret) = 1337;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
ffi_type *argtypes[1] = {&ffi_type_uint32};
|
||||
ffi_cif cif;
|
||||
ffi_status status = FFI_BAD_ABI;
|
||||
status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_uint32, argtypes);
|
||||
if (status != FFI_OK)
|
||||
{
|
||||
puts("1 ffi_prep_cif FAILED.\n\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
#ifndef DISABLE_FFI_CALL
|
||||
// this fails on msvc debug runtime because of https://github.com/libffi/libffi/issues/456
|
||||
unsigned rvalue = 0;
|
||||
unsigned arg1 = 13;
|
||||
const unsigned expected_ret = 3 * arg1;
|
||||
void *args[] = {(void*)(&arg1)};
|
||||
ffi_call(&cif, FFI_FN(&print_uint), (void *) &rvalue, args);
|
||||
printf("ffi_call returns %d (should be %d)\n", rvalue, expected_ret);
|
||||
if (rvalue != expected_ret) {
|
||||
printf("ffi_call FAILED. Expected %d, but got %d.\n", expected_ret, rvalue);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
#endif
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
{
|
||||
#ifdef FFI_CLOSURES
|
||||
ffi_type *argtypes[1] = {&ffi_type_uint};
|
||||
ffi_cif cif;
|
||||
ffi_status status = FFI_BAD_ABI;
|
||||
status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_uint32, argtypes);
|
||||
if (status != FFI_OK)
|
||||
{
|
||||
puts("2 ffi_prep_cif FAILED.\n\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
unsigned (*bound_puts)(const char *) = NULL;
|
||||
ffi_closure *closure = NULL;
|
||||
closure = (ffi_closure *) ffi_closure_alloc(sizeof(ffi_closure), (void **)&bound_puts);
|
||||
if (closure == NULL) {
|
||||
puts("ffi_closure_alloc FAILED\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
puts_binding_userdata userdata;
|
||||
userdata.stream = stdout;
|
||||
status = ffi_prep_closure_loc(closure, &cif, puts_binding,
|
||||
&userdata, (void *) bound_puts);
|
||||
if (status != FFI_OK) {
|
||||
puts("ffi_prep_closure_loc FAILED\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
puts("Start calling bound_put():");
|
||||
bound_puts("Hello");
|
||||
bound_puts(" ");
|
||||
bound_puts("World");
|
||||
unsigned rc = bound_puts("\n");
|
||||
printf("bounds_puts returned %d.\n", rc);
|
||||
if (rc != 1337) {
|
||||
puts("bounds_put returned wrong number.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
ffi_closure_free(closure);
|
||||
#endif
|
||||
}
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma runtime_checks("s", restore)
|
||||
#endif
|
||||
11
recipes/libffi/all/test_v1_package/CMakeLists.txt
Normal file
11
recipes/libffi/all/test_v1_package/CMakeLists.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(test_package C)
|
||||
|
||||
include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake")
|
||||
conan_basic_setup()
|
||||
if(CONAN_SETTINGS_COMPILER_RUNTIME MATCHES ".*d")
|
||||
add_compile_definitions(DISABLE_FFI_CALL)
|
||||
endif()
|
||||
|
||||
add_executable(${PROJECT_NAME} ../test_package/test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
|
||||
17
recipes/libffi/all/test_v1_package/conanfile.py
Normal file
17
recipes/libffi/all/test_v1_package/conanfile.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from conans import ConanFile, CMake, tools
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
generators = "cmake"
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if not tools.cross_building(self):
|
||||
bin_path = os.path.join("bin", "test_package")
|
||||
self.run(bin_path, run_environment=True)
|
||||
7
recipes/libffi/config.yml
Normal file
7
recipes/libffi/config.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
versions:
|
||||
"3.4.6":
|
||||
folder: "all"
|
||||
"3.4.4":
|
||||
folder: "all"
|
||||
"3.3":
|
||||
folder: "all"
|
||||
25
recipes/libgettext/all/conandata.yml
Normal file
25
recipes/libgettext/all/conandata.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
sources:
|
||||
"0.22":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-ftp_gnu_org/pub/gnu/gettext/gettext-0.22.tar.gz"
|
||||
sha256: "49f089be11b490170bbf09ed2f51e5f5177f55be4cc66504a5861820e0fb06ab"
|
||||
"0.21":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-ftp_gnu_org/pub/gnu/gettext/gettext-0.21.tar.gz"
|
||||
sha256: "c77d0da3102aec9c07f43671e60611ebff89a996ef159497ce8e59d075786b12"
|
||||
"0.20.1":
|
||||
sha256: "66415634c6e8c3fa8b71362879ec7575e27da43da562c798a8a2f223e6e47f5c"
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-ftp_gnu_org/pub/gnu/gettext/gettext-0.20.1.tar.gz"
|
||||
patches:
|
||||
"0.21":
|
||||
- patch_file: "patches/0002-memmove-is-intrinsic-function-on-MSVC.patch"
|
||||
patch_description: "memmove is intrinsic function on MSVC"
|
||||
patch_type: "portability"
|
||||
"0.20.1":
|
||||
- patch_file: "patches/0001-build-Fix-build-errors-with-MSVC.patch"
|
||||
patch_description: "Fix build errors with MSVC"
|
||||
patch_type: "portability"
|
||||
- patch_file: "patches/0002-memmove-is-intrinsic-function-on-MSVC.patch"
|
||||
patch_description: "memmove is intrinsic function on MSVC"
|
||||
patch_type: "portability"
|
||||
- patch_file: "patches/0003-Reported-by-Gabor-Z.-Papp-gzp-papp.hu.patch"
|
||||
patch_description: "fix preloadable libintl for static build"
|
||||
patch_type: "portability"
|
||||
239
recipes/libgettext/all/conanfile.py
Normal file
239
recipes/libgettext/all/conanfile.py
Normal file
@@ -0,0 +1,239 @@
|
||||
import glob
|
||||
import os
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.tools.apple import is_apple_os
|
||||
from conan.tools.build import cross_building
|
||||
from conan.tools.env import VirtualBuildEnv, VirtualRunEnv, Environment
|
||||
from conan.tools.files import (
|
||||
apply_conandata_patches,
|
||||
copy,
|
||||
export_conandata_patches,
|
||||
get,
|
||||
rename
|
||||
)
|
||||
from conan.tools.gnu import Autotools, AutotoolsDeps, AutotoolsToolchain
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.microsoft import is_msvc, unix_path
|
||||
from conan.tools.scm import Version
|
||||
|
||||
required_conan_version = ">=1.53.0"
|
||||
|
||||
|
||||
class GetTextConan(ConanFile):
|
||||
name = "libgettext"
|
||||
description = "An internationalization and localization system for multilingual programs"
|
||||
topics = ("gettext", "intl", "libintl", "i18n")
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://www.gnu.org/software/gettext"
|
||||
# Some parts of the project are GPL-3.0-or-later and some are LGPL-2.1-or-later.
|
||||
# At this time, only libintl is packaged, which is licensed under the LGPL-2.1-or-later.
|
||||
# If you modify this package to include other portions of the library, please configure the license accordingly.
|
||||
# The licensing of the project is documented here: https://www.gnu.org/software/gettext/manual/gettext.html#Licenses
|
||||
license = "LGPL-2.1-or-later"
|
||||
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
"threads": ["posix", "solaris", "pth", "windows", "disabled"],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
# Handle default value for `threads` in `config_options` method
|
||||
}
|
||||
|
||||
@property
|
||||
def _is_clang_cl(self):
|
||||
return self.settings.os == "Windows" and self.settings.compiler == "clang" and \
|
||||
self.settings.compiler.get_safe("runtime")
|
||||
|
||||
@property
|
||||
def _gettext_folder(self):
|
||||
return "gettext-tools"
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def config_options(self):
|
||||
if self.settings.os == "Windows":
|
||||
self.options.rm_safe("fPIC")
|
||||
|
||||
self.options.threads = {"Solaris": "solaris", "Windows": "windows"}.get(str(self.settings.os), "posix")
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def requirements(self):
|
||||
self.requires("libiconv/1.17")
|
||||
|
||||
@property
|
||||
def _settings_build(self):
|
||||
return getattr(self, "settings_build", self.settings)
|
||||
|
||||
def build_requirements(self):
|
||||
if self._settings_build.os == "Windows":
|
||||
self.win_bash = True
|
||||
if not self.conf.get("tools.microsoft.bash:path", default=False, check_type=str):
|
||||
self.tool_requires("msys2/cci.latest")
|
||||
if is_msvc(self) or self._is_clang_cl:
|
||||
self.tool_requires("automake/1.16.5")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
VirtualBuildEnv(self).generate()
|
||||
|
||||
if not cross_building(self):
|
||||
VirtualRunEnv(self).generate(scope="build")
|
||||
|
||||
tc = AutotoolsToolchain(self)
|
||||
tc.configure_args += [
|
||||
"HELP2MAN=/bin/true",
|
||||
"EMACS=no",
|
||||
"--disable-nls",
|
||||
"--disable-dependency-tracking",
|
||||
"--enable-relocatable",
|
||||
"--disable-c++",
|
||||
"--disable-java",
|
||||
"--disable-csharp",
|
||||
"--disable-libasprintf",
|
||||
"--disable-curses",
|
||||
"--disable-threads" if self.options.threads == "disabled" else ("--enable-threads=" + str(self.options.threads)),
|
||||
f"--with-libiconv-prefix={unix_path(self, self.dependencies['libiconv'].package_folder)}",
|
||||
]
|
||||
if is_msvc(self) or self._is_clang_cl:
|
||||
target = None
|
||||
if self.settings.arch == "x86_64":
|
||||
target = "x86_64-w64-mingw32"
|
||||
elif self.settings.arch == "x86":
|
||||
target = "i686-w64-mingw32"
|
||||
|
||||
if target is not None:
|
||||
tc.configure_args += [f"--host={target}", f"--build={target}"]
|
||||
|
||||
if (str(self.settings.compiler) == "Visual Studio" and Version(self.settings.compiler.version) >= "12") or \
|
||||
(str(self.settings.compiler) == "msvc" and Version(self.settings.compiler.version) >= "180"):
|
||||
tc.extra_cflags += ["-FS"]
|
||||
|
||||
if self.settings.build_type == "Debug":
|
||||
# Skip checking for the 'n' printf format directly
|
||||
# in msvc, as it is known to not be available due to security concerns.
|
||||
# Skipping it avoids a GUI prompt during ./configure for a debug build
|
||||
# See https://github.com/conan-io/conan-center-index/issues/23698
|
||||
tc.configure_args.extend([
|
||||
'gl_cv_func_printf_directive_n=no'
|
||||
])
|
||||
tc.make_args += ["-C", "intl"]
|
||||
env = tc.environment()
|
||||
if is_msvc(self) or self._is_clang_cl:
|
||||
def programs():
|
||||
rc = None
|
||||
if self.settings.arch == "x86_64":
|
||||
rc = "windres --target=pe-x86-64"
|
||||
elif self.settings.arch == "x86":
|
||||
rc = "windres --target=pe-i386"
|
||||
if self._is_clang_cl:
|
||||
return os.environ.get("CC", "clang-cl"), os.environ.get("AR", "llvm-lib"), os.environ.get("LD", "lld-link"), rc
|
||||
if is_msvc(self):
|
||||
return "cl -nologo", "lib", "link", rc
|
||||
|
||||
compile_wrapper = unix_path(self, self.conf.get("user.automake:compile-wrapper", check_type=str))
|
||||
ar_wrapper = unix_path(self, self.conf.get("user.automake:lib-wrapper", check_type=str))
|
||||
cc, ar, link, rc = programs()
|
||||
env.define("CC", f"{compile_wrapper} {cc}")
|
||||
env.define("CXX", f"{compile_wrapper} {cc}")
|
||||
env.define("LD", link)
|
||||
env.define("AR", f"{ar_wrapper} {ar}")
|
||||
env.define("NM", "dumpbin -symbols")
|
||||
env.define("RANLIB", ":")
|
||||
env.define("STRIP", ":")
|
||||
if rc is not None:
|
||||
env.define("RC", rc)
|
||||
env.define("WINDRES", rc)
|
||||
tc.generate(env)
|
||||
|
||||
if is_msvc(self) or self._is_clang_cl:
|
||||
# Custom AutotoolsDeps for cl like compilers
|
||||
# workaround for https://github.com/conan-io/conan/issues/12784
|
||||
includedirs = []
|
||||
defines = []
|
||||
libs = []
|
||||
libdirs = []
|
||||
linkflags = []
|
||||
cxxflags = []
|
||||
cflags = []
|
||||
for dependency in self.dependencies.values():
|
||||
deps_cpp_info = dependency.cpp_info.aggregated_components()
|
||||
includedirs.extend(deps_cpp_info.includedirs)
|
||||
defines.extend(deps_cpp_info.defines)
|
||||
libs.extend(deps_cpp_info.libs + deps_cpp_info.system_libs)
|
||||
libdirs.extend(deps_cpp_info.libdirs)
|
||||
linkflags.extend(deps_cpp_info.sharedlinkflags + deps_cpp_info.exelinkflags)
|
||||
cxxflags.extend(deps_cpp_info.cxxflags)
|
||||
cflags.extend(deps_cpp_info.cflags)
|
||||
|
||||
env = Environment()
|
||||
env.append("CPPFLAGS", [f"-I{unix_path(self, p)}" for p in includedirs] + [f"-D{d}" for d in defines])
|
||||
env.append("_LINK_", [lib if lib.endswith(".lib") else f"{lib}.lib" for lib in libs])
|
||||
env.append("LDFLAGS", [f"-L{unix_path(self, p)}" for p in libdirs] + linkflags)
|
||||
env.append("CXXFLAGS", cxxflags)
|
||||
env.append("CFLAGS", cflags)
|
||||
env.vars(self).save_script("conanautotoolsdeps_cl_workaround")
|
||||
else:
|
||||
deps = AutotoolsDeps(self)
|
||||
deps.generate()
|
||||
|
||||
def build(self):
|
||||
apply_conandata_patches(self)
|
||||
autotools = Autotools(self)
|
||||
autotools.configure("gettext-runtime")
|
||||
autotools.make()
|
||||
|
||||
def package(self):
|
||||
dest_lib_dir = os.path.join(self.package_folder, "lib")
|
||||
dest_runtime_dir = os.path.join(self.package_folder, "bin")
|
||||
dest_include_dir = os.path.join(self.package_folder, "include")
|
||||
copy(self, "COPYING", self.source_folder, os.path.join(self.package_folder, "licenses"))
|
||||
copy(self, "*gnuintl*.dll", self.build_folder, dest_runtime_dir, keep_path=False)
|
||||
copy(self, "*gnuintl*.lib", self.build_folder, dest_lib_dir, keep_path=False)
|
||||
copy(self, "*gnuintl*.a", self.build_folder, dest_lib_dir, keep_path=False)
|
||||
copy(self, "*gnuintl*.so*", self.build_folder, dest_lib_dir, keep_path=False)
|
||||
copy(self, "*gnuintl*.dylib", self.build_folder, dest_lib_dir, keep_path=False)
|
||||
copy(self, "*libgnuintl.h", self.build_folder, dest_include_dir, keep_path=False)
|
||||
rename(self, os.path.join(dest_include_dir, "libgnuintl.h"), os.path.join(dest_include_dir, "libintl.h"))
|
||||
fix_msvc_libname(self)
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.set_property("cmake_find_mode", "both")
|
||||
self.cpp_info.set_property("cmake_file_name", "Intl")
|
||||
self.cpp_info.set_property("cmake_target_name", "Intl::Intl")
|
||||
self.cpp_info.libs = ["gnuintl"]
|
||||
if is_apple_os(self):
|
||||
self.cpp_info.frameworks.append("CoreFoundation")
|
||||
|
||||
self.cpp_info.names["cmake_find_package"] = "Intl"
|
||||
self.cpp_info.names["cmake_find_package_multi"] = "Intl"
|
||||
|
||||
def fix_msvc_libname(conanfile, remove_lib_prefix=True):
|
||||
"""remove lib prefix & change extension to .lib in case of cl like compiler"""
|
||||
if not conanfile.settings.get_safe("compiler.runtime"):
|
||||
return
|
||||
libdirs = getattr(conanfile.cpp.package, "libdirs")
|
||||
for libdir in libdirs:
|
||||
for ext in [".dll.a", ".dll.lib", ".a"]:
|
||||
full_folder = os.path.join(conanfile.package_folder, libdir)
|
||||
for filepath in glob.glob(os.path.join(full_folder, f"*{ext}")):
|
||||
libname = os.path.basename(filepath)[0:-len(ext)]
|
||||
if remove_lib_prefix and libname[0:3] == "lib":
|
||||
libname = libname[3:]
|
||||
rename(conanfile, filepath, os.path.join(os.path.dirname(filepath), f"{libname}.lib"))
|
||||
@@ -0,0 +1,362 @@
|
||||
From b33dca8eecdc1eb30bb3747df563faabf729f001 Mon Sep 17 00:00:00 2001
|
||||
From: Bruno Haible <bruno@clisp.org>
|
||||
Date: Thu, 4 Jul 2019 16:27:33 +0200
|
||||
Subject: [PATCH 1/2] build: Fix build errors with MSVC.
|
||||
|
||||
* gettext-tools/libgettextpo/exported.sh.in: Remove one level of eval.
|
||||
* gettext-tools/libgettextpo/Makefile.am (config.h): Redirect compiler output to
|
||||
stderr. Remove symbols that contain an '@'.
|
||||
* libtextstyle/lib/Makefile.am (config.h): Likewise.
|
||||
|
||||
build: Fix build error with MSVC.
|
||||
|
||||
* gettext-runtime/intl/export.h (LIBINTL_DLL_EXPORTED): Define differently for
|
||||
MSVC.
|
||||
|
||||
build: Fix build error with MSVC.
|
||||
|
||||
* gettext-runtime/intl/Makefile.am (INTL_WINDOWS_LIBS): New variable.
|
||||
(OTHER_LDFLAGS): Add it.
|
||||
|
||||
build: Fix build errors with MSVC.
|
||||
|
||||
* gettext-tools/src/lang-table.h (language_table, language_variant_table):
|
||||
Declare with C linkage.
|
||||
* gettext-tools/src/read-po.h (input_format_po): Likewise.
|
||||
* gettext-tools/src/read-properties.h (input_format_properties): Likewise.
|
||||
* gettext-tools/src/read-stringtable.h (input_format_stringtable): Likewise.
|
||||
* gettext-tools/src/write-properties.h (output_format_properties): Likewise.
|
||||
* gettext-tools/src/write-stringtable.h (output_format_stringtable): Likewise.
|
||||
|
||||
intl: Don't export the glwthread* symbols from libintl on native Windows.
|
||||
|
||||
* gettext-runtime/intl/Makefile.am (OTHER_LDFLAGS): Add an -export-symbols-regex
|
||||
option.
|
||||
---
|
||||
gettext-runtime/intl/Makefile.in | 10 +++++++++-
|
||||
gettext-runtime/intl/export.h | 2 ++
|
||||
gettext-tools/intl/Makefile.in | 10 +++++++++-
|
||||
gettext-tools/libgettextpo/Makefile.in | 4 ++--
|
||||
gettext-tools/libgettextpo/exported.sh.in | 5 ++---
|
||||
gettext-tools/src/lang-table.h | 14 +++++++++++++-
|
||||
gettext-tools/src/read-po.h | 14 +++++++++++++-
|
||||
gettext-tools/src/read-properties.h | 14 +++++++++++++-
|
||||
gettext-tools/src/read-stringtable.h | 14 +++++++++++++-
|
||||
gettext-tools/src/write-properties.h | 14 +++++++++++++-
|
||||
gettext-tools/src/write-stringtable.h | 14 +++++++++++++-
|
||||
libtextstyle/lib/Makefile.in | 4 ++--
|
||||
12 files changed, 104 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/gettext-runtime/intl/Makefile.in b/gettext-runtime/intl/Makefile.in
|
||||
index fe59cd4aa..10aaa89fe 100644
|
||||
--- a/gettext-runtime/intl/Makefile.in
|
||||
+++ b/gettext-runtime/intl/Makefile.in
|
||||
@@ -1416,6 +1416,11 @@ libintl_la_DEPENDENCIES = $(WOE32_LIBADD)
|
||||
libgnuintl_la_LIBADD = $(WOE32_LIBADD)
|
||||
libgnuintl_la_DEPENDENCIES = $(WOE32_LIBADD)
|
||||
|
||||
+# langprefs.c (_nl_language_preferences_win32_95) uses functions from
|
||||
+# advapi32.dll.
|
||||
+@WOE32_TRUE@INTL_WINDOWS_LIBS = -ladvapi32
|
||||
+@WOE32_FALSE@INTL_WINDOWS_LIBS =
|
||||
+
|
||||
# Libtool's library version information for libintl.
|
||||
# Before making a gettext release, you must change this according to the
|
||||
# libtool documentation, section "Library interface versions".
|
||||
@@ -1424,8 +1429,11 @@ LTV_REVISION = 6
|
||||
LTV_AGE = 1
|
||||
|
||||
# How to build libintl.la and libgnuintl.la.
|
||||
+# Limit the exported symbols: Don't export glwthread* (from gnulib modules).
|
||||
OTHER_LDFLAGS = \
|
||||
- @LTLIBICONV@ @INTL_MACOSX_LIBS@ @LTLIBTHREAD@ -no-undefined \
|
||||
+ @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(INTL_WINDOWS_LIBS) @LTLIBTHREAD@ \
|
||||
+ -no-undefined \
|
||||
+ -export-symbols-regex '^([^g]|g[^l]|gl[^w]|glw[^t]|glwt[^h]|glwth[^r]|glwthr[^e]|glwthre[^a]|glwthrea[^d]).*' \
|
||||
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
||||
-rpath $(libdir)
|
||||
|
||||
diff --git a/gettext-runtime/intl/export.h b/gettext-runtime/intl/export.h
|
||||
index b5c47ad5b..10253e338 100644
|
||||
--- a/gettext-runtime/intl/export.h
|
||||
+++ b/gettext-runtime/intl/export.h
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
#if @HAVE_VISIBILITY@ && BUILDING_LIBINTL
|
||||
#define LIBINTL_DLL_EXPORTED __attribute__((__visibility__("default")))
|
||||
+#elif defined _MSC_VER && BUILDING_LIBINTL
|
||||
+#define LIBINTL_DLL_EXPORTED __declspec(dllexport)
|
||||
#else
|
||||
#define LIBINTL_DLL_EXPORTED
|
||||
#endif
|
||||
diff --git a/gettext-tools/intl/Makefile.in b/gettext-tools/intl/Makefile.in
|
||||
index 9bdfe2238..6eabf22af 100644
|
||||
--- a/gettext-tools/intl/Makefile.in
|
||||
+++ b/gettext-tools/intl/Makefile.in
|
||||
@@ -2120,6 +2120,11 @@ libintl_la_DEPENDENCIES = $(WOE32_LIBADD)
|
||||
libgnuintl_la_LIBADD = $(WOE32_LIBADD)
|
||||
libgnuintl_la_DEPENDENCIES = $(WOE32_LIBADD)
|
||||
|
||||
+# langprefs.c (_nl_language_preferences_win32_95) uses functions from
|
||||
+# advapi32.dll.
|
||||
+@WOE32_TRUE@INTL_WINDOWS_LIBS = -ladvapi32
|
||||
+@WOE32_FALSE@INTL_WINDOWS_LIBS =
|
||||
+
|
||||
# Libtool's library version information for libintl.
|
||||
# Before making a gettext release, you must change this according to the
|
||||
# libtool documentation, section "Library interface versions".
|
||||
@@ -2128,8 +2133,11 @@ LTV_REVISION = 6
|
||||
LTV_AGE = 1
|
||||
|
||||
# How to build libintl.la and libgnuintl.la.
|
||||
+# Limit the exported symbols: Don't export glwthread* (from gnulib modules).
|
||||
OTHER_LDFLAGS = \
|
||||
- @LTLIBICONV@ @INTL_MACOSX_LIBS@ @LTLIBTHREAD@ -no-undefined \
|
||||
+ @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(INTL_WINDOWS_LIBS) @LTLIBTHREAD@ \
|
||||
+ -no-undefined \
|
||||
+ -export-symbols-regex '^([^g]|g[^l]|gl[^w]|glw[^t]|glwt[^h]|glwth[^r]|glwthr[^e]|glwthre[^a]|glwthrea[^d]).*' \
|
||||
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
||||
-rpath $(libdir)
|
||||
|
||||
diff --git a/gettext-tools/libgettextpo/Makefile.in b/gettext-tools/libgettextpo/Makefile.in
|
||||
index 59356fa1d..444ef7807 100644
|
||||
--- a/gettext-tools/libgettextpo/Makefile.in
|
||||
+++ b/gettext-tools/libgettextpo/Makefile.in
|
||||
@@ -2942,8 +2942,8 @@ config.h: $(BUILT_SOURCES)
|
||||
;; \
|
||||
esac; \
|
||||
done; \
|
||||
- } 5>&1 \
|
||||
- | sed -e 's,.* ,,' | LC_ALL=C sort | LC_ALL=C uniq \
|
||||
+ } 5>&1 1>&2 \
|
||||
+ | sed -e 's,.* ,,' | grep -v '@' | LC_ALL=C sort | LC_ALL=C uniq \
|
||||
| sed -e 's,^obstack_free$$,__obstack_free,' \
|
||||
| sed -e 's,^\(.*\)$$,#define \1 libgettextpo_\1,' > config.h-t && \
|
||||
if test -f config.h; then \
|
||||
diff --git a/gettext-tools/libgettextpo/exported.sh.in b/gettext-tools/libgettextpo/exported.sh.in
|
||||
index 2e6b89ab6..be7fb38bd 100644
|
||||
--- a/gettext-tools/libgettextpo/exported.sh.in
|
||||
+++ b/gettext-tools/libgettextpo/exported.sh.in
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
-# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
+# Copyright (C) 2006, 2009, 2019 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -20,5 +20,4 @@
|
||||
# This is a separate script because $(GLOBAL_SYMBOL_PIPE) cannot be used in a
|
||||
# Makefile, since it may contain dollar signs.
|
||||
|
||||
-nm_cmd="@NM@ $1 | @GLOBAL_SYMBOL_PIPE@"
|
||||
-eval $nm_cmd
|
||||
+@NM@ "$1" | @GLOBAL_SYMBOL_PIPE@
|
||||
diff --git a/gettext-tools/src/lang-table.h b/gettext-tools/src/lang-table.h
|
||||
index 7ac197669..ebf193b98 100644
|
||||
--- a/gettext-tools/src/lang-table.h
|
||||
+++ b/gettext-tools/src/lang-table.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Table of languages.
|
||||
- Copyright (C) 2001-2007 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2001-2007, 2019 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <haible@clisp.cons.org>, 2005.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -20,6 +20,12 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
struct language_table_entry
|
||||
{
|
||||
const char *code;
|
||||
@@ -32,4 +38,10 @@ extern const size_t language_table_size;
|
||||
extern struct language_table_entry language_variant_table[];
|
||||
extern const size_t language_variant_table_size;
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#endif /* _LANG_TABLE_H */
|
||||
diff --git a/gettext-tools/src/read-po.h b/gettext-tools/src/read-po.h
|
||||
index 6852a22a0..98fc893b2 100644
|
||||
--- a/gettext-tools/src/read-po.h
|
||||
+++ b/gettext-tools/src/read-po.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Reading PO files.
|
||||
- Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2006, 2019 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2006.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -20,7 +20,19 @@
|
||||
|
||||
#include "read-catalog-abstract.h"
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Describes a .po / .pot file parser. */
|
||||
extern DLL_VARIABLE const struct catalog_input_format input_format_po;
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#endif /* _READ_PO_H */
|
||||
diff --git a/gettext-tools/src/read-properties.h b/gettext-tools/src/read-properties.h
|
||||
index e04abe524..9c299e6c2 100644
|
||||
--- a/gettext-tools/src/read-properties.h
|
||||
+++ b/gettext-tools/src/read-properties.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Reading Java .properties files.
|
||||
- Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2003, 2006, 2019 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -20,7 +20,19 @@
|
||||
|
||||
#include "read-catalog-abstract.h"
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Describes a .properties file parser. */
|
||||
extern DLL_VARIABLE const struct catalog_input_format input_format_properties;
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#endif /* _READ_PROPERTIES_H */
|
||||
diff --git a/gettext-tools/src/read-stringtable.h b/gettext-tools/src/read-stringtable.h
|
||||
index 43d1ba505..4a107f2ff 100644
|
||||
--- a/gettext-tools/src/read-stringtable.h
|
||||
+++ b/gettext-tools/src/read-stringtable.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Reading NeXTstep/GNUstep .strings files.
|
||||
- Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2003, 2006, 2019 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -20,7 +20,19 @@
|
||||
|
||||
#include "read-catalog-abstract.h"
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Describes a .strings file parser. */
|
||||
extern DLL_VARIABLE const struct catalog_input_format input_format_stringtable;
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#endif /* _READ_STRINGTABLE_H */
|
||||
diff --git a/gettext-tools/src/write-properties.h b/gettext-tools/src/write-properties.h
|
||||
index f0d18a7e4..7671afb30 100644
|
||||
--- a/gettext-tools/src/write-properties.h
|
||||
+++ b/gettext-tools/src/write-properties.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Writing Java .properties files.
|
||||
- Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2003, 2006, 2019 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -20,7 +20,19 @@
|
||||
|
||||
#include "write-catalog.h"
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Describes a PO file in Java .properties syntax. */
|
||||
extern DLL_VARIABLE const struct catalog_output_format output_format_properties;
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#endif /* _WRITE_PROPERTIES_H */
|
||||
diff --git a/gettext-tools/src/write-stringtable.h b/gettext-tools/src/write-stringtable.h
|
||||
index 7d4981826..af0b081c8 100644
|
||||
--- a/gettext-tools/src/write-stringtable.h
|
||||
+++ b/gettext-tools/src/write-stringtable.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Writing NeXTstep/GNUstep .strings files.
|
||||
- Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2003, 2006, 2019 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -20,7 +20,19 @@
|
||||
|
||||
#include "write-catalog.h"
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Describes a PO file in .strings syntax. */
|
||||
extern DLL_VARIABLE const struct catalog_output_format output_format_stringtable;
|
||||
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#endif /* _WRITE_STRINGTABLE_H */
|
||||
diff --git a/libtextstyle/lib/Makefile.in b/libtextstyle/lib/Makefile.in
|
||||
index 4a11d73a1..ebee4845a 100644
|
||||
--- a/libtextstyle/lib/Makefile.in
|
||||
+++ b/libtextstyle/lib/Makefile.in
|
||||
@@ -4536,8 +4536,8 @@ config.h: $(BUILT_SOURCES) libtextstyle.sym
|
||||
;; \
|
||||
esac; \
|
||||
done; \
|
||||
- } 5>&1 \
|
||||
- | sed -e 's,.* ,,' | LC_ALL=C sort | LC_ALL=C uniq \
|
||||
+ } 5>&1 1>&2 \
|
||||
+ | sed -e 's,.* ,,' | grep -v '@' | LC_ALL=C sort | LC_ALL=C uniq \
|
||||
| LC_ALL=C join -v 1 - libtextstyle.sym \
|
||||
| sed -e 's,^\(.*\)$$,#define \1 libtextstyle_\1,' > config.h-t; \
|
||||
} 6>&1 && \
|
||||
--
|
||||
2.21.0.windows.1
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
From 9b2e480278d36c4d7b6f988621a3a9f699cc730f Mon Sep 17 00:00:00 2001
|
||||
From: SSE4 <tomskside@gmail.com>
|
||||
Date: Wed, 10 Jul 2019 03:55:56 -0700
|
||||
Subject: [PATCH 2/2] - memmove is intrinsic function on MSVC
|
||||
|
||||
Signed-off-by: SSE4 <tomskside@gmail.com>
|
||||
---
|
||||
gettext-runtime/gnulib-lib/memmove.c | 4 ++++
|
||||
gettext-tools/gnulib-lib/memmove.c | 4 ++++
|
||||
gettext-tools/gnulib-lib/memset.c | 4 ++++
|
||||
3 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/gettext-runtime/gnulib-lib/memmove.c b/gettext-runtime/gnulib-lib/memmove.c
|
||||
index 0f040540c..bc8883ae4 100644
|
||||
--- a/gettext-runtime/gnulib-lib/memmove.c
|
||||
+++ b/gettext-runtime/gnulib-lib/memmove.c
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
+#ifndef _MSC_VER
|
||||
+
|
||||
void *
|
||||
memmove (void *dest0, void const *source0, size_t length)
|
||||
{
|
||||
@@ -24,3 +26,5 @@ memmove (void *dest0, void const *source0, size_t length)
|
||||
}
|
||||
return dest0;
|
||||
}
|
||||
+
|
||||
+#endif
|
||||
diff --git a/gettext-tools/gnulib-lib/memmove.c b/gettext-tools/gnulib-lib/memmove.c
|
||||
index 0f040540c..bc8883ae4 100644
|
||||
--- a/gettext-tools/gnulib-lib/memmove.c
|
||||
+++ b/gettext-tools/gnulib-lib/memmove.c
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
+#ifndef _MSC_VER
|
||||
+
|
||||
void *
|
||||
memmove (void *dest0, void const *source0, size_t length)
|
||||
{
|
||||
@@ -24,3 +26,5 @@ memmove (void *dest0, void const *source0, size_t length)
|
||||
}
|
||||
return dest0;
|
||||
}
|
||||
+
|
||||
+#endif
|
||||
diff --git a/gettext-tools/gnulib-lib/memset.c b/gettext-tools/gnulib-lib/memset.c
|
||||
index 4e60124e7..b595fa966 100644
|
||||
--- a/gettext-tools/gnulib-lib/memset.c
|
||||
+++ b/gettext-tools/gnulib-lib/memset.c
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
+#ifndef _MSC_VER
|
||||
+
|
||||
void *
|
||||
memset (void *str, int c, size_t len)
|
||||
{
|
||||
@@ -27,3 +29,5 @@ memset (void *str, int c, size_t len)
|
||||
*st++ = c;
|
||||
return str;
|
||||
}
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.21.0.windows.1
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From e81ca090d69837e4f1a3c41fe2345c77b38f756a Mon Sep 17 00:00:00 2001
|
||||
From: SSE4 <tomskside@gmail.com>
|
||||
Date: Fri, 12 Jul 2019 13:11:06 +0200
|
||||
Subject: [PATCH 3/3] Reported by Gabor Z. Papp <gzp@papp.hu>.
|
||||
|
||||
This is a regression from 2018-11-25.
|
||||
|
||||
* gettext-tools/configure.ac (PRELOADABLE_LIBINTL): Set to false if
|
||||
--disable-shared was specified.
|
||||
---
|
||||
gettext-tools/configure | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gettext-tools/configure b/gettext-tools/configure
|
||||
index 5a831d6da..4be36c383 100755
|
||||
--- a/gettext-tools/configure
|
||||
+++ b/gettext-tools/configure
|
||||
@@ -23901,7 +23901,7 @@ else
|
||||
PACKAGE_IS_GETTEXT_TOOLS_FALSE=
|
||||
fi
|
||||
|
||||
- if test $USE_INCLUDED_LIBINTL = no && test $GLIBC2 = yes; then
|
||||
+ if test $USE_INCLUDED_LIBINTL = no && test $GLIBC2 = yes && test $enable_shared = yes; then
|
||||
PRELOADABLE_LIBINTL_TRUE=
|
||||
PRELOADABLE_LIBINTL_FALSE='#'
|
||||
else
|
||||
--
|
||||
2.21.0
|
||||
|
||||
7
recipes/libgettext/all/test_package/CMakeLists.txt
Normal file
7
recipes/libgettext/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(test_package C)
|
||||
|
||||
find_package(Intl CONFIG REQUIRED)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE Intl::Intl)
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-11.5-x86_64-17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
27
recipes/libgettext/all/test_package/conanfile.py
Normal file
27
recipes/libgettext/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import CMake, cmake_layout
|
||||
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
test_type = "explicit"
|
||||
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env=f"conanrun")
|
||||
8
recipes/libgettext/all/test_package/test_package.c
Normal file
8
recipes/libgettext/all/test_package/test_package.c
Normal file
@@ -0,0 +1,8 @@
|
||||
#include <stdio.h>
|
||||
#include <libintl.h>
|
||||
|
||||
int main() {
|
||||
gettext("Hello, world!");
|
||||
|
||||
return 0;
|
||||
}
|
||||
7
recipes/libgettext/config.yml
Normal file
7
recipes/libgettext/config.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
versions:
|
||||
"0.22":
|
||||
folder: all
|
||||
"0.21":
|
||||
folder: all
|
||||
"0.20.1":
|
||||
folder: all
|
||||
16
recipes/libmount/all/conandata.yml
Normal file
16
recipes/libmount/all/conandata.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
sources:
|
||||
"2.40.2":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-kernel_org/pub/linux/utils/util-linux/v2.40/util-linux-2.40.2.tar.xz"
|
||||
sha256: "d78b37a66f5922d70edf3bdfb01a6b33d34ed3c3cafd6628203b2a2b67c8e8b3"
|
||||
"2.39.2":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-kernel_org/pub/linux/utils/util-linux/v2.39/util-linux-2.39.2.tar.xz"
|
||||
sha256: "87abdfaa8e490f8be6dde976f7c80b9b5ff9f301e1b67e3899e1f05a59a1531f"
|
||||
"2.39":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-kernel_org/pub/linux/utils/util-linux/v2.39/util-linux-2.39.tar.xz"
|
||||
sha256: "32b30a336cda903182ed61feb3e9b908b762a5e66fe14e43efb88d37162075cb"
|
||||
"2.36.2":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-kernel_org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.2.tar.xz"
|
||||
sha256: "f7516ba9d8689343594356f0e5e1a5f0da34adfbc89023437735872bb5024c5f"
|
||||
"2.36":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-kernel_org/pub/linux/utils/util-linux/v2.36/util-linux-2.36.tar.xz"
|
||||
sha256: "9e4b1c67eb13b9b67feb32ae1dc0d50e08ce9e5d82e1cccd0ee771ad2fa9e0b1"
|
||||
82
recipes/libmount/all/conanfile.py
Normal file
82
recipes/libmount/all/conanfile.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from conan import ConanFile
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.tools.files import copy, get, rm, rmdir
|
||||
from conan.tools.gnu import Autotools, AutotoolsToolchain
|
||||
from conan.tools.layout import basic_layout
|
||||
import os
|
||||
|
||||
required_conan_version = ">=1.53.0"
|
||||
|
||||
|
||||
class LibmountConan(ConanFile):
|
||||
name = "libmount"
|
||||
description = (
|
||||
"The libmount library is used to parse /etc/fstab, /etc/mtab and "
|
||||
"/proc/self/mountinfo files, manage the mtab file, evaluate mount options, etc"
|
||||
)
|
||||
topics = ("mount", "linux", "util-linux")
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git"
|
||||
license = "LGPL-2.1-or-later"
|
||||
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
del self.options.fPIC
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def validate(self):
|
||||
if self.settings.os != "Linux":
|
||||
raise ConanInvalidConfiguration(f"{self.ref} only supports Linux")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
tc = AutotoolsToolchain(self)
|
||||
tc.configure_args.extend([
|
||||
"--disable-all-programs",
|
||||
"--enable-libmount",
|
||||
"--enable-libblkid",
|
||||
])
|
||||
tc.generate()
|
||||
|
||||
def build(self):
|
||||
autotools = Autotools(self)
|
||||
autotools.configure()
|
||||
autotools.make()
|
||||
|
||||
def package(self):
|
||||
copy(self, "COPYING", src=os.path.join(self.source_folder, "libmount"), dst=os.path.join(self.package_folder, "licenses"))
|
||||
copy(self, "COPYING.LGPL-2.1-or-later", src=os.path.join(self.source_folder, "Documentation", "licenses"), dst=os.path.join(self.package_folder, "licenses"))
|
||||
autotools = Autotools(self)
|
||||
autotools.install()
|
||||
rmdir(self, os.path.join(self.package_folder, "sbin"))
|
||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
||||
rmdir(self, os.path.join(self.package_folder, "usr"))
|
||||
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.components["libblkid"].libs = ["blkid"]
|
||||
self.cpp_info.components["libblkid"].set_property("pkg_config_name", "blkid")
|
||||
|
||||
self.cpp_info.components["libmount"].libs = ["mount"]
|
||||
self.cpp_info.components["libmount"].system_libs = ["rt"]
|
||||
self.cpp_info.components["libmount"].includedirs.append(os.path.join("include", "libmount"))
|
||||
self.cpp_info.components["libmount"].set_property("pkg_config_name", "mount")
|
||||
self.cpp_info.components["libmount"].requires = ["libblkid"]
|
||||
7
recipes/libmount/all/test_package/CMakeLists.txt
Normal file
7
recipes/libmount/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(test_package LANGUAGES C)
|
||||
|
||||
find_package(libmount REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libmount::libmount)
|
||||
9
recipes/libmount/all/test_package/CMakeUserPresets.json
Normal file
9
recipes/libmount/all/test_package/CMakeUserPresets.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
26
recipes/libmount/all/test_package/conanfile.py
Normal file
26
recipes/libmount/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import CMake, cmake_layout
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
|
||||
test_type = "explicit"
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
16
recipes/libmount/all/test_package/test_package.c
Normal file
16
recipes/libmount/all/test_package/test_package.c
Normal file
@@ -0,0 +1,16 @@
|
||||
#include <libmount/libmount.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
struct libmnt_context *ctx = mnt_new_context();
|
||||
if (!ctx) {
|
||||
printf("failed to initialize libmount\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
printf("path to fstab: %s", mnt_get_fstab_path());
|
||||
mnt_free_context(ctx);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
11
recipes/libmount/config.yml
Normal file
11
recipes/libmount/config.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
versions:
|
||||
"2.40.2":
|
||||
folder: all
|
||||
"2.39.2":
|
||||
folder: all
|
||||
"2.39":
|
||||
folder: all
|
||||
"2.36.2":
|
||||
folder: all
|
||||
"2.36":
|
||||
folder: all
|
||||
64
recipes/libselinux/all/conandata.yml
Normal file
64
recipes/libselinux/all/conandata.yml
Normal file
@@ -0,0 +1,64 @@
|
||||
sources:
|
||||
"3.6":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.6/libselinux-3.6.tar.gz"
|
||||
sha256: "ba4e0ef34b270e7672a5e5f1b523fe2beab3a40bb33d9389f4ad3a8728f21b52"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.6/libsepol-3.6.tar.gz"
|
||||
sha256: "c9dc585ea94903d784d597c861cd5dce6459168f95e22b31a0eab1cdd800975a"
|
||||
"3.5":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.5/libselinux-3.5.tar.gz"
|
||||
sha256: "9a3a3705ac13a2ccca2de6d652b6356fead10f36fb33115c185c5ccdf29eec19"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.5/libsepol-3.5.tar.gz"
|
||||
sha256: "78fdaf69924db780bac78546e43d9c44074bad798c2c415d0b9bb96d065ee8a2"
|
||||
"3.3":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.3/libselinux-3.3.tar.gz"
|
||||
sha256: "acfdee27633d2496508c28727c3d41d3748076f66d42fccde2e6b9f3463a7057"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.3/libsepol-3.3.tar.gz"
|
||||
sha256: "2d97df3eb8466169b389c3660acbb90c54200ac96e452eca9f41a9639f4f238b"
|
||||
"3.2":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.2/libselinux-3.2.tar.gz"
|
||||
sha256: "df758ef1d9d4811051dd901ea6b029ae334ffd7c671c128beb16bce1e25ac161"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/3.2/libsepol-3.2.tar.gz"
|
||||
sha256: "dfc7f662af8000116e56a01de6a0394ed79be1b34b999e551346233c5dd19508"
|
||||
"3.1":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/20200710/libselinux-3.1.tar.gz"
|
||||
sha256: "ea5dcbb4d859e3f999c26a13c630da2f16dff9462e3cc8cb7b458ac157d112e7"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/20200710/libsepol-3.1.tar.gz"
|
||||
sha256: "ae6778d01443fdd38cd30eeee846494e19f4d407b09872580372f4aa4bf8a3cc"
|
||||
"3.0":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/20191204/libselinux-3.0.tar.gz"
|
||||
sha256: "2ea2b30f671dae9d6b1391cbe8fb2ce5d36a3ee4fb1cd3c32f0d933c31b82433"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/20191204/libsepol-3.0.tar.gz"
|
||||
sha256: "5b7ae1881909f1048b06f7a0c364c5c8a86ec12e0ec76e740fe9595a6033eb79"
|
||||
"2.9":
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/20190315/libselinux-2.9.tar.gz"
|
||||
sha256: "1bccc8873e449587d9a2b2cf253de9b89a8291b9fbc7c59393ca9e5f5f4d2693"
|
||||
- url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/SELinuxProject/selinux/releases/download/20190315/libsepol-2.9.tar.gz"
|
||||
sha256: "a34b12b038d121e3e459b1cbaca3c9202e983137819c16baf63658390e3f1d5d"
|
||||
patches:
|
||||
"3.6":
|
||||
- patch_file: patches/0003-fix-missing-include-3.6.patch
|
||||
base_path: libselinux-3.6
|
||||
patch_description: "Fix a missing #include <stdint.h>"
|
||||
patch_type: "portability"
|
||||
- patch_file: patches/0004-libsepol-src-Makefile-fix-reallocarray-detection.patch
|
||||
patch_description: "libsepol/src/Makefile: fix reallocarray detection"
|
||||
patch_source: "https://lore.kernel.org/selinux/20240108210314.339682-1-fontaine.fabrice@gmail.com/"
|
||||
patch_type: "portability"
|
||||
base_path: libsepol-3.6
|
||||
- patch_file: patches/0005-libselinux-libsepol-Add-CFLAGS-and-LDFLAGS.patch
|
||||
patch_description: "libselinux, libsepol: Add CFLAGS and LDFLAGS to Makefile checks"
|
||||
patch_source: "https://lore.kernel.org/selinux/20240313224806.2859045-1-jwcart2@gmail.com/T/#u"
|
||||
patch_type: "portability"
|
||||
"3.3":
|
||||
- patch_file: patches/0003-fix-link-pcre.patch
|
||||
base_path: libselinux-3.3
|
||||
"3.0":
|
||||
- patch_file: patches/0001-fix-fno-common-3.0.patch
|
||||
base_path: libsepol-3.0
|
||||
- patch_file: patches/0002-remove-cil_mem_error_handler.patch
|
||||
base_path: libsepol-3.0
|
||||
"2.9":
|
||||
- patch_file: patches/0001-fix-fno-common-2.9.patch
|
||||
base_path: libsepol-2.9
|
||||
- patch_file: patches/0002-remove-cil_mem_error_handler.patch
|
||||
base_path: libsepol-2.9
|
||||
139
recipes/libselinux/all/conanfile.py
Normal file
139
recipes/libselinux/all/conanfile.py
Normal file
@@ -0,0 +1,139 @@
|
||||
import os
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
from conan.tools.build import cross_building
|
||||
from conan.tools.env import VirtualBuildEnv
|
||||
from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get, rename, replace_in_file, save
|
||||
from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.scm import Version
|
||||
|
||||
required_conan_version = ">=1.53.0"
|
||||
|
||||
|
||||
class LibSELinuxConan(ConanFile):
|
||||
name = "libselinux"
|
||||
description = (
|
||||
"Security-enhanced Linux is a patch of the Linux kernel and a number "
|
||||
"of utilities with enhanced security functionality designed to add "
|
||||
"mandatory access controls to Linux"
|
||||
)
|
||||
topics = ("linux", "selinux", "security", "security-enhanced")
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "https://github.com/SELinuxProject/selinux"
|
||||
license = (
|
||||
# https://github.com/SELinuxProject/selinux/blob/main/libselinux/LICENSE
|
||||
# For the libselinux component: public domain with a limited liability clause
|
||||
"libselinux-1.0",
|
||||
# https://github.com/SELinuxProject/selinux/blob/main/libsepol/LICENSE
|
||||
# For the libsepol component: LGPL-2.1
|
||||
"LGPL-2.1-or-later",
|
||||
)
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def configure(self):
|
||||
if self.options.shared:
|
||||
self.options.rm_safe("fPIC")
|
||||
self.settings.rm_safe("compiler.cppstd")
|
||||
self.settings.rm_safe("compiler.libcxx")
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def requirements(self):
|
||||
self.requires("pcre2/[>=10.43]")
|
||||
|
||||
def validate(self):
|
||||
if self.settings.os not in ["Linux", "FreeBSD"]:
|
||||
raise ConanInvalidConfiguration(f"{self.ref} only supports Linux")
|
||||
|
||||
def build_requirements(self):
|
||||
self.tool_requires("flex/2.6.4")
|
||||
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str):
|
||||
self.tool_requires("pkgconf/2.2.0")
|
||||
|
||||
def source(self):
|
||||
for download in self.conan_data["sources"][self.version]:
|
||||
get(self, **download)
|
||||
|
||||
@property
|
||||
def _sepol_source_folder(self):
|
||||
return os.path.join(self.source_folder, f"libsepol-{self.version}")
|
||||
|
||||
@property
|
||||
def _selinux_source_folder(self):
|
||||
return os.path.join(self.source_folder, f"libselinux-{self.version}")
|
||||
|
||||
def generate(self):
|
||||
virtual_build_env = VirtualBuildEnv(self)
|
||||
virtual_build_env.generate()
|
||||
pkg_config_deps = PkgConfigDeps(self)
|
||||
pkg_config_deps.generate()
|
||||
tc = AutotoolsToolchain(self)
|
||||
sepol_include_folder = os.path.join(self._sepol_source_folder, "include")
|
||||
tc.extra_cflags.append(f"-I{sepol_include_folder}")
|
||||
sepol_lib_folder = os.path.join(self._sepol_source_folder, "src")
|
||||
tc.extra_ldflags.append(f"-L{sepol_lib_folder}")
|
||||
tc.make_args.append("USE_PCRE2=y")
|
||||
env = tc.environment()
|
||||
if cross_building(self):
|
||||
env.append_path("PKG_CONFIG_LIBDIR", self.generators_folder)
|
||||
tc.generate(env=env)
|
||||
|
||||
def build(self):
|
||||
apply_conandata_patches(self)
|
||||
autotools = Autotools(self)
|
||||
for subdir in [self._sepol_source_folder, self._selinux_source_folder]:
|
||||
with chdir(self, subdir):
|
||||
# Build only .a or .so, not both
|
||||
replace_in_file(self, os.path.join("src", "Makefile"),
|
||||
"all: $(LIBA) $(LIBSO) $(LIBPC)",
|
||||
"all: $(LIBSO)" if self.options.shared else "all: $(LIBA)")
|
||||
# Skip utils dir by truncating its Makefile
|
||||
save(self, os.path.join("utils", "Makefile"), "all:\n")
|
||||
autotools.make()
|
||||
|
||||
def _copy_licenses(self):
|
||||
copy(self, "LICENSE", self._selinux_source_folder, os.path.join(self.package_folder, "licenses"))
|
||||
rename(self, os.path.join(self.package_folder, "licenses", "LICENSE"),
|
||||
os.path.join(self.package_folder, "licenses", "LICENSE-libselinux"))
|
||||
if Version(self.version) >= "3.5":
|
||||
copy(self, "LICENSE", self._sepol_source_folder, os.path.join(self.package_folder, "licenses"))
|
||||
rename(self, os.path.join(self.package_folder, "licenses", "LICENSE"),
|
||||
os.path.join(self.package_folder, "licenses", "LICENSE-libsepol"))
|
||||
else:
|
||||
copy(self, "COPYING", self._sepol_source_folder, os.path.join(self.package_folder, "licenses"))
|
||||
rename(self, os.path.join(self.package_folder, "licenses", "COPYING"),
|
||||
os.path.join(self.package_folder, "licenses", "LICENSE-libsepol"))
|
||||
|
||||
def package(self):
|
||||
self._copy_licenses()
|
||||
for library in [self._sepol_source_folder, self._selinux_source_folder]:
|
||||
copy(self, "*.h", os.path.join(library, "include"), os.path.join(self.package_folder, "include"))
|
||||
if self.options.shared:
|
||||
copy(self, "*.so*", library, os.path.join(self.package_folder, "lib"), keep_path=False)
|
||||
else:
|
||||
copy(self, "*.a", library, os.path.join(self.package_folder, "lib"), keep_path=False)
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.components["selinux"].set_property("pkg_config_name", "libselinux")
|
||||
self.cpp_info.components["selinux"].libs = ["selinux"]
|
||||
self.cpp_info.components["selinux"].requires = ["sepol", "pcre2::pcre2"]
|
||||
if self.options.shared:
|
||||
self.cpp_info.components["selinux"].system_libs = ["dl"]
|
||||
|
||||
self.cpp_info.components["sepol"].set_property("pkg_config_name", "libsepol")
|
||||
self.cpp_info.components["sepol"].libs = ["sepol"]
|
||||
507
recipes/libselinux/all/patches/0001-fix-fno-common-2.9.patch
Normal file
507
recipes/libselinux/all/patches/0001-fix-fno-common-2.9.patch
Normal file
@@ -0,0 +1,507 @@
|
||||
libsepol: fix CIL_KEY_* build errors with -fno-common
|
||||
|
||||
GCC 10 comes with -fno-common enabled by default - fix the CIL_KEY_*
|
||||
global variables to be defined only once in cil.c and declared in the
|
||||
header file correctly with the 'extern' keyword, so that other units
|
||||
including the file don't generate duplicate definitions.
|
||||
|
||||
see https://github.com/SELinuxProject/selinux/commit/a96e8c59ecac84096d870b42701a504791a8cc8c
|
||||
|
||||
--- a/cil/src/cil.c
|
||||
+++ b/cil/src/cil.c
|
||||
@@ -77,6 +77,167 @@ int cil_sym_sizes[CIL_SYM_ARRAY_NUM][CIL_SYM_NUM] = {
|
||||
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||
};
|
||||
|
||||
+char *CIL_KEY_CONS_T1;
|
||||
+char *CIL_KEY_CONS_T2;
|
||||
+char *CIL_KEY_CONS_T3;
|
||||
+char *CIL_KEY_CONS_R1;
|
||||
+char *CIL_KEY_CONS_R2;
|
||||
+char *CIL_KEY_CONS_R3;
|
||||
+char *CIL_KEY_CONS_U1;
|
||||
+char *CIL_KEY_CONS_U2;
|
||||
+char *CIL_KEY_CONS_U3;
|
||||
+char *CIL_KEY_CONS_L1;
|
||||
+char *CIL_KEY_CONS_L2;
|
||||
+char *CIL_KEY_CONS_H1;
|
||||
+char *CIL_KEY_CONS_H2;
|
||||
+char *CIL_KEY_AND;
|
||||
+char *CIL_KEY_OR;
|
||||
+char *CIL_KEY_NOT;
|
||||
+char *CIL_KEY_EQ;
|
||||
+char *CIL_KEY_NEQ;
|
||||
+char *CIL_KEY_CONS_DOM;
|
||||
+char *CIL_KEY_CONS_DOMBY;
|
||||
+char *CIL_KEY_CONS_INCOMP;
|
||||
+char *CIL_KEY_CONDTRUE;
|
||||
+char *CIL_KEY_CONDFALSE;
|
||||
+char *CIL_KEY_SELF;
|
||||
+char *CIL_KEY_OBJECT_R;
|
||||
+char *CIL_KEY_STAR;
|
||||
+char *CIL_KEY_TCP;
|
||||
+char *CIL_KEY_UDP;
|
||||
+char *CIL_KEY_DCCP;
|
||||
+char *CIL_KEY_SCTP;
|
||||
+char *CIL_KEY_AUDITALLOW;
|
||||
+char *CIL_KEY_TUNABLEIF;
|
||||
+char *CIL_KEY_ALLOW;
|
||||
+char *CIL_KEY_DONTAUDIT;
|
||||
+char *CIL_KEY_TYPETRANSITION;
|
||||
+char *CIL_KEY_TYPECHANGE;
|
||||
+char *CIL_KEY_CALL;
|
||||
+char *CIL_KEY_TUNABLE;
|
||||
+char *CIL_KEY_XOR;
|
||||
+char *CIL_KEY_ALL;
|
||||
+char *CIL_KEY_RANGE;
|
||||
+char *CIL_KEY_GLOB;
|
||||
+char *CIL_KEY_FILE;
|
||||
+char *CIL_KEY_DIR;
|
||||
+char *CIL_KEY_CHAR;
|
||||
+char *CIL_KEY_BLOCK;
|
||||
+char *CIL_KEY_SOCKET;
|
||||
+char *CIL_KEY_PIPE;
|
||||
+char *CIL_KEY_SYMLINK;
|
||||
+char *CIL_KEY_ANY;
|
||||
+char *CIL_KEY_XATTR;
|
||||
+char *CIL_KEY_TASK;
|
||||
+char *CIL_KEY_TRANS;
|
||||
+char *CIL_KEY_TYPE;
|
||||
+char *CIL_KEY_ROLE;
|
||||
+char *CIL_KEY_USER;
|
||||
+char *CIL_KEY_USERATTRIBUTE;
|
||||
+char *CIL_KEY_USERATTRIBUTESET;
|
||||
+char *CIL_KEY_SENSITIVITY;
|
||||
+char *CIL_KEY_CATEGORY;
|
||||
+char *CIL_KEY_CATSET;
|
||||
+char *CIL_KEY_LEVEL;
|
||||
+char *CIL_KEY_LEVELRANGE;
|
||||
+char *CIL_KEY_CLASS;
|
||||
+char *CIL_KEY_IPADDR;
|
||||
+char *CIL_KEY_MAP_CLASS;
|
||||
+char *CIL_KEY_CLASSPERMISSION;
|
||||
+char *CIL_KEY_BOOL;
|
||||
+char *CIL_KEY_STRING;
|
||||
+char *CIL_KEY_NAME;
|
||||
+char *CIL_KEY_SOURCE;
|
||||
+char *CIL_KEY_TARGET;
|
||||
+char *CIL_KEY_LOW;
|
||||
+char *CIL_KEY_HIGH;
|
||||
+char *CIL_KEY_LOW_HIGH;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN_ALLOW;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN_DENY;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN_REJECT;
|
||||
+char *CIL_KEY_MACRO;
|
||||
+char *CIL_KEY_IN;
|
||||
+char *CIL_KEY_MLS;
|
||||
+char *CIL_KEY_DEFAULTRANGE;
|
||||
+char *CIL_KEY_BLOCKINHERIT;
|
||||
+char *CIL_KEY_BLOCKABSTRACT;
|
||||
+char *CIL_KEY_CLASSORDER;
|
||||
+char *CIL_KEY_CLASSMAPPING;
|
||||
+char *CIL_KEY_CLASSPERMISSIONSET;
|
||||
+char *CIL_KEY_COMMON;
|
||||
+char *CIL_KEY_CLASSCOMMON;
|
||||
+char *CIL_KEY_SID;
|
||||
+char *CIL_KEY_SIDCONTEXT;
|
||||
+char *CIL_KEY_SIDORDER;
|
||||
+char *CIL_KEY_USERLEVEL;
|
||||
+char *CIL_KEY_USERRANGE;
|
||||
+char *CIL_KEY_USERBOUNDS;
|
||||
+char *CIL_KEY_USERPREFIX;
|
||||
+char *CIL_KEY_SELINUXUSER;
|
||||
+char *CIL_KEY_SELINUXUSERDEFAULT;
|
||||
+char *CIL_KEY_TYPEATTRIBUTE;
|
||||
+char *CIL_KEY_TYPEATTRIBUTESET;
|
||||
+char *CIL_KEY_EXPANDTYPEATTRIBUTE;
|
||||
+char *CIL_KEY_TYPEALIAS;
|
||||
+char *CIL_KEY_TYPEALIASACTUAL;
|
||||
+char *CIL_KEY_TYPEBOUNDS;
|
||||
+char *CIL_KEY_TYPEPERMISSIVE;
|
||||
+char *CIL_KEY_RANGETRANSITION;
|
||||
+char *CIL_KEY_USERROLE;
|
||||
+char *CIL_KEY_ROLETYPE;
|
||||
+char *CIL_KEY_ROLETRANSITION;
|
||||
+char *CIL_KEY_ROLEALLOW;
|
||||
+char *CIL_KEY_ROLEATTRIBUTE;
|
||||
+char *CIL_KEY_ROLEATTRIBUTESET;
|
||||
+char *CIL_KEY_ROLEBOUNDS;
|
||||
+char *CIL_KEY_BOOLEANIF;
|
||||
+char *CIL_KEY_NEVERALLOW;
|
||||
+char *CIL_KEY_TYPEMEMBER;
|
||||
+char *CIL_KEY_SENSALIAS;
|
||||
+char *CIL_KEY_SENSALIASACTUAL;
|
||||
+char *CIL_KEY_CATALIAS;
|
||||
+char *CIL_KEY_CATALIASACTUAL;
|
||||
+char *CIL_KEY_CATORDER;
|
||||
+char *CIL_KEY_SENSITIVITYORDER;
|
||||
+char *CIL_KEY_SENSCAT;
|
||||
+char *CIL_KEY_CONSTRAIN;
|
||||
+char *CIL_KEY_MLSCONSTRAIN;
|
||||
+char *CIL_KEY_VALIDATETRANS;
|
||||
+char *CIL_KEY_MLSVALIDATETRANS;
|
||||
+char *CIL_KEY_CONTEXT;
|
||||
+char *CIL_KEY_FILECON;
|
||||
+char *CIL_KEY_IBPKEYCON;
|
||||
+char *CIL_KEY_IBENDPORTCON;
|
||||
+char *CIL_KEY_PORTCON;
|
||||
+char *CIL_KEY_NODECON;
|
||||
+char *CIL_KEY_GENFSCON;
|
||||
+char *CIL_KEY_NETIFCON;
|
||||
+char *CIL_KEY_PIRQCON;
|
||||
+char *CIL_KEY_IOMEMCON;
|
||||
+char *CIL_KEY_IOPORTCON;
|
||||
+char *CIL_KEY_PCIDEVICECON;
|
||||
+char *CIL_KEY_DEVICETREECON;
|
||||
+char *CIL_KEY_FSUSE;
|
||||
+char *CIL_KEY_POLICYCAP;
|
||||
+char *CIL_KEY_OPTIONAL;
|
||||
+char *CIL_KEY_DEFAULTUSER;
|
||||
+char *CIL_KEY_DEFAULTROLE;
|
||||
+char *CIL_KEY_DEFAULTTYPE;
|
||||
+char *CIL_KEY_ROOT;
|
||||
+char *CIL_KEY_NODE;
|
||||
+char *CIL_KEY_PERM;
|
||||
+char *CIL_KEY_ALLOWX;
|
||||
+char *CIL_KEY_AUDITALLOWX;
|
||||
+char *CIL_KEY_DONTAUDITX;
|
||||
+char *CIL_KEY_NEVERALLOWX;
|
||||
+char *CIL_KEY_PERMISSIONX;
|
||||
+char *CIL_KEY_IOCTL;
|
||||
+char *CIL_KEY_UNORDERED;
|
||||
+char *CIL_KEY_SRC_INFO;
|
||||
+char *CIL_KEY_SRC_CIL;
|
||||
+char *CIL_KEY_SRC_HLL;
|
||||
+
|
||||
static void cil_init_keys(void)
|
||||
{
|
||||
/* Initialize CIL Keys into strpool */
|
||||
--- a/cil/src/cil_internal.h
|
||||
+++ b/cil/src/cil_internal.h
|
||||
@@ -74,165 +74,325 @@ enum cil_pass {
|
||||
/*
|
||||
Keywords
|
||||
*/
|
||||
+extern
|
||||
char *CIL_KEY_CONS_T1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_T2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_T3;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_R1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_R2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_R3;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_U1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_U2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_U3;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_L1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_L2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_H1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_H2;
|
||||
+extern
|
||||
char *CIL_KEY_AND;
|
||||
+extern
|
||||
char *CIL_KEY_OR;
|
||||
+extern
|
||||
char *CIL_KEY_NOT;
|
||||
+extern
|
||||
char *CIL_KEY_EQ;
|
||||
+extern
|
||||
char *CIL_KEY_NEQ;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_DOM;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_DOMBY;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_INCOMP;
|
||||
+extern
|
||||
char *CIL_KEY_CONDTRUE;
|
||||
+extern
|
||||
char *CIL_KEY_CONDFALSE;
|
||||
+extern
|
||||
char *CIL_KEY_SELF;
|
||||
+extern
|
||||
char *CIL_KEY_OBJECT_R;
|
||||
+extern
|
||||
char *CIL_KEY_STAR;
|
||||
+extern
|
||||
char *CIL_KEY_TCP;
|
||||
+extern
|
||||
char *CIL_KEY_UDP;
|
||||
+extern
|
||||
char *CIL_KEY_DCCP;
|
||||
+extern
|
||||
char *CIL_KEY_SCTP;
|
||||
+extern
|
||||
char *CIL_KEY_AUDITALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_TUNABLEIF;
|
||||
+extern
|
||||
char *CIL_KEY_ALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_DONTAUDIT;
|
||||
+extern
|
||||
char *CIL_KEY_TYPETRANSITION;
|
||||
+extern
|
||||
char *CIL_KEY_TYPECHANGE;
|
||||
+extern
|
||||
char *CIL_KEY_CALL;
|
||||
+extern
|
||||
char *CIL_KEY_TUNABLE;
|
||||
+extern
|
||||
char *CIL_KEY_XOR;
|
||||
+extern
|
||||
char *CIL_KEY_ALL;
|
||||
+extern
|
||||
char *CIL_KEY_RANGE;
|
||||
+extern
|
||||
char *CIL_KEY_GLOB;
|
||||
+extern
|
||||
char *CIL_KEY_FILE;
|
||||
+extern
|
||||
char *CIL_KEY_DIR;
|
||||
+extern
|
||||
char *CIL_KEY_CHAR;
|
||||
+extern
|
||||
char *CIL_KEY_BLOCK;
|
||||
+extern
|
||||
char *CIL_KEY_SOCKET;
|
||||
+extern
|
||||
char *CIL_KEY_PIPE;
|
||||
+extern
|
||||
char *CIL_KEY_SYMLINK;
|
||||
+extern
|
||||
char *CIL_KEY_ANY;
|
||||
+extern
|
||||
char *CIL_KEY_XATTR;
|
||||
+extern
|
||||
char *CIL_KEY_TASK;
|
||||
+extern
|
||||
char *CIL_KEY_TRANS;
|
||||
+extern
|
||||
char *CIL_KEY_TYPE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLE;
|
||||
+extern
|
||||
char *CIL_KEY_USER;
|
||||
+extern
|
||||
char *CIL_KEY_USERATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_USERATTRIBUTESET;
|
||||
+extern
|
||||
char *CIL_KEY_SENSITIVITY;
|
||||
+extern
|
||||
char *CIL_KEY_CATEGORY;
|
||||
+extern
|
||||
char *CIL_KEY_CATSET;
|
||||
+extern
|
||||
char *CIL_KEY_LEVEL;
|
||||
+extern
|
||||
char *CIL_KEY_LEVELRANGE;
|
||||
+extern
|
||||
char *CIL_KEY_CLASS;
|
||||
+extern
|
||||
char *CIL_KEY_IPADDR;
|
||||
+extern
|
||||
char *CIL_KEY_MAP_CLASS;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSPERMISSION;
|
||||
+extern
|
||||
char *CIL_KEY_BOOL;
|
||||
+extern
|
||||
char *CIL_KEY_STRING;
|
||||
+extern
|
||||
char *CIL_KEY_NAME;
|
||||
+extern
|
||||
char *CIL_KEY_SOURCE;
|
||||
+extern
|
||||
char *CIL_KEY_TARGET;
|
||||
+extern
|
||||
char *CIL_KEY_LOW;
|
||||
+extern
|
||||
char *CIL_KEY_HIGH;
|
||||
+extern
|
||||
char *CIL_KEY_LOW_HIGH;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN_ALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN_DENY;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN_REJECT;
|
||||
+extern
|
||||
char *CIL_KEY_MACRO;
|
||||
+extern
|
||||
char *CIL_KEY_IN;
|
||||
+extern
|
||||
char *CIL_KEY_MLS;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTRANGE;
|
||||
+extern
|
||||
char *CIL_KEY_BLOCKINHERIT;
|
||||
+extern
|
||||
char *CIL_KEY_BLOCKABSTRACT;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSORDER;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSMAPPING;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSPERMISSIONSET;
|
||||
+extern
|
||||
char *CIL_KEY_COMMON;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSCOMMON;
|
||||
+extern
|
||||
char *CIL_KEY_SID;
|
||||
+extern
|
||||
char *CIL_KEY_SIDCONTEXT;
|
||||
+extern
|
||||
char *CIL_KEY_SIDORDER;
|
||||
+extern
|
||||
char *CIL_KEY_USERLEVEL;
|
||||
+extern
|
||||
char *CIL_KEY_USERRANGE;
|
||||
+extern
|
||||
char *CIL_KEY_USERBOUNDS;
|
||||
+extern
|
||||
char *CIL_KEY_USERPREFIX;
|
||||
+extern
|
||||
char *CIL_KEY_SELINUXUSER;
|
||||
+extern
|
||||
char *CIL_KEY_SELINUXUSERDEFAULT;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEATTRIBUTESET;
|
||||
+extern
|
||||
char *CIL_KEY_EXPANDTYPEATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEALIAS;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEALIASACTUAL;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEBOUNDS;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEPERMISSIVE;
|
||||
+extern
|
||||
char *CIL_KEY_RANGETRANSITION;
|
||||
+extern
|
||||
char *CIL_KEY_USERROLE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLETYPE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLETRANSITION;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEATTRIBUTESET;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEBOUNDS;
|
||||
+extern
|
||||
char *CIL_KEY_BOOLEANIF;
|
||||
+extern
|
||||
char *CIL_KEY_NEVERALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEMEMBER;
|
||||
+extern
|
||||
char *CIL_KEY_SENSALIAS;
|
||||
+extern
|
||||
char *CIL_KEY_SENSALIASACTUAL;
|
||||
+extern
|
||||
char *CIL_KEY_CATALIAS;
|
||||
+extern
|
||||
char *CIL_KEY_CATALIASACTUAL;
|
||||
+extern
|
||||
char *CIL_KEY_CATORDER;
|
||||
+extern
|
||||
char *CIL_KEY_SENSITIVITYORDER;
|
||||
+extern
|
||||
char *CIL_KEY_SENSCAT;
|
||||
+extern
|
||||
char *CIL_KEY_CONSTRAIN;
|
||||
+extern
|
||||
char *CIL_KEY_MLSCONSTRAIN;
|
||||
+extern
|
||||
char *CIL_KEY_VALIDATETRANS;
|
||||
+extern
|
||||
char *CIL_KEY_MLSVALIDATETRANS;
|
||||
+extern
|
||||
char *CIL_KEY_CONTEXT;
|
||||
+extern
|
||||
char *CIL_KEY_FILECON;
|
||||
+extern
|
||||
char *CIL_KEY_IBPKEYCON;
|
||||
+extern
|
||||
char *CIL_KEY_IBENDPORTCON;
|
||||
+extern
|
||||
char *CIL_KEY_PORTCON;
|
||||
+extern
|
||||
char *CIL_KEY_NODECON;
|
||||
+extern
|
||||
char *CIL_KEY_GENFSCON;
|
||||
+extern
|
||||
char *CIL_KEY_NETIFCON;
|
||||
+extern
|
||||
char *CIL_KEY_PIRQCON;
|
||||
+extern
|
||||
char *CIL_KEY_IOMEMCON;
|
||||
+extern
|
||||
char *CIL_KEY_IOPORTCON;
|
||||
+extern
|
||||
char *CIL_KEY_PCIDEVICECON;
|
||||
+extern
|
||||
char *CIL_KEY_DEVICETREECON;
|
||||
+extern
|
||||
char *CIL_KEY_FSUSE;
|
||||
+extern
|
||||
char *CIL_KEY_POLICYCAP;
|
||||
+extern
|
||||
char *CIL_KEY_OPTIONAL;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTUSER;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTROLE;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTTYPE;
|
||||
+extern
|
||||
char *CIL_KEY_ROOT;
|
||||
+extern
|
||||
char *CIL_KEY_NODE;
|
||||
+extern
|
||||
char *CIL_KEY_PERM;
|
||||
+extern
|
||||
char *CIL_KEY_ALLOWX;
|
||||
+extern
|
||||
char *CIL_KEY_AUDITALLOWX;
|
||||
+extern
|
||||
char *CIL_KEY_DONTAUDITX;
|
||||
+extern
|
||||
char *CIL_KEY_NEVERALLOWX;
|
||||
+extern
|
||||
char *CIL_KEY_PERMISSIONX;
|
||||
+extern
|
||||
char *CIL_KEY_IOCTL;
|
||||
+extern
|
||||
char *CIL_KEY_UNORDERED;
|
||||
+extern
|
||||
char *CIL_KEY_SRC_INFO;
|
||||
+extern
|
||||
char *CIL_KEY_SRC_CIL;
|
||||
+extern
|
||||
char *CIL_KEY_SRC_HLL;
|
||||
|
||||
/*
|
||||
510
recipes/libselinux/all/patches/0001-fix-fno-common-3.0.patch
Normal file
510
recipes/libselinux/all/patches/0001-fix-fno-common-3.0.patch
Normal file
@@ -0,0 +1,510 @@
|
||||
libsepol: fix CIL_KEY_* build errors with -fno-common
|
||||
|
||||
GCC 10 comes with -fno-common enabled by default - fix the CIL_KEY_*
|
||||
global variables to be defined only once in cil.c and declared in the
|
||||
header file correctly with the 'extern' keyword, so that other units
|
||||
including the file don't generate duplicate definitions.
|
||||
|
||||
see https://github.com/SELinuxProject/selinux/commit/a96e8c59ecac84096d870b42701a504791a8cc8c
|
||||
|
||||
--- a/cil/src/cil.c
|
||||
+++ b/cil/src/cil.c
|
||||
@@ -77,6 +77,168 @@ int cil_sym_sizes[CIL_SYM_ARRAY_NUM][CIL_SYM_NUM] = {
|
||||
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||
};
|
||||
|
||||
+char *CIL_KEY_CONS_T1;
|
||||
+char *CIL_KEY_CONS_T2;
|
||||
+char *CIL_KEY_CONS_T3;
|
||||
+char *CIL_KEY_CONS_R1;
|
||||
+char *CIL_KEY_CONS_R2;
|
||||
+char *CIL_KEY_CONS_R3;
|
||||
+char *CIL_KEY_CONS_U1;
|
||||
+char *CIL_KEY_CONS_U2;
|
||||
+char *CIL_KEY_CONS_U3;
|
||||
+char *CIL_KEY_CONS_L1;
|
||||
+char *CIL_KEY_CONS_L2;
|
||||
+char *CIL_KEY_CONS_H1;
|
||||
+char *CIL_KEY_CONS_H2;
|
||||
+char *CIL_KEY_AND;
|
||||
+char *CIL_KEY_OR;
|
||||
+char *CIL_KEY_NOT;
|
||||
+char *CIL_KEY_EQ;
|
||||
+char *CIL_KEY_NEQ;
|
||||
+char *CIL_KEY_CONS_DOM;
|
||||
+char *CIL_KEY_CONS_DOMBY;
|
||||
+char *CIL_KEY_CONS_INCOMP;
|
||||
+char *CIL_KEY_CONDTRUE;
|
||||
+char *CIL_KEY_CONDFALSE;
|
||||
+char *CIL_KEY_SELF;
|
||||
+char *CIL_KEY_OBJECT_R;
|
||||
+char *CIL_KEY_STAR;
|
||||
+char *CIL_KEY_TCP;
|
||||
+char *CIL_KEY_UDP;
|
||||
+char *CIL_KEY_DCCP;
|
||||
+char *CIL_KEY_SCTP;
|
||||
+char *CIL_KEY_AUDITALLOW;
|
||||
+char *CIL_KEY_TUNABLEIF;
|
||||
+char *CIL_KEY_ALLOW;
|
||||
+char *CIL_KEY_DONTAUDIT;
|
||||
+char *CIL_KEY_TYPETRANSITION;
|
||||
+char *CIL_KEY_TYPECHANGE;
|
||||
+char *CIL_KEY_CALL;
|
||||
+char *CIL_KEY_TUNABLE;
|
||||
+char *CIL_KEY_XOR;
|
||||
+char *CIL_KEY_ALL;
|
||||
+char *CIL_KEY_RANGE;
|
||||
+char *CIL_KEY_GLOB;
|
||||
+char *CIL_KEY_FILE;
|
||||
+char *CIL_KEY_DIR;
|
||||
+char *CIL_KEY_CHAR;
|
||||
+char *CIL_KEY_BLOCK;
|
||||
+char *CIL_KEY_SOCKET;
|
||||
+char *CIL_KEY_PIPE;
|
||||
+char *CIL_KEY_SYMLINK;
|
||||
+char *CIL_KEY_ANY;
|
||||
+char *CIL_KEY_XATTR;
|
||||
+char *CIL_KEY_TASK;
|
||||
+char *CIL_KEY_TRANS;
|
||||
+char *CIL_KEY_TYPE;
|
||||
+char *CIL_KEY_ROLE;
|
||||
+char *CIL_KEY_USER;
|
||||
+char *CIL_KEY_USERATTRIBUTE;
|
||||
+char *CIL_KEY_USERATTRIBUTESET;
|
||||
+char *CIL_KEY_SENSITIVITY;
|
||||
+char *CIL_KEY_CATEGORY;
|
||||
+char *CIL_KEY_CATSET;
|
||||
+char *CIL_KEY_LEVEL;
|
||||
+char *CIL_KEY_LEVELRANGE;
|
||||
+char *CIL_KEY_CLASS;
|
||||
+char *CIL_KEY_IPADDR;
|
||||
+char *CIL_KEY_MAP_CLASS;
|
||||
+char *CIL_KEY_CLASSPERMISSION;
|
||||
+char *CIL_KEY_BOOL;
|
||||
+char *CIL_KEY_STRING;
|
||||
+char *CIL_KEY_NAME;
|
||||
+char *CIL_KEY_SOURCE;
|
||||
+char *CIL_KEY_TARGET;
|
||||
+char *CIL_KEY_LOW;
|
||||
+char *CIL_KEY_HIGH;
|
||||
+char *CIL_KEY_LOW_HIGH;
|
||||
+char *CIL_KEY_GLBLUB;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN_ALLOW;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN_DENY;
|
||||
+char *CIL_KEY_HANDLEUNKNOWN_REJECT;
|
||||
+char *CIL_KEY_MACRO;
|
||||
+char *CIL_KEY_IN;
|
||||
+char *CIL_KEY_MLS;
|
||||
+char *CIL_KEY_DEFAULTRANGE;
|
||||
+char *CIL_KEY_BLOCKINHERIT;
|
||||
+char *CIL_KEY_BLOCKABSTRACT;
|
||||
+char *CIL_KEY_CLASSORDER;
|
||||
+char *CIL_KEY_CLASSMAPPING;
|
||||
+char *CIL_KEY_CLASSPERMISSIONSET;
|
||||
+char *CIL_KEY_COMMON;
|
||||
+char *CIL_KEY_CLASSCOMMON;
|
||||
+char *CIL_KEY_SID;
|
||||
+char *CIL_KEY_SIDCONTEXT;
|
||||
+char *CIL_KEY_SIDORDER;
|
||||
+char *CIL_KEY_USERLEVEL;
|
||||
+char *CIL_KEY_USERRANGE;
|
||||
+char *CIL_KEY_USERBOUNDS;
|
||||
+char *CIL_KEY_USERPREFIX;
|
||||
+char *CIL_KEY_SELINUXUSER;
|
||||
+char *CIL_KEY_SELINUXUSERDEFAULT;
|
||||
+char *CIL_KEY_TYPEATTRIBUTE;
|
||||
+char *CIL_KEY_TYPEATTRIBUTESET;
|
||||
+char *CIL_KEY_EXPANDTYPEATTRIBUTE;
|
||||
+char *CIL_KEY_TYPEALIAS;
|
||||
+char *CIL_KEY_TYPEALIASACTUAL;
|
||||
+char *CIL_KEY_TYPEBOUNDS;
|
||||
+char *CIL_KEY_TYPEPERMISSIVE;
|
||||
+char *CIL_KEY_RANGETRANSITION;
|
||||
+char *CIL_KEY_USERROLE;
|
||||
+char *CIL_KEY_ROLETYPE;
|
||||
+char *CIL_KEY_ROLETRANSITION;
|
||||
+char *CIL_KEY_ROLEALLOW;
|
||||
+char *CIL_KEY_ROLEATTRIBUTE;
|
||||
+char *CIL_KEY_ROLEATTRIBUTESET;
|
||||
+char *CIL_KEY_ROLEBOUNDS;
|
||||
+char *CIL_KEY_BOOLEANIF;
|
||||
+char *CIL_KEY_NEVERALLOW;
|
||||
+char *CIL_KEY_TYPEMEMBER;
|
||||
+char *CIL_KEY_SENSALIAS;
|
||||
+char *CIL_KEY_SENSALIASACTUAL;
|
||||
+char *CIL_KEY_CATALIAS;
|
||||
+char *CIL_KEY_CATALIASACTUAL;
|
||||
+char *CIL_KEY_CATORDER;
|
||||
+char *CIL_KEY_SENSITIVITYORDER;
|
||||
+char *CIL_KEY_SENSCAT;
|
||||
+char *CIL_KEY_CONSTRAIN;
|
||||
+char *CIL_KEY_MLSCONSTRAIN;
|
||||
+char *CIL_KEY_VALIDATETRANS;
|
||||
+char *CIL_KEY_MLSVALIDATETRANS;
|
||||
+char *CIL_KEY_CONTEXT;
|
||||
+char *CIL_KEY_FILECON;
|
||||
+char *CIL_KEY_IBPKEYCON;
|
||||
+char *CIL_KEY_IBENDPORTCON;
|
||||
+char *CIL_KEY_PORTCON;
|
||||
+char *CIL_KEY_NODECON;
|
||||
+char *CIL_KEY_GENFSCON;
|
||||
+char *CIL_KEY_NETIFCON;
|
||||
+char *CIL_KEY_PIRQCON;
|
||||
+char *CIL_KEY_IOMEMCON;
|
||||
+char *CIL_KEY_IOPORTCON;
|
||||
+char *CIL_KEY_PCIDEVICECON;
|
||||
+char *CIL_KEY_DEVICETREECON;
|
||||
+char *CIL_KEY_FSUSE;
|
||||
+char *CIL_KEY_POLICYCAP;
|
||||
+char *CIL_KEY_OPTIONAL;
|
||||
+char *CIL_KEY_DEFAULTUSER;
|
||||
+char *CIL_KEY_DEFAULTROLE;
|
||||
+char *CIL_KEY_DEFAULTTYPE;
|
||||
+char *CIL_KEY_ROOT;
|
||||
+char *CIL_KEY_NODE;
|
||||
+char *CIL_KEY_PERM;
|
||||
+char *CIL_KEY_ALLOWX;
|
||||
+char *CIL_KEY_AUDITALLOWX;
|
||||
+char *CIL_KEY_DONTAUDITX;
|
||||
+char *CIL_KEY_NEVERALLOWX;
|
||||
+char *CIL_KEY_PERMISSIONX;
|
||||
+char *CIL_KEY_IOCTL;
|
||||
+char *CIL_KEY_UNORDERED;
|
||||
+char *CIL_KEY_SRC_INFO;
|
||||
+char *CIL_KEY_SRC_CIL;
|
||||
+char *CIL_KEY_SRC_HLL;
|
||||
+
|
||||
static void cil_init_keys(void)
|
||||
{
|
||||
/* Initialize CIL Keys into strpool */
|
||||
--- a/cil/src/cil_internal.h
|
||||
+++ b/cil/src/cil_internal.h
|
||||
@@ -74,166 +74,327 @@ enum cil_pass {
|
||||
/*
|
||||
Keywords
|
||||
*/
|
||||
+extern
|
||||
char *CIL_KEY_CONS_T1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_T2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_T3;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_R1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_R2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_R3;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_U1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_U2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_U3;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_L1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_L2;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_H1;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_H2;
|
||||
+extern
|
||||
char *CIL_KEY_AND;
|
||||
+extern
|
||||
char *CIL_KEY_OR;
|
||||
+extern
|
||||
char *CIL_KEY_NOT;
|
||||
+extern
|
||||
char *CIL_KEY_EQ;
|
||||
+extern
|
||||
char *CIL_KEY_NEQ;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_DOM;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_DOMBY;
|
||||
+extern
|
||||
char *CIL_KEY_CONS_INCOMP;
|
||||
+extern
|
||||
char *CIL_KEY_CONDTRUE;
|
||||
+extern
|
||||
char *CIL_KEY_CONDFALSE;
|
||||
+extern
|
||||
char *CIL_KEY_SELF;
|
||||
+extern
|
||||
char *CIL_KEY_OBJECT_R;
|
||||
+extern
|
||||
char *CIL_KEY_STAR;
|
||||
+extern
|
||||
char *CIL_KEY_TCP;
|
||||
+extern
|
||||
char *CIL_KEY_UDP;
|
||||
+extern
|
||||
char *CIL_KEY_DCCP;
|
||||
+extern
|
||||
char *CIL_KEY_SCTP;
|
||||
+extern
|
||||
char *CIL_KEY_AUDITALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_TUNABLEIF;
|
||||
+extern
|
||||
char *CIL_KEY_ALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_DONTAUDIT;
|
||||
+extern
|
||||
char *CIL_KEY_TYPETRANSITION;
|
||||
+extern
|
||||
char *CIL_KEY_TYPECHANGE;
|
||||
+extern
|
||||
char *CIL_KEY_CALL;
|
||||
+extern
|
||||
char *CIL_KEY_TUNABLE;
|
||||
+extern
|
||||
char *CIL_KEY_XOR;
|
||||
+extern
|
||||
char *CIL_KEY_ALL;
|
||||
+extern
|
||||
char *CIL_KEY_RANGE;
|
||||
+extern
|
||||
char *CIL_KEY_GLOB;
|
||||
+extern
|
||||
char *CIL_KEY_FILE;
|
||||
+extern
|
||||
char *CIL_KEY_DIR;
|
||||
+extern
|
||||
char *CIL_KEY_CHAR;
|
||||
+extern
|
||||
char *CIL_KEY_BLOCK;
|
||||
+extern
|
||||
char *CIL_KEY_SOCKET;
|
||||
+extern
|
||||
char *CIL_KEY_PIPE;
|
||||
+extern
|
||||
char *CIL_KEY_SYMLINK;
|
||||
+extern
|
||||
char *CIL_KEY_ANY;
|
||||
+extern
|
||||
char *CIL_KEY_XATTR;
|
||||
+extern
|
||||
char *CIL_KEY_TASK;
|
||||
+extern
|
||||
char *CIL_KEY_TRANS;
|
||||
+extern
|
||||
char *CIL_KEY_TYPE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLE;
|
||||
+extern
|
||||
char *CIL_KEY_USER;
|
||||
+extern
|
||||
char *CIL_KEY_USERATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_USERATTRIBUTESET;
|
||||
+extern
|
||||
char *CIL_KEY_SENSITIVITY;
|
||||
+extern
|
||||
char *CIL_KEY_CATEGORY;
|
||||
+extern
|
||||
char *CIL_KEY_CATSET;
|
||||
+extern
|
||||
char *CIL_KEY_LEVEL;
|
||||
+extern
|
||||
char *CIL_KEY_LEVELRANGE;
|
||||
+extern
|
||||
char *CIL_KEY_CLASS;
|
||||
+extern
|
||||
char *CIL_KEY_IPADDR;
|
||||
+extern
|
||||
char *CIL_KEY_MAP_CLASS;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSPERMISSION;
|
||||
+extern
|
||||
char *CIL_KEY_BOOL;
|
||||
+extern
|
||||
char *CIL_KEY_STRING;
|
||||
+extern
|
||||
char *CIL_KEY_NAME;
|
||||
+extern
|
||||
char *CIL_KEY_SOURCE;
|
||||
+extern
|
||||
char *CIL_KEY_TARGET;
|
||||
+extern
|
||||
char *CIL_KEY_LOW;
|
||||
+extern
|
||||
char *CIL_KEY_HIGH;
|
||||
+extern
|
||||
char *CIL_KEY_LOW_HIGH;
|
||||
+extern
|
||||
char *CIL_KEY_GLBLUB;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN_ALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN_DENY;
|
||||
+extern
|
||||
char *CIL_KEY_HANDLEUNKNOWN_REJECT;
|
||||
+extern
|
||||
char *CIL_KEY_MACRO;
|
||||
+extern
|
||||
char *CIL_KEY_IN;
|
||||
+extern
|
||||
char *CIL_KEY_MLS;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTRANGE;
|
||||
+extern
|
||||
char *CIL_KEY_BLOCKINHERIT;
|
||||
+extern
|
||||
char *CIL_KEY_BLOCKABSTRACT;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSORDER;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSMAPPING;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSPERMISSIONSET;
|
||||
+extern
|
||||
char *CIL_KEY_COMMON;
|
||||
+extern
|
||||
char *CIL_KEY_CLASSCOMMON;
|
||||
+extern
|
||||
char *CIL_KEY_SID;
|
||||
+extern
|
||||
char *CIL_KEY_SIDCONTEXT;
|
||||
+extern
|
||||
char *CIL_KEY_SIDORDER;
|
||||
+extern
|
||||
char *CIL_KEY_USERLEVEL;
|
||||
+extern
|
||||
char *CIL_KEY_USERRANGE;
|
||||
+extern
|
||||
char *CIL_KEY_USERBOUNDS;
|
||||
+extern
|
||||
char *CIL_KEY_USERPREFIX;
|
||||
+extern
|
||||
char *CIL_KEY_SELINUXUSER;
|
||||
+extern
|
||||
char *CIL_KEY_SELINUXUSERDEFAULT;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEATTRIBUTESET;
|
||||
+extern
|
||||
char *CIL_KEY_EXPANDTYPEATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEALIAS;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEALIASACTUAL;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEBOUNDS;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEPERMISSIVE;
|
||||
+extern
|
||||
char *CIL_KEY_RANGETRANSITION;
|
||||
+extern
|
||||
char *CIL_KEY_USERROLE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLETYPE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLETRANSITION;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEATTRIBUTE;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEATTRIBUTESET;
|
||||
+extern
|
||||
char *CIL_KEY_ROLEBOUNDS;
|
||||
+extern
|
||||
char *CIL_KEY_BOOLEANIF;
|
||||
+extern
|
||||
char *CIL_KEY_NEVERALLOW;
|
||||
+extern
|
||||
char *CIL_KEY_TYPEMEMBER;
|
||||
+extern
|
||||
char *CIL_KEY_SENSALIAS;
|
||||
+extern
|
||||
char *CIL_KEY_SENSALIASACTUAL;
|
||||
+extern
|
||||
char *CIL_KEY_CATALIAS;
|
||||
+extern
|
||||
char *CIL_KEY_CATALIASACTUAL;
|
||||
+extern
|
||||
char *CIL_KEY_CATORDER;
|
||||
+extern
|
||||
char *CIL_KEY_SENSITIVITYORDER;
|
||||
+extern
|
||||
char *CIL_KEY_SENSCAT;
|
||||
+extern
|
||||
char *CIL_KEY_CONSTRAIN;
|
||||
+extern
|
||||
char *CIL_KEY_MLSCONSTRAIN;
|
||||
+extern
|
||||
char *CIL_KEY_VALIDATETRANS;
|
||||
+extern
|
||||
char *CIL_KEY_MLSVALIDATETRANS;
|
||||
+extern
|
||||
char *CIL_KEY_CONTEXT;
|
||||
+extern
|
||||
char *CIL_KEY_FILECON;
|
||||
+extern
|
||||
char *CIL_KEY_IBPKEYCON;
|
||||
+extern
|
||||
char *CIL_KEY_IBENDPORTCON;
|
||||
+extern
|
||||
char *CIL_KEY_PORTCON;
|
||||
+extern
|
||||
char *CIL_KEY_NODECON;
|
||||
+extern
|
||||
char *CIL_KEY_GENFSCON;
|
||||
+extern
|
||||
char *CIL_KEY_NETIFCON;
|
||||
+extern
|
||||
char *CIL_KEY_PIRQCON;
|
||||
+extern
|
||||
char *CIL_KEY_IOMEMCON;
|
||||
+extern
|
||||
char *CIL_KEY_IOPORTCON;
|
||||
+extern
|
||||
char *CIL_KEY_PCIDEVICECON;
|
||||
+extern
|
||||
char *CIL_KEY_DEVICETREECON;
|
||||
+extern
|
||||
char *CIL_KEY_FSUSE;
|
||||
+extern
|
||||
char *CIL_KEY_POLICYCAP;
|
||||
+extern
|
||||
char *CIL_KEY_OPTIONAL;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTUSER;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTROLE;
|
||||
+extern
|
||||
char *CIL_KEY_DEFAULTTYPE;
|
||||
+extern
|
||||
char *CIL_KEY_ROOT;
|
||||
+extern
|
||||
char *CIL_KEY_NODE;
|
||||
+extern
|
||||
char *CIL_KEY_PERM;
|
||||
+extern
|
||||
char *CIL_KEY_ALLOWX;
|
||||
+extern
|
||||
char *CIL_KEY_AUDITALLOWX;
|
||||
+extern
|
||||
char *CIL_KEY_DONTAUDITX;
|
||||
+extern
|
||||
char *CIL_KEY_NEVERALLOWX;
|
||||
+extern
|
||||
char *CIL_KEY_PERMISSIONX;
|
||||
+extern
|
||||
char *CIL_KEY_IOCTL;
|
||||
+extern
|
||||
char *CIL_KEY_UNORDERED;
|
||||
+extern
|
||||
char *CIL_KEY_SRC_INFO;
|
||||
+extern
|
||||
char *CIL_KEY_SRC_CIL;
|
||||
+extern
|
||||
char *CIL_KEY_SRC_HLL;
|
||||
|
||||
/*
|
||||
@@ -0,0 +1,45 @@
|
||||
libsepol: remove leftovers of cil_mem_error_handler
|
||||
|
||||
Commit 4459d63 ("libsepol: Remove cil_mem_error_handler() function
|
||||
pointer") replaced cil_mem_error_handler usage with inline contents of
|
||||
the default handler. However, it left over the header declaration and
|
||||
two callers. Convert these as well and remove the header declaration.
|
||||
|
||||
This also fixes a build failure with -fno-common.
|
||||
|
||||
see https://github.com/SELinuxProject/selinux/commit/3d32fc24d6aff360a538c63dad08ca5c957551b0
|
||||
|
||||
--- a/cil/src/cil_mem.h
|
||||
+++ b/cil/src/cil_mem.h
|
||||
@@ -36,7 +36,6 @@ void *cil_calloc(size_t num_elements, size_t element_size);
|
||||
void *cil_realloc(void *ptr, size_t size);
|
||||
char *cil_strdup(const char *str);
|
||||
int cil_asprintf(char **strp, const char *fmt, ...);
|
||||
-void (*cil_mem_error_handler)(void);
|
||||
|
||||
#endif /* CIL_MEM_H_ */
|
||||
|
||||
--- a/cil/src/cil_strpool.c
|
||||
+++ b/cil/src/cil_strpool.c
|
||||
@@ -80,8 +80,8 @@ char *cil_strpool_add(const char *str)
|
||||
int rc = hashtab_insert(cil_strpool_tab, (hashtab_key_t)strpool_ref->str, strpool_ref);
|
||||
if (rc != SEPOL_OK) {
|
||||
pthread_mutex_unlock(&cil_strpool_mutex);
|
||||
- (*cil_mem_error_handler)();
|
||||
- pthread_mutex_lock(&cil_strpool_mutex);
|
||||
+ cil_log(CIL_ERR, "Failed to allocate memory\n");
|
||||
+ exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,8 +104,8 @@ void cil_strpool_init(void)
|
||||
cil_strpool_tab = hashtab_create(cil_strpool_hash, cil_strpool_compare, CIL_STRPOOL_TABLE_SIZE);
|
||||
if (cil_strpool_tab == NULL) {
|
||||
pthread_mutex_unlock(&cil_strpool_mutex);
|
||||
- (*cil_mem_error_handler)();
|
||||
- return;
|
||||
+ cil_log(CIL_ERR, "Failed to allocate memory\n");
|
||||
+ exit(1);
|
||||
}
|
||||
}
|
||||
cil_strpool_readers++;
|
||||
11
recipes/libselinux/all/patches/0003-fix-link-pcre.patch
Normal file
11
recipes/libselinux/all/patches/0003-fix-link-pcre.patch
Normal file
@@ -0,0 +1,11 @@
|
||||
--- a/utils/Makefile
|
||||
+++ b/utils/Makefile
|
||||
@@ -43,7 +43,7 @@ endif
|
||||
|
||||
override CFLAGS += -I../include -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS)
|
||||
override LDFLAGS += -L../src
|
||||
-override LDLIBS += -lselinux $(FTS_LDLIBS)
|
||||
+override LDLIBS += -lselinux $(FTS_LDLIBS) $(PCRE_LDLIBS)
|
||||
PCRE_LDLIBS ?= -lpcre
|
||||
|
||||
ifeq ($(ANDROID_HOST),y)
|
||||
@@ -0,0 +1,10 @@
|
||||
--- src/selinux_internal.c
|
||||
+++ src/selinux_internal.c
|
||||
@@ -1,6 +5,7 @@
|
||||
#include "selinux_internal.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
+#include <stdint.h>
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From a520f972bce9ec267f4e76b729bc3b7c1bdf13e6 Mon Sep 17 00:00:00 2001
|
||||
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
Date: Mon, 8 Jan 2024 22:03:14 +0100
|
||||
Subject: [PATCH 1/3] libsepol/src/Makefile: fix reallocarray detection
|
||||
|
||||
Pass LDFLAGS when checking for reallocarray to avoid the following
|
||||
static build failure with musl raised since version 3.4 and
|
||||
https://github.com/SELinuxProject/selinux/commit/f0a5f6e33084bd83d409bb7c932256139f471e71
|
||||
because -static is not passed when checking for reallocarray:
|
||||
|
||||
/home/autobuild/autobuild/instance-9/output-1/host/bin/armeb-buildroot-linux-musleabi-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O0 -g0 -static -I. -I../include -D_GNU_SOURCE -I../cil/include -fPIC -c -o assertion.o assertion.c
|
||||
In file included from assertion.c:28:
|
||||
private.h:88:21: error: static declaration of 'reallocarray' follows non-static declaration
|
||||
88 | static inline void* reallocarray(void *ptr, size_t nmemb, size_t size) {
|
||||
| ^~~~~~~~~~~~
|
||||
In file included from ../include/sepol/policydb/mls_types.h:35,
|
||||
from ../include/sepol/policydb/context.h:23,
|
||||
from ../include/sepol/policydb/policydb.h:62,
|
||||
from assertion.c:24:
|
||||
/home/autobuild/autobuild/instance-9/output-1/host/armeb-buildroot-linux-musleabi/sysroot/usr/include/stdlib.h:150:7: note: previous declaration of 'reallocarray' with type 'void *(void *, size_t, size_t)' {aka 'void *(void *, unsigned int, unsigned int)'}
|
||||
150 | void *reallocarray (void *, size_t, size_t);
|
||||
| ^~~~~~~~~~~~
|
||||
|
||||
Fixes:
|
||||
- http://autobuild.buildroot.org/results/0170032548a38e2c991d62dc5823808458ad03b3
|
||||
|
||||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
Acked-by: James Carter <jwcart2@gmail.com>
|
||||
---
|
||||
src/Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/Makefile b/src/Makefile
|
||||
index d80a941f..16b9bd5e 100644
|
||||
--- a/src/Makefile
|
||||
+++ b/src/Makefile
|
||||
@@ -31,7 +31,7 @@ endif
|
||||
|
||||
# check for reallocarray(3) availability
|
||||
H := \#
|
||||
-ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
+ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
override CFLAGS += -DHAVE_REALLOCARRAY
|
||||
endif
|
||||
|
||||
--
|
||||
2.44.0
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
[PATCH] libselinux, libsepol: Add CFLAGS and LDFLAGS to Makefile checks
|
||||
@ 2024-03-13 22:48 James Carter
|
||||
0 siblings, 0 replies; only message in thread
|
||||
From: James Carter @ 2024-03-13 22:48 UTC (permalink / raw)
|
||||
To: selinux; +Cc: jordan, winfried_mb2, James Carter
|
||||
|
||||
In libselinux there is an availability check for strlcpy() and
|
||||
in both libselinux and libsepol there are availability checks for
|
||||
reallocarray() in the src Makfiles. CFLAGS and LDFLAGS are needed
|
||||
for cross-compiling, but, unfortunately, the default CFLAGS cause
|
||||
all of these availability checks to fail to compile because of
|
||||
compilationerrors (rather than just the function not being available).
|
||||
|
||||
Add CFLAGS and LDFLAGS to the availibility checks, update the checks
|
||||
so that a compilation error will only happen if the function being
|
||||
checked for is not available, and make checks for the same function
|
||||
the same in both libselinux and libsepol.
|
||||
|
||||
Suggested-by: Jordan Williams <jordan@jwillikers.com>
|
||||
Suggested-by: Winfried Dobbe <winfried_mb2@xmsnet.nl>
|
||||
Signed-off-by: James Carter <jwcart2@gmail.com>
|
||||
---
|
||||
libselinux/src/Makefile | 4 ++--
|
||||
libsepol/src/Makefile | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libselinux-3.6/src/Makefile b/libselinux-3.6/src/Makefile
|
||||
index d3b981fc..41cfbdca 100644
|
||||
--- a/libselinux-3.6/src/Makefile
|
||||
+++ b/libselinux-3.6/src/Makefile
|
||||
@@ -104,13 +104,13 @@ override CFLAGS += -I../include -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS)
|
||||
|
||||
# check for strlcpy(3) availability
|
||||
H := \#
|
||||
-ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char*d,*s;strlcpy(d, s, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
+ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char d[2];const char *s="a";return (size_t)strlcpy(d,s,sizeof(d))>=sizeof(d);}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
override CFLAGS += -DHAVE_STRLCPY
|
||||
endif
|
||||
|
||||
# check for reallocarray(3) availability
|
||||
H := \#
|
||||
-ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){reallocarray(NULL, 0, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
+ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
override CFLAGS += -DHAVE_REALLOCARRAY
|
||||
endif
|
||||
|
||||
diff --git a/libsepol-3.6/src/Makefile b/libsepol-3.6/src/Makefile
|
||||
index 16b9bd5e..7b0e8446 100644
|
||||
--- a/libsepol-3.6/src/Makefile
|
||||
+++ b/libsepol-3.6/src/Makefile
|
||||
@@ -31,7 +31,7 @@ endif
|
||||
|
||||
# check for reallocarray(3) availability
|
||||
H := \#
|
||||
-ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
+ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes))
|
||||
override CFLAGS += -DHAVE_REALLOCARRAY
|
||||
endif
|
||||
|
||||
--
|
||||
2.44.0
|
||||
7
recipes/libselinux/all/test_package/CMakeLists.txt
Normal file
7
recipes/libselinux/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(test_package LANGUAGES C)
|
||||
|
||||
find_package(libselinux REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libselinux::libselinux)
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": 4,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"include": [
|
||||
"build/gcc-12-x86_64-gnu17-release/generators/CMakePresets.json"
|
||||
]
|
||||
}
|
||||
26
recipes/libselinux/all/test_package/conanfile.py
Normal file
26
recipes/libselinux/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import cmake_layout, CMake
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
|
||||
test_type = "explicit"
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
11
recipes/libselinux/all/test_package/test_package.c
Normal file
11
recipes/libselinux/all/test_package/test_package.c
Normal file
@@ -0,0 +1,11 @@
|
||||
#include <stdio.h>
|
||||
#include <selinux/selinux.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
if (is_selinux_enabled())
|
||||
printf("SELinux is enabled\n");
|
||||
else
|
||||
printf("SELinux is not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
15
recipes/libselinux/config.yml
Normal file
15
recipes/libselinux/config.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
versions:
|
||||
"3.6":
|
||||
folder: all
|
||||
"3.5":
|
||||
folder: all
|
||||
"3.3":
|
||||
folder: all
|
||||
"3.2":
|
||||
folder: all
|
||||
"3.1":
|
||||
folder: all
|
||||
"3.0":
|
||||
folder: all
|
||||
"2.9":
|
||||
folder: all
|
||||
23
recipes/m4/all/conandata.yml
Normal file
23
recipes/m4/all/conandata.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
sources:
|
||||
"1.4.19":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-ftp_gnu_org/gnu/m4/m4-1.4.19.tar.xz"
|
||||
sha256: "63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96"
|
||||
"1.4.18":
|
||||
url: "https://nexus.avroid.tech/repository/all-raw-proxy-ftp_gnu_org/gnu/m4/m4-1.4.18.tar.xz"
|
||||
sha256: "f2c1e86ca0a404ff281631bdc8377638992744b175afb806e25871a24a934e07"
|
||||
patches:
|
||||
"1.4.19":
|
||||
- patch_file: "patches/1.4.19-0001-open-files-in-binary-mode.patch"
|
||||
- patch_file: "patches/1.4.19-0002-ar-lib.patch"
|
||||
- patch_file: "patches/1.4.19-0003-msvc-debug-assertion.patch"
|
||||
- patch_file: "patches/1.4.19-0004-disable-hardening-in-source.patch"
|
||||
"1.4.18":
|
||||
- patch_file: "patches/1.4.18-0001-fflush-adjust-to-glibc-2.28-libio.h-removal.patch"
|
||||
- patch_file: "patches/1.4.18-0002-fflush-be-more-paranoid-about-libio.h-change.patch"
|
||||
- patch_file: "patches/1.4.18-0004-fix-checks.patch"
|
||||
- patch_file: "patches/1.4.18-0005-vasnprintf-Fix-for-MSVC-14.patch"
|
||||
- patch_file: "patches/1.4.18-0006-manywarnings-update-for-gcc-7.patch"
|
||||
- patch_file: "patches/1.4.18-0007-vasnprintf-port-to-macos-10.13.patch"
|
||||
- patch_file: "patches/1.4.18-0008-open-files-in-binary-mode.patch"
|
||||
- patch_file: "patches/1.4.18-0009-disable-hardening-in-source.patch"
|
||||
- patch_file: "patches/1.4.18-0010-c-stack-stop-using-SIGSTKSZ.patch"
|
||||
135
recipes/m4/all/conanfile.py
Normal file
135
recipes/m4/all/conanfile.py
Normal file
@@ -0,0 +1,135 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import cross_building
|
||||
from conan.tools.env import VirtualBuildEnv
|
||||
from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir, save
|
||||
from conan.tools.gnu import Autotools, AutotoolsToolchain
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.microsoft import is_msvc, unix_path
|
||||
from conan.tools.scm import Version
|
||||
import os
|
||||
import shutil
|
||||
|
||||
required_conan_version = ">=1.55.0"
|
||||
|
||||
|
||||
class M4Conan(ConanFile):
|
||||
name = "m4"
|
||||
package_type = "application"
|
||||
description = "GNU M4 is an implementation of the traditional Unix macro processor"
|
||||
topics = ("macro", "preprocessor")
|
||||
homepage = "https://www.gnu.org/software/m4/"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
license = "GPL-3.0-only"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
|
||||
@property
|
||||
def _settings_build(self):
|
||||
return getattr(self, "settings_build", self.settings)
|
||||
|
||||
def export_sources(self):
|
||||
export_conandata_patches(self)
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def package_id(self):
|
||||
del self.info.settings.compiler
|
||||
|
||||
def build_requirements(self):
|
||||
if self._settings_build.os == "Windows":
|
||||
self.win_bash = True
|
||||
if not self.conf.get("tools.microsoft.bash:path", check_type=str):
|
||||
self.tool_requires("msys2/cci.latest")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
env = VirtualBuildEnv(self)
|
||||
env.generate()
|
||||
|
||||
tc = AutotoolsToolchain(self)
|
||||
if is_msvc(self):
|
||||
tc.extra_cflags.append("-FS")
|
||||
# Avoid a `Assertion Failed Dialog Box` during configure with build_type=Debug
|
||||
# Visual Studio does not support the %n format flag:
|
||||
# https://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions
|
||||
# Because the %n format is inherently insecure, it is disabled by default. If %n is encountered in a format string,
|
||||
# the invalid parameter handler is invoked, as described in Parameter Validation. To enable %n support, see _set_printf_count_output.
|
||||
tc.configure_args.extend([
|
||||
"gl_cv_func_printf_directive_n=no",
|
||||
"gl_cv_func_snprintf_directive_n=no",
|
||||
"gl_cv_func_snprintf_directive_n=no",
|
||||
])
|
||||
if self.settings.build_type in ("Debug", "RelWithDebInfo"):
|
||||
tc.extra_ldflags.append("-PDB")
|
||||
elif self.settings.compiler == "clang" and Version(self.version) < "1.4.19":
|
||||
tc.extra_cflags.extend([
|
||||
"-rtlib=compiler-rt",
|
||||
"-Wno-unused-command-line-argument",
|
||||
])
|
||||
if cross_building(self) and is_msvc(self):
|
||||
triplet_arch_windows = {"x86_64": "x86_64", "x86": "i686", "armv8": "aarch64"}
|
||||
|
||||
host_arch = triplet_arch_windows.get(str(self.settings.arch))
|
||||
build_arch = triplet_arch_windows.get(str(self._settings_build.arch))
|
||||
|
||||
if host_arch and build_arch:
|
||||
host = f"{host_arch}-w64-mingw32"
|
||||
build = f"{build_arch}-w64-mingw32"
|
||||
tc.configure_args.extend([
|
||||
f"--host={host}",
|
||||
f"--build={build}",
|
||||
])
|
||||
if self.settings.os == "Windows":
|
||||
tc.configure_args.append("ac_cv_func__set_invalid_parameter_handler=yes")
|
||||
env = tc.environment()
|
||||
# help2man trick
|
||||
env.prepend_path("PATH", self.source_folder)
|
||||
# handle msvc
|
||||
if is_msvc(self):
|
||||
ar_wrapper = unix_path(self, os.path.join(self.source_folder, "build-aux", "ar-lib"))
|
||||
env.define("CC", "cl -nologo")
|
||||
env.define("CXX", "cl -nologo")
|
||||
env.define("AR", f"{ar_wrapper} lib")
|
||||
env.define("LD", "link")
|
||||
env.define("NM", "dumpbin -symbols")
|
||||
env.define("OBJDUMP", ":")
|
||||
env.define("RANLIB", ":")
|
||||
env.define("STRIP", ":")
|
||||
tc.generate(env)
|
||||
|
||||
def _patch_sources(self):
|
||||
apply_conandata_patches(self)
|
||||
if shutil.which("help2man") == None:
|
||||
# dummy file for configure
|
||||
help2man = os.path.join(self.source_folder, "help2man")
|
||||
save(self, help2man, "#!/usr/bin/env bash\n:")
|
||||
if os.name == "posix":
|
||||
os.chmod(help2man, os.stat(help2man).st_mode | 0o111)
|
||||
|
||||
def build(self):
|
||||
self._patch_sources()
|
||||
autotools = Autotools(self)
|
||||
autotools.configure()
|
||||
autotools.make()
|
||||
|
||||
def package(self):
|
||||
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
|
||||
autotools = Autotools(self)
|
||||
autotools.install()
|
||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.libdirs = []
|
||||
self.cpp_info.includedirs = []
|
||||
|
||||
# M4 environment variable is used by a lot of scripts as a way to override a hard-coded embedded m4 path
|
||||
bin_ext = ".exe" if self.settings.os == "Windows" else ""
|
||||
m4_bin = os.path.join(self.package_folder, "bin", f"m4{bin_ext}").replace("\\", "/")
|
||||
self.runenv_info.define_path("M4", m4_bin)
|
||||
self.buildenv_info.define_path("M4", m4_bin)
|
||||
|
||||
# TODO: to remove in conan v2
|
||||
self.env_info.PATH.append(os.path.join(self.package_folder, "bin"))
|
||||
self.env_info.M4 = m4_bin
|
||||
@@ -0,0 +1,170 @@
|
||||
# this patches is from https://git.busybox.net/buildroot/commit/?id=c48f8a64626c60bd1b46804b7cf1a699ff53cdf3
|
||||
# to fix compiler error on certain systems:
|
||||
# freadahead.c:92:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
|
||||
|
||||
From 4af4a4a71827c0bc5e0ec67af23edef4f15cee8e Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Mon, 5 Mar 2018 10:56:29 -0800
|
||||
Subject: [PATCH] fflush: adjust to glibc 2.28 libio.h removal
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Problem reported by Daniel P. Berrangé in:
|
||||
https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html
|
||||
* lib/fbufmode.c (fbufmode):
|
||||
* lib/fflush.c (clear_ungetc_buffer_preserving_position)
|
||||
(disable_seek_optimization, rpl_fflush):
|
||||
* lib/fpending.c (__fpending):
|
||||
* lib/fpurge.c (fpurge):
|
||||
* lib/freadable.c (freadable):
|
||||
* lib/freadahead.c (freadahead):
|
||||
* lib/freading.c (freading):
|
||||
* lib/freadptr.c (freadptr):
|
||||
* lib/freadseek.c (freadptrinc):
|
||||
* lib/fseeko.c (fseeko):
|
||||
* lib/fseterr.c (fseterr):
|
||||
* lib/fwritable.c (fwritable):
|
||||
* lib/fwriting.c (fwriting):
|
||||
Check _IO_EOF_SEEN instead of _IO_ftrylockfile.
|
||||
* lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]:
|
||||
Define if not already defined.
|
||||
|
||||
[yann.morin.1998@free.fr: partially backport from upstream gnulib]
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||
|
||||
---
|
||||
lib/fflush.c | 6 +++---
|
||||
lib/fpending.c | 2 +-
|
||||
lib/fpurge.c | 2 +-
|
||||
lib/freadahead.c | 2 +-
|
||||
lib/freading.c | 2 +-
|
||||
lib/fseeko.c | 4 ++--
|
||||
lib/stdio-impl.h | 6 ++++++
|
||||
7 files changed, 15 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/lib/fflush.c b/lib/fflush.c
|
||||
index ef2a7f1..787790d 100644
|
||||
--- a/lib/fflush.c
|
||||
+++ b/lib/fflush.c
|
||||
@@ -33,7 +33,7 @@
|
||||
#undef fflush
|
||||
|
||||
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
|
||||
/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
|
||||
static void
|
||||
@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp)
|
||||
|
||||
#endif
|
||||
|
||||
-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
|
||||
+#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
|
||||
|
||||
# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
|
||||
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream)
|
||||
if (stream == NULL || ! freading (stream))
|
||||
return fflush (stream);
|
||||
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
|
||||
clear_ungetc_buffer_preserving_position (stream);
|
||||
|
||||
diff --git a/lib/fpending.c b/lib/fpending.c
|
||||
index ce93604..9fe7ffb 100644
|
||||
--- a/lib/fpending.c
|
||||
+++ b/lib/fpending.c
|
||||
@@ -32,7 +32,7 @@ __fpending (FILE *fp)
|
||||
/* Most systems provide FILE as a struct and the necessary bitmask in
|
||||
<stdio.h>, because they need it for implementing getc() and putc() as
|
||||
fast macros. */
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
return fp->_IO_write_ptr - fp->_IO_write_base;
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
diff --git a/lib/fpurge.c b/lib/fpurge.c
|
||||
index 53ee68c..7cba3a3 100644
|
||||
--- a/lib/fpurge.c
|
||||
+++ b/lib/fpurge.c
|
||||
@@ -62,7 +62,7 @@ fpurge (FILE *fp)
|
||||
/* Most systems provide FILE as a struct and the necessary bitmask in
|
||||
<stdio.h>, because they need it for implementing getc() and putc() as
|
||||
fast macros. */
|
||||
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
fp->_IO_read_end = fp->_IO_read_ptr;
|
||||
fp->_IO_write_ptr = fp->_IO_write_base;
|
||||
/* Avoid memory leak when there is an active ungetc buffer. */
|
||||
diff --git a/lib/freadahead.c b/lib/freadahead.c
|
||||
index cfc969b..5e43e13 100644
|
||||
--- a/lib/freadahead.c
|
||||
+++ b/lib/freadahead.c
|
||||
@@ -25,7 +25,7 @@
|
||||
size_t
|
||||
freadahead (FILE *fp)
|
||||
{
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
if (fp->_IO_write_ptr > fp->_IO_write_base)
|
||||
return 0;
|
||||
return (fp->_IO_read_end - fp->_IO_read_ptr)
|
||||
diff --git a/lib/freading.c b/lib/freading.c
|
||||
index 05cb0b8..f1da5b9 100644
|
||||
--- a/lib/freading.c
|
||||
+++ b/lib/freading.c
|
||||
@@ -31,7 +31,7 @@ freading (FILE *fp)
|
||||
/* Most systems provide FILE as a struct and the necessary bitmask in
|
||||
<stdio.h>, because they need it for implementing getc() and putc() as
|
||||
fast macros. */
|
||||
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
return ((fp->_flags & _IO_NO_WRITES) != 0
|
||||
|| ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
|
||||
&& fp->_IO_read_base != NULL));
|
||||
diff --git a/lib/fseeko.c b/lib/fseeko.c
|
||||
index 0c01c4f..0601619 100644
|
||||
--- a/lib/fseeko.c
|
||||
+++ b/lib/fseeko.c
|
||||
@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
#endif
|
||||
|
||||
/* These tests are based on fpurge.c. */
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
if (fp->_IO_read_end == fp->_IO_read_ptr
|
||||
&& fp->_IO_write_ptr == fp->_IO_write_base
|
||||
&& fp->_IO_save_base == NULL)
|
||||
@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
return -1;
|
||||
}
|
||||
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
fp->_flags &= ~_IO_EOF_SEEN;
|
||||
fp->_offset = pos;
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
|
||||
index 766d693..75fe3ad 100644
|
||||
--- a/lib/stdio-impl.h
|
||||
+++ b/lib/stdio-impl.h
|
||||
@@ -18,6 +18,12 @@
|
||||
the same implementation of stdio extension API, except that some fields
|
||||
have different naming conventions, or their access requires some casts. */
|
||||
|
||||
+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this
|
||||
+ problem by defining it ourselves. FIXME: Do not rely on glibc
|
||||
+ internals. */
|
||||
+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
|
||||
+# define _IO_IN_BACKUP 0x100
|
||||
+#endif
|
||||
|
||||
/* BSD stdio derived implementations. */
|
||||
|
||||
--
|
||||
2.7.4.windows.1
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
# this patches is from https://git.busybox.net/buildroot/commit/?id=c48f8a64626c60bd1b46804b7cf1a699ff53cdf3
|
||||
# to fix compiler error on certain systems:
|
||||
# freadahead.c:92:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
|
||||
|
||||
|
||||
From 74d9d6a293d7462dea8f83e7fc5ac792e956a0ad Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Thu, 8 Mar 2018 16:42:45 -0800
|
||||
Subject: [PATCH 2/2] fflush: be more paranoid about libio.h change
|
||||
|
||||
Suggested by Eli Zaretskii in:
|
||||
https://lists.gnu.org/r/emacs-devel/2018-03/msg00270.html
|
||||
* lib/fbufmode.c (fbufmode):
|
||||
* lib/fflush.c (clear_ungetc_buffer_preserving_position)
|
||||
(disable_seek_optimization, rpl_fflush):
|
||||
* lib/fpending.c (__fpending):
|
||||
* lib/fpurge.c (fpurge):
|
||||
* lib/freadable.c (freadable):
|
||||
* lib/freadahead.c (freadahead):
|
||||
* lib/freading.c (freading):
|
||||
* lib/freadptr.c (freadptr):
|
||||
* lib/freadseek.c (freadptrinc):
|
||||
* lib/fseeko.c (fseeko):
|
||||
* lib/fseterr.c (fseterr):
|
||||
* lib/fwritable.c (fwritable):
|
||||
* lib/fwriting.c (fwriting):
|
||||
Look at _IO_ftrylockfile as well as at _IO_EOF_SEEN.
|
||||
---
|
||||
lib/fflush.c | 9 ++++++---
|
||||
lib/fpending.c | 3 ++-
|
||||
lib/fpurge.c | 3 ++-
|
||||
lib/freadahead.c | 3 ++-
|
||||
lib/freading.c | 3 ++-
|
||||
lib/fseeko.c | 6 ++++--
|
||||
6 files changed, 18 insertions(+), 9 deletions(-)
|
||||
|
||||
[yann.morin.1998@free.fr: partially backport from upstream gnulib]
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||
|
||||
diff --git a/lib/fflush.c b/lib/fflush.c
|
||||
index 787790d..d6951a8 100644
|
||||
--- a/lib/fflush.c
|
||||
+++ b/lib/fflush.c
|
||||
@@ -33,7 +33,8 @@
|
||||
#undef fflush
|
||||
|
||||
|
||||
-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+/* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
|
||||
/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
|
||||
static void
|
||||
@@ -72,7 +73,8 @@ clear_ungetc_buffer (FILE *fp)
|
||||
|
||||
#endif
|
||||
|
||||
-#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
|
||||
+#if ! (defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1)
|
||||
+/* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
|
||||
# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
|
||||
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
@@ -148,7 +150,8 @@ rpl_fflush (FILE *stream)
|
||||
if (stream == NULL || ! freading (stream))
|
||||
return fflush (stream);
|
||||
|
||||
-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
|
||||
clear_ungetc_buffer_preserving_position (stream);
|
||||
|
||||
diff --git a/lib/fpending.c b/lib/fpending.c
|
||||
index 9fe7ffb..9433c1a 100644
|
||||
--- a/lib/fpending.c
|
||||
+++ b/lib/fpending.c
|
||||
@@ -32,7 +32,8 @@ __fpending (FILE *fp)
|
||||
/* Most systems provide FILE as a struct and the necessary bitmask in
|
||||
<stdio.h>, because they need it for implementing getc() and putc() as
|
||||
fast macros. */
|
||||
-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
return fp->_IO_write_ptr - fp->_IO_write_base;
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
diff --git a/lib/fpurge.c b/lib/fpurge.c
|
||||
index 7cba3a3..55758d7 100644
|
||||
--- a/lib/fpurge.c
|
||||
+++ b/lib/fpurge.c
|
||||
@@ -62,7 +62,8 @@ fpurge (FILE *fp)
|
||||
/* Most systems provide FILE as a struct and the necessary bitmask in
|
||||
<stdio.h>, because they need it for implementing getc() and putc() as
|
||||
fast macros. */
|
||||
-# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
fp->_IO_read_end = fp->_IO_read_ptr;
|
||||
fp->_IO_write_ptr = fp->_IO_write_base;
|
||||
/* Avoid memory leak when there is an active ungetc buffer. */
|
||||
diff --git a/lib/freadahead.c b/lib/freadahead.c
|
||||
index 5e43e13..4ccaa09 100644
|
||||
--- a/lib/freadahead.c
|
||||
+++ b/lib/freadahead.c
|
||||
@@ -25,7 +25,8 @@
|
||||
size_t
|
||||
freadahead (FILE *fp)
|
||||
{
|
||||
-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
if (fp->_IO_write_ptr > fp->_IO_write_base)
|
||||
return 0;
|
||||
return (fp->_IO_read_end - fp->_IO_read_ptr)
|
||||
diff --git a/lib/freading.c b/lib/freading.c
|
||||
index f1da5b9..7ae5618 100644
|
||||
--- a/lib/freading.c
|
||||
+++ b/lib/freading.c
|
||||
@@ -31,7 +31,8 @@ freading (FILE *fp)
|
||||
/* Most systems provide FILE as a struct and the necessary bitmask in
|
||||
<stdio.h>, because they need it for implementing getc() and putc() as
|
||||
fast macros. */
|
||||
-# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
return ((fp->_flags & _IO_NO_WRITES) != 0
|
||||
|| ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
|
||||
&& fp->_IO_read_base != NULL));
|
||||
diff --git a/lib/fseeko.c b/lib/fseeko.c
|
||||
index 0601619..2fc1986 100644
|
||||
--- a/lib/fseeko.c
|
||||
+++ b/lib/fseeko.c
|
||||
@@ -47,7 +47,8 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
#endif
|
||||
|
||||
/* These tests are based on fpurge.c. */
|
||||
-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
if (fp->_IO_read_end == fp->_IO_read_ptr
|
||||
&& fp->_IO_write_ptr == fp->_IO_write_base
|
||||
&& fp->_IO_save_base == NULL)
|
||||
@@ -123,7 +124,8 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
return -1;
|
||||
}
|
||||
|
||||
-#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
fp->_flags &= ~_IO_EOF_SEEN;
|
||||
fp->_offset = pos;
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
--
|
||||
2.7.4.windows.1
|
||||
|
||||
35
recipes/m4/all/patches/1.4.18-0004-fix-checks.patch
Normal file
35
recipes/m4/all/patches/1.4.18-0004-fix-checks.patch
Normal file
@@ -0,0 +1,35 @@
|
||||
--- checks/check-them
|
||||
+++ checks/check-them
|
||||
@@ -58,12 +58,13 @@
|
||||
shift; shift
|
||||
fi
|
||||
|
||||
# Find out how the executable prints argv[0]
|
||||
m4name=`"$m4" --help | ${SED} -e 's/Usage: \(.*\) \[OPTION.*/\1/' \
|
||||
-e 's/\\\\/\\\\\\\\/g' -e 1q`
|
||||
+m4name=`basename $m4name`
|
||||
|
||||
# Find out if we should strip \r in the output
|
||||
"$m4" --version | tee $out
|
||||
"$m4" --version | tr -d '\015' > $xout
|
||||
if cmp -s $out $xout; then
|
||||
:
|
||||
|
||||
---checks/Makefile
|
||||
+++ checks/Makefile.in
|
||||
@@ -1612,14 +1612,14 @@
|
||||
$(srcdir)/stamp-checks: $(srcdir)/get-them $(top_srcdir)/doc/m4.texi
|
||||
rm -f $(DOC_CHECKS)
|
||||
cd $(srcdir) && AWK=$(AWK) ./get-them ../doc/m4.texi
|
||||
echo stamp >$@
|
||||
|
||||
check-local: $(srcdir)/stamp-checks
|
||||
- PATH=`pwd`/../src"$(PATH_SEPARATOR)"$$PATH; export PATH; \
|
||||
- $(srcdir)/check-them -I $(srcdir)/../examples $(CHECKS)
|
||||
+ cd $(srcdir)/.. && PATH=src"$(PATH_SEPARATOR)"$$PATH \
|
||||
+ $(srcdir)/check-them -I examples $(CHECKS)
|
||||
|
||||
installcheck: $(srcdir)/stamp-checks
|
||||
PATH='$(bindir)'"$(PATH_SEPARATOR)"$$PATH; export PATH; \
|
||||
$(srcdir)/check-them -I $(srcdir)/../examples \
|
||||
-m "`echo m4 | sed '$(program_transform_name)'`" $(CHECKS)
|
||||
@@ -0,0 +1,124 @@
|
||||
From 0d01189c540f63159448ba6bf4740bb20ff1e1ee Mon Sep 17 00:00:00 2001
|
||||
From: Bruno Haible <bruno@clisp.org>
|
||||
Date: Fri, 21 Apr 2017 17:24:48 +0200
|
||||
Subject: vasnprintf: Fix for MSVC 14.
|
||||
|
||||
* lib/vasnprintf.c (USE_MSVC__SNPRINTF): New macro.
|
||||
Everywhere, use !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF instead
|
||||
of !HAVE_SNPRINTF_RETVAL_C99.
|
||||
---
|
||||
lib/vasnprintf.c | 23 +++++++++++++----------
|
||||
1 file changed, 13 insertions(+), 10 deletions(-)
|
||||
|
||||
(limited to 'lib/vasnprintf.c')
|
||||
|
||||
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
|
||||
index 4962e5893..839f79060 100644
|
||||
--- a/lib/vasnprintf.c
|
||||
+++ b/lib/vasnprintf.c
|
||||
@@ -156,6 +156,7 @@
|
||||
# define SNPRINTF snwprintf
|
||||
# else
|
||||
# define SNPRINTF _snwprintf
|
||||
+# define USE_MSVC__SNPRINTF 1
|
||||
# endif
|
||||
# else
|
||||
/* Unix. */
|
||||
@@ -181,7 +182,9 @@
|
||||
/* Here we need to call the native snprintf, not rpl_snprintf. */
|
||||
# undef snprintf
|
||||
# else
|
||||
+ /* MSVC versions < 14 did not have snprintf, only _snprintf. */
|
||||
# define SNPRINTF _snprintf
|
||||
+# define USE_MSVC__SNPRINTF 1
|
||||
# endif
|
||||
# else
|
||||
/* Unix. */
|
||||
@@ -208,7 +211,7 @@
|
||||
#undef remainder
|
||||
#define remainder rem
|
||||
|
||||
-#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION
|
||||
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION
|
||||
# if (HAVE_STRNLEN && !defined _AIX)
|
||||
# define local_strnlen strnlen
|
||||
# else
|
||||
@@ -224,7 +227,7 @@ local_strnlen (const char *string, size_t maxlen)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
-#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
|
||||
+#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
|
||||
# if HAVE_WCSLEN
|
||||
# define local_wcslen wcslen
|
||||
# else
|
||||
@@ -247,7 +250,7 @@ local_wcslen (const wchar_t *s)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
-#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
|
||||
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
|
||||
# if HAVE_WCSNLEN
|
||||
# define local_wcsnlen wcsnlen
|
||||
# else
|
||||
@@ -1517,7 +1520,7 @@ is_borderline (const char *digits, size_t precision)
|
||||
|
||||
#endif
|
||||
|
||||
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99
|
||||
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
|
||||
|
||||
/* Use a different function name, to make it possible that the 'wchar_t'
|
||||
parametrization and the 'char' parametrization get compiled in the same
|
||||
@@ -2392,7 +2395,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
-#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
|
||||
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
|
||||
else if (dp->conversion == 's'
|
||||
# if WIDE_CHAR_VERSION
|
||||
&& a.arg[dp->arg_index].type != TYPE_WIDE_STRING
|
||||
@@ -4591,10 +4594,10 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
int has_width;
|
||||
#endif
|
||||
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
size_t width;
|
||||
#endif
|
||||
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
int has_precision;
|
||||
size_t precision;
|
||||
#endif
|
||||
@@ -4623,7 +4626,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
has_width = 0;
|
||||
#endif
|
||||
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
width = 0;
|
||||
if (dp->width_start != dp->width_end)
|
||||
{
|
||||
@@ -4657,7 +4660,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
}
|
||||
#endif
|
||||
|
||||
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||
has_precision = 0;
|
||||
precision = 6;
|
||||
if (dp->precision_start != dp->precision_end)
|
||||
@@ -5127,7 +5130,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
/* Look at the snprintf() return value. */
|
||||
if (retcount < 0)
|
||||
{
|
||||
-# if !HAVE_SNPRINTF_RETVAL_C99
|
||||
+# if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
|
||||
/* HP-UX 10.20 snprintf() is doubly deficient:
|
||||
It doesn't understand the '%n' directive,
|
||||
*and* it returns -1 (rather than the length
|
||||
--
|
||||
cgit v1.2.1
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 5e22aee79f9d02ac37f40f1d18f5696114c3c3c9 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Tue, 16 May 2017 09:23:52 -0700
|
||||
Subject: manywarnings: update for GCC 7
|
||||
|
||||
* build-aux/gcc-warning.spec:
|
||||
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC):
|
||||
Add GCC 7 warnings, notably -Wimplicit-fallthrough=5, which
|
||||
requires a non-comment fallthrough attribute. This is a bit
|
||||
cleaner than the comment versions.
|
||||
* lib/strftime.c, lib/dfa.c, lib/fnmatch.c, lib/mbrtowc.c:
|
||||
* lib/vasnprintf.c, tests/macros.h (FALLTHROUGH): New macro.
|
||||
Use it whenever one switch case falls through into the next.
|
||||
---
|
||||
lib/vasnprintf.c | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
(limited to 'lib/vasnprintf.c')
|
||||
|
||||
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
|
||||
index 839f79060..9c2af0e45 100644
|
||||
--- a/lib/vasnprintf.c
|
||||
+++ b/lib/vasnprintf.c
|
||||
@@ -118,6 +118,14 @@
|
||||
# include "fpucw.h"
|
||||
#endif
|
||||
|
||||
+#ifndef FALLTHROUGH
|
||||
+# if __GNUC__ < 7
|
||||
+# define FALLTHROUGH ((void) 0)
|
||||
+# else
|
||||
+# define FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
/* Default parameters. */
|
||||
#ifndef VASNPRINTF
|
||||
# if WIDE_CHAR_VERSION
|
||||
@@ -4837,7 +4845,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
*fbp++ = 'l';
|
||||
# endif
|
||||
#endif
|
||||
- /*FALLTHROUGH*/
|
||||
+ FALLTHROUGH;
|
||||
case TYPE_LONGINT:
|
||||
case TYPE_ULONGINT:
|
||||
#if HAVE_WINT_T
|
||||
--
|
||||
cgit v1.2.1
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
From c41f233c4c38e84023a16339782ee306f03e7f59 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Fri, 7 Jul 2017 14:10:20 -0700
|
||||
Subject: vasnprintf: port to macOS 10.13
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Problem reported by comex in:
|
||||
http://lists.gnu.org/archive/html/bug-gnulib/2017-07/msg00056.html
|
||||
* lib/vasnprintf.c (VASNPRINTF): Don’t use %n on macOS.
|
||||
---
|
||||
lib/vasnprintf.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
(limited to 'lib/vasnprintf.c')
|
||||
|
||||
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
|
||||
index 9c2af0e45..fecaf27a1 100644
|
||||
--- a/lib/vasnprintf.c
|
||||
+++ b/lib/vasnprintf.c
|
||||
@@ -4869,7 +4869,11 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
#endif
|
||||
*fbp = dp->conversion;
|
||||
#if USE_SNPRINTF
|
||||
-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
|
||||
+# if ! (((__GLIBC__ > 2 \
|
||||
+ || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \
|
||||
+ && !defined __UCLIBC__) \
|
||||
+ || (defined __APPLE__ && defined __MACH__) \
|
||||
+ || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
|
||||
fbp[1] = '%';
|
||||
fbp[2] = 'n';
|
||||
fbp[3] = '\0';
|
||||
@@ -4883,6 +4887,9 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||
in format strings in writable memory may crash the program
|
||||
(if compiled with _FORTIFY_SOURCE=2), so we should avoid it
|
||||
in this situation. */
|
||||
+ /* macOS 10.13 High Sierra behaves like glibc with
|
||||
+ _FORTIFY_SOURCE=2, and older macOS releases
|
||||
+ presumably do not need %n. */
|
||||
/* On native Windows systems (such as mingw), we can avoid using
|
||||
%n because:
|
||||
- Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
|
||||
--
|
||||
cgit v1.2.1
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
This will open all files in binary mode.
|
||||
files may contain binary data.
|
||||
This fixes e.g. autoconf, of whose frozen file, contains all characters from 0x00 to 0xff.
|
||||
|
||||
--- src/path.c
|
||||
+++ src/path.c
|
||||
@@ -110,7 +110,7 @@
|
||||
static FILE *
|
||||
m4_fopen (const char *file)
|
||||
{
|
||||
- FILE *fp = fopen (file, "r");
|
||||
+ FILE *fp = fopen (file, "rb");
|
||||
if (fp)
|
||||
{
|
||||
struct stat st;
|
||||
@@ -0,0 +1,16 @@
|
||||
This requires linking to ssp on some systems, which might not always present.
|
||||
If this is really desired:
|
||||
* add `-lssp` to LDFLAGS, and
|
||||
* add `-D_FORTIFY_SOURCE=2` to CPPFLAGS/CFLAGS
|
||||
|
||||
--- lib/config.hin
|
||||
+++ lib/config.hin
|
||||
@@ -96,7 +96,7 @@
|
||||
/* Enable compile-time and run-time bounds-checking, and some warnings,
|
||||
without upsetting newer glibc. */
|
||||
#if defined __OPTIMIZE__ && __OPTIMIZE__
|
||||
- # define _FORTIFY_SOURCE 2
|
||||
+ //# define _FORTIFY_SOURCE 2
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
c-stack: stop using SIGSTKSZ
|
||||
|
||||
It’s been proposed to stop making SIGSTKSZ an integer constant:
|
||||
https://sourceware.org/pipermail/libc-alpha/2020-September/118028.html
|
||||
Also, using SIGSTKSZ in #if did not conform to current POSIX.
|
||||
Also, avoiding SIGSTKSZ makes the code simpler and easier to grok.
|
||||
* lib/c-stack.c (SIGSTKSZ): Remove.
|
||||
(alternate_signal_stack): Now a 64 KiB array, for simplicity.
|
||||
All uses changed.
|
||||
|
||||
[Retrieved (and backported) from:
|
||||
https://git.savannah.gnu.org/cgit/gnulib.git/patch/?id=f9e2b20a12a230efa30f1d479563ae07d276a94b]
|
||||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
|
||||
diff -Nura lib/c-stack.c lib/c-stack.c
|
||||
--- lib/c-stack.c 2021-04-11 19:12:14.086494029 +0200
|
||||
+++ lib/c-stack.c 2021-04-11 19:48:46.316862760 +0200
|
||||
@@ -50,15 +50,16 @@
|
||||
#if ! HAVE_STACK_T && ! defined stack_t
|
||||
typedef struct sigaltstack stack_t;
|
||||
#endif
|
||||
-#ifndef SIGSTKSZ
|
||||
-# define SIGSTKSZ 16384
|
||||
-#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
|
||||
-/* libsigsegv 2.6 through 2.8 have a bug where some architectures use
|
||||
- more than the Linux default of an 8k alternate stack when deciding
|
||||
- if a fault was caused by stack overflow. */
|
||||
-# undef SIGSTKSZ
|
||||
-# define SIGSTKSZ 16384
|
||||
-#endif
|
||||
+
|
||||
+/* Storage for the alternate signal stack.
|
||||
+ 64 KiB is not too large for Gnulib-using apps, and is large enough
|
||||
+ for all known platforms. Smaller sizes may run into trouble.
|
||||
+ For example, libsigsegv 2.6 through 2.8 have a bug where some
|
||||
+ architectures use more than the Linux default of an 8 KiB alternate
|
||||
+ stack when deciding if a fault was caused by stack overflow. */
|
||||
+static max_align_t alternate_signal_stack[(64 * 1024
|
||||
+ + sizeof (max_align_t) - 1)
|
||||
+ / sizeof (max_align_t)];
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -128,19 +129,6 @@
|
||||
#if (HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK \
|
||||
&& HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV
|
||||
|
||||
-/* Storage for the alternate signal stack. */
|
||||
-static union
|
||||
-{
|
||||
- char buffer[SIGSTKSZ];
|
||||
-
|
||||
- /* These other members are for proper alignment. There's no
|
||||
- standard way to guarantee stack alignment, but this seems enough
|
||||
- in practice. */
|
||||
- long double ld;
|
||||
- long l;
|
||||
- void *p;
|
||||
-} alternate_signal_stack;
|
||||
-
|
||||
static void
|
||||
null_action (int signo __attribute__ ((unused)))
|
||||
{
|
||||
@@ -205,8 +193,8 @@
|
||||
|
||||
/* Always install the overflow handler. */
|
||||
if (stackoverflow_install_handler (overflow_handler,
|
||||
- alternate_signal_stack.buffer,
|
||||
- sizeof alternate_signal_stack.buffer))
|
||||
+ alternate_signal_stack,
|
||||
+ sizeof alternate_signal_stack))
|
||||
{
|
||||
errno = ENOTSUP;
|
||||
return -1;
|
||||
@@ -279,14 +267,14 @@
|
||||
stack_t st;
|
||||
struct sigaction act;
|
||||
st.ss_flags = 0;
|
||||
+ st.ss_sp = alternate_signal_stack;
|
||||
+ st.ss_size = sizeof alternate_signal_stack;
|
||||
# if SIGALTSTACK_SS_REVERSED
|
||||
/* Irix mistakenly treats ss_sp as the upper bound, rather than
|
||||
lower bound, of the alternate stack. */
|
||||
- st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *);
|
||||
- st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *);
|
||||
-# else
|
||||
- st.ss_sp = alternate_signal_stack.buffer;
|
||||
- st.ss_size = sizeof alternate_signal_stack.buffer;
|
||||
+ st.ss_size -= sizeof (void *);
|
||||
+ char *ss_sp = st.ss_sp;
|
||||
+ st.ss_sp = ss_sp + st.ss_size;
|
||||
# endif
|
||||
r = sigaltstack (&st, NULL);
|
||||
if (r != 0)
|
||||
diff -Nura lib/c-stack.h lib/c-stack.h
|
||||
--- lib/c-stack.h 2021-04-11 19:12:14.098494042 +0200
|
||||
+++ lib/c-stack.h 2021-04-11 19:17:42.138848378 +0200
|
||||
@@ -34,7 +34,7 @@
|
||||
A null ACTION acts like an action that does nothing.
|
||||
|
||||
ACTION must be async-signal-safe. ACTION together with its callees
|
||||
- must not require more than SIGSTKSZ bytes of stack space. Also,
|
||||
+ must not require more than 64 KiB bytes of stack space. Also,
|
||||
ACTION should not call longjmp, because this implementation does
|
||||
not guarantee that it is safe to return to the original stack.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user