install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

install a pkg-config file (transcribe.pc) - #118

Open
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig
Open

install a pkg-config file (transcribe.pc)#118
shaba wants to merge 1 commit into
handy-computer:mainfrom
shaba:pkgconfig

Conversation

@shaba

Copy link
Copy Markdown
Contributor

Summary

Installs transcribe.pc next to transcribe-link.json, under the same
TRANSCRIBE_INSTALL gate, for consumers that speak pkg-config rather than
CMake (meson, autotools, distro packages).

The manifest stays the source of truth: Libs and Libs.private are generated
from the same lists that feed it, so they cannot drift. --variable=linkmanifest
prints the manifest path, so consumers can find it without knowing the
lib/lib64 layout.

Scope

cmake/transcribe-install.cmake and the new cmake/transcribe.pc.in. Additive;
no-op when TRANSCRIBE_INSTALL is OFF.

AI Assistance

AI assisted with the implementation and validation; I reviewed, tested and own
the change.

Validation

Built and installed both shared and static; --validate passes. A toy C
consumer built from nothing but --cflags --libs (and --static --libs) links
and runs in both postures. --variable=linkmanifest resolves correctly,
including with an absolute CMAKE_INSTALL_LIBDIR.

Adds cmake/transcribe.pc.in and installs the configured transcribe.pc into
<libdir>/pkgconfig from the TRANSCRIBE_INSTALL rules, beside the link
manifest and under the same gate.
- for build systems that speak pkg-config rather than CMake or
transcribe-link.json: meson, autotools, and distro -devel packages,
which conventionally expect a .pc in every library package.
- Libs / Libs.private follow pkg-config semantics: Libs is what a consumer
of the shared library needs (libtranscribe.so already carries DT_NEEDED
on the ggml libraries, so -ltranscribe is enough), Libs.private is what a
static link additionally drags in and is emitted only under --static. In
a static build the whole archive set stays in Libs, in single-pass-ld
order, so a plain --libs is not a broken link line. Both fields are
generated from the same lists that feed the manifest, so the two cannot
drift.
- the manifest is reachable from the .pc as well:
`pkg-config --variable=linkmanifest transcribe` gives its absolute path,
which lets a non-CMake consumer find it without knowing the lib/lib64
layout or being handed a prefix out of band.
- libdir/includedir follow GNUInstallDirs and stay ${prefix}-relative, so
pkg-config --define-prefix can relocate the install; they fall back to
the absolute path when CMAKE_INSTALL_LIBDIR/INCLUDEDIR is given as one.
@shaba
shaba requested a review from cjpais as a code ownerJuly 28, 2026 16:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shaba