mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
hotdoc: refactor clang usage, move to pkgs/by-name (#431131)
This commit is contained in:
commit
f7d211ff77
5 changed files with 90 additions and 100 deletions
78
pkgs/by-name/ho/hotdoc/clang.patch
Normal file
78
pkgs/by-name/ho/hotdoc/clang.patch
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
diff --git a/hotdoc/extensions/c/c_extension.py b/hotdoc/extensions/c/c_extension.py
|
||||
index 1cfd5b3..1e1926f 100644
|
||||
--- a/hotdoc/extensions/c/c_extension.py
|
||||
+++ b/hotdoc/extensions/c/c_extension.py
|
||||
@@ -44,14 +44,6 @@ from hotdoc.utils.loggable import (info as core_info, warn, Logger,
|
||||
debug as core_debug)
|
||||
|
||||
|
||||
-LLVM_CONFIG = os.environ.get("LLVM_CONFIG")
|
||||
-if LLVM_CONFIG is None:
|
||||
- LLVM_CONFIG = shutil.which('llvm-config')
|
||||
-
|
||||
-if LLVM_CONFIG is None:
|
||||
- raise ImportError()
|
||||
-
|
||||
-
|
||||
def ast_node_is_function_pointer(ast_node):
|
||||
if ast_node.kind == cindex.TypeKind.POINTER and \
|
||||
ast_node.get_pointee().get_result().kind != \
|
||||
@@ -80,42 +72,26 @@ Logger.register_warning_code('clang-headers-not-found', HotdocException,
|
||||
'c-extension')
|
||||
|
||||
|
||||
-CLANG_HEADERS_WARNING = (
|
||||
- 'Did not find clang headers. Please report a bug with the output of the'
|
||||
- '\'llvm-config --version\' and \'llvm-config --prefix\' commands')
|
||||
-
|
||||
-
|
||||
def get_clang_headers():
|
||||
try:
|
||||
# Clang 5.0+ can tell us directly
|
||||
resource_dir = subprocess.check_output(
|
||||
- ['clang', '--print-resource-dir']).strip().decode()
|
||||
+ ['@clang@', '--print-resource-dir']).strip().decode()
|
||||
if len(resource_dir) > 0:
|
||||
include_dir = os.path.join(resource_dir, 'include')
|
||||
if os.path.exists(include_dir):
|
||||
return include_dir
|
||||
except subprocess.CalledProcessError:
|
||||
pass
|
||||
- version = subprocess.check_output(
|
||||
- [LLVM_CONFIG, '--version']).strip().decode()
|
||||
- prefix = subprocess.check_output(
|
||||
- [LLVM_CONFIG, '--prefix']).strip().decode()
|
||||
- versions = (version, version.split('.').pop(0))
|
||||
- for (ver, lib) in itertools.product(
|
||||
- versions,
|
||||
- ['lib', 'lib64']):
|
||||
- p = os.path.join(prefix, lib, 'clang', ver, 'include')
|
||||
- if os.path.exists(p):
|
||||
- return p
|
||||
|
||||
- warn('clang-headers-not-found', CLANG_HEADERS_WARNING)
|
||||
+ warn('clang-headers-not-found', 'Did not find clang headers. Make sure you\'re using Clang 5.0+')
|
||||
|
||||
|
||||
CLANG_HEADERS = get_clang_headers()
|
||||
|
||||
|
||||
def get_clang_libdir():
|
||||
- return subprocess.check_output([LLVM_CONFIG, '--libdir']).strip().decode()
|
||||
+ return '@libclang_lib_dir@'
|
||||
|
||||
|
||||
class ClangScanner(object):
|
||||
diff --git a/hotdoc/extensions/c/clang/cindex.py b/hotdoc/extensions/c/clang/cindex.py
|
||||
index fc93fda..0a16651 100644
|
||||
--- a/hotdoc/extensions/c/clang/cindex.py
|
||||
+++ b/hotdoc/extensions/c/clang/cindex.py
|
||||
@@ -3949,6 +3949,8 @@ class Config:
|
||||
|
||||
if Config.library_path:
|
||||
file = Config.library_path + '/' + file
|
||||
+ else:
|
||||
+ file = "@libclang_lib_dir@" + '/' + file
|
||||
|
||||
return file
|
||||
|
||||
|
|
@ -1,37 +1,21 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
buildPythonApplication,
|
||||
python3Packages,
|
||||
fetchpatch,
|
||||
fetchPypi,
|
||||
replaceVars,
|
||||
clang,
|
||||
libclang,
|
||||
pytestCheckHook,
|
||||
pkg-config,
|
||||
cmake,
|
||||
flex,
|
||||
glib,
|
||||
json-glib,
|
||||
libxml2,
|
||||
appdirs,
|
||||
backports-entry-points-selectable,
|
||||
dbus-deviation,
|
||||
faust-cchardet,
|
||||
feedgen,
|
||||
lxml,
|
||||
networkx,
|
||||
pkgconfig,
|
||||
pyyaml,
|
||||
schema,
|
||||
setuptools,
|
||||
toposort,
|
||||
wheezy-template,
|
||||
llvmPackages,
|
||||
gst_all_1,
|
||||
}:
|
||||
|
||||
buildPythonApplication rec {
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "hotdoc";
|
||||
version = "0.17.4";
|
||||
pyproject = true;
|
||||
|
|
@ -43,8 +27,8 @@ buildPythonApplication rec {
|
|||
|
||||
patches = [
|
||||
(replaceVars ./clang.patch {
|
||||
clang = lib.getExe clang;
|
||||
libclang = "${lib.getLib libclang}/lib/libclang${stdenv.hostPlatform.extensions.sharedLibrary}";
|
||||
clang = lib.getExe llvmPackages.clang;
|
||||
libclang_lib_dir = "${lib.getLib llvmPackages.libclang}/lib";
|
||||
})
|
||||
|
||||
# Fix build with gcc15
|
||||
|
|
@ -55,7 +39,9 @@ buildPythonApplication rec {
|
|||
})
|
||||
];
|
||||
|
||||
build-system = [ setuptools ];
|
||||
postPatch = ''
|
||||
patch -p1 -d cmark -i ${./fix-cmake-4.patch}
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
|
@ -66,10 +52,12 @@ buildPythonApplication rec {
|
|||
buildInputs = [
|
||||
glib
|
||||
json-glib
|
||||
libxml2.dev
|
||||
libxml2
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
build-system = with python3Packages; [ setuptools ];
|
||||
|
||||
dependencies = with python3Packages; [
|
||||
appdirs
|
||||
backports-entry-points-selectable
|
||||
dbus-deviation
|
||||
|
|
@ -85,7 +73,7 @@ buildPythonApplication rec {
|
|||
wheezy-template
|
||||
];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
nativeCheckInputs = with python3Packages; [ pytestCheckHook ];
|
||||
|
||||
# CMake is used to build CMARK, but the build system is still python
|
||||
dontUseCmakeConfigure = true;
|
||||
|
|
@ -103,14 +91,6 @@ buildPythonApplication rec {
|
|||
"hotdoc"
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# Executing hotdoc exits with code 1
|
||||
"tests/test_hotdoc.py::TestHotdoc::test_basic"
|
||||
"tests/test_hotdoc.py::TestHotdoc::test_explicit_conf_file"
|
||||
"tests/test_hotdoc.py::TestHotdoc::test_implicit_conf_file"
|
||||
"tests/test_hotdoc.py::TestHotdoc::test_private_folder"
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
# Test does not correctly handle path normalization for test comparison
|
||||
"test_cli_overrides"
|
||||
|
|
@ -120,20 +100,6 @@ buildPythonApplication rec {
|
|||
"test_index"
|
||||
];
|
||||
|
||||
postPatch =
|
||||
# Hardcode libclang paths
|
||||
''
|
||||
substituteInPlace hotdoc/extensions/c/c_extension.py \
|
||||
--replace "shutil.which('llvm-config')" 'True' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--version']).strip().decode()" '"${lib.versions.major llvmPackages.libclang.version}"' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--prefix']).strip().decode()" '"${lib.getLib llvmPackages.libclang}"' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--libdir']).strip().decode()" '"${lib.getLib llvmPackages.libclang}/lib"'
|
||||
''
|
||||
# <https://github.com/MathieuDuponchelle/cmark/pull/2>
|
||||
+ ''
|
||||
patch -p1 -d cmark -i ${./fix-cmake-4.patch}
|
||||
'';
|
||||
|
||||
# Make pytest run from a temp dir to have it pick up installed package for cmark
|
||||
preCheck = ''
|
||||
pushd $TMPDIR
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
diff --git a/hotdoc/extensions/c/c_extension.py b/hotdoc/extensions/c/c_extension.py
|
||||
index 1cfd5b3..cff20c8 100644
|
||||
--- a/hotdoc/extensions/c/c_extension.py
|
||||
+++ b/hotdoc/extensions/c/c_extension.py
|
||||
@@ -89,7 +89,7 @@ def get_clang_headers():
|
||||
try:
|
||||
# Clang 5.0+ can tell us directly
|
||||
resource_dir = subprocess.check_output(
|
||||
- ['clang', '--print-resource-dir']).strip().decode()
|
||||
+ ['@clang@', '--print-resource-dir']).strip().decode()
|
||||
if len(resource_dir) > 0:
|
||||
include_dir = os.path.join(resource_dir, 'include')
|
||||
if os.path.exists(include_dir):
|
||||
diff --git a/hotdoc/extensions/c/clang/cindex.py b/hotdoc/extensions/c/clang/cindex.py
|
||||
index fc93fda..2eb8eaf 100644
|
||||
--- a/hotdoc/extensions/c/clang/cindex.py
|
||||
+++ b/hotdoc/extensions/c/clang/cindex.py
|
||||
@@ -3937,20 +3937,23 @@ class Config:
|
||||
if Config.library_file:
|
||||
return Config.library_file
|
||||
|
||||
- import platform
|
||||
- name = platform.system()
|
||||
+ if Config.library_path:
|
||||
+ import platform
|
||||
+ name = platform.system()
|
||||
|
||||
- if name == 'Darwin':
|
||||
- file = 'libclang.dylib'
|
||||
- elif name == 'Windows':
|
||||
- file = 'libclang.dll'
|
||||
- else:
|
||||
- file = 'libclang.so'
|
||||
+ if name == 'Darwin':
|
||||
+ file = 'libclang.dylib'
|
||||
+ elif name == 'Windows':
|
||||
+ file = 'libclang.dll'
|
||||
+ else:
|
||||
+ file = 'libclang.so'
|
||||
|
||||
- if Config.library_path:
|
||||
- file = Config.library_path + '/' + file
|
||||
+ if Config.library_path:
|
||||
+ file = Config.library_path + '/' + file
|
||||
+
|
||||
+ return file
|
||||
|
||||
- return file
|
||||
+ return "@libclang@"
|
||||
|
||||
def get_cindex_library(self):
|
||||
try:
|
||||
|
|
@ -2421,8 +2421,6 @@ with pkgs;
|
|||
|
||||
host = bind.host;
|
||||
|
||||
hotdoc = python3Packages.callPackage ../development/tools/hotdoc { };
|
||||
|
||||
hpccm = with python3Packages; toPythonApplication hpccm;
|
||||
|
||||
html-proofer = callPackage ../tools/misc/html-proofer { };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue