Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Example: C module linking to library · LuaDist/Repository Wiki · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Example: C module linking to library · LuaDist/Repository Wiki · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

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

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Example: C module linking to library · LuaDist/Repository Wiki · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Example: C module linking to library · LuaDist/Repository Wiki · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Example: C module linking to library · LuaDist/Repository Wiki · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally

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

Example: C module linking to library

Marbux edited this page Mar 26, 2013 · 1 revision

Building C modules with Dependencies

CMake scripts can search for required files and libraries when building to satisfy the modules dependencies. Dependencies can be provided by LuaDist itself or by other means, for example by using the host operating system package manager. The following steps are usually needed to build modules with dependencies:

  • Define project name - usually the name of the module.
  • Copy the cmake macro folder directory from our Tools
  • Instruct CMake to search for dependencies.
  • Check if all external dependenies were found.
  • Create a module using the provided macro.
  • Link module against external dependencies.
  • Write commands for installing module and other files.

Here is an commented example fo the LuaExpat module:

# Define projects name# The C tells CMake to check for C compilerproject ( luaexpat C )
# Define minimun version of CMAKE for compatibilitycmake_minimum_required ( VERSION2.8 )
# Include dist.cmake - defines LuaDist related macros and install paths# Also include lua macrosinclude ( dist.cmake )
include ( lua )
# LuaExpat needs Lua but that dependency is conveniently provided by the macros. # Additionally luaexpat depends on the Expat library so lets search for it# If successful this will define EXPAT_* variables such as EXPAT_INCLUDE_DIR and EXPAT_LIBRARIESfind_package ( EXPATREQUIRED ) # REQUIRED ensures that Expat must be foundinclude_direcotries ( ${EXPAT_INCLUDE_DIR} ) # We need Expats's headers, so include them# Build LuaExpat moduleinstall_lua_module ( lxpsrc/lxplib.csrc/lxp.defLINK${EXPAT_LIBRARIES} )
install_lua_module ( lxp.lomsrc/lxp/lom.lua )
# Install Data (points to root of the project specific data folder)install_data ( README )
# Install Documentation ( the tailing "/" means we want to install the contents of doc not doc itself )install_doc ( doc/ )
# Install test suiteinstall_test ( test/ )

Notes

FIND_PACKAGE functionality

Finding external dependencies (libraries) is done by calling CMake's FIND_PACKAGE(XYZ) function, where XYZ is the name of the external dependency.

CMake's installation contains a large set of prepared scripts that are capable to find many existing external dependencies - see CMake's documentation

In our example if FIND_PACKAGE(EXPAT) finds Expat, then the variable EXPAT_FOUND will be set, otherwise EXPAT_NOTFOUND will be set.

If the external dependency is optional (the module can be build without it), then we can use following form:

find_package ( EXPAT )
if ( EXPAT_FOUND )
# Expat was found, so we can use it.else ()
# Expat was NOT found...endif ()	

All CMake's calls to FIND_PACKAGE(XYZ) usually set at least the following 3 variables:

XYZ_FOUND# XYZ foundXYZ_INCLUDE_DIR# stores path to XYZ's headersXYZ_LIBRARIES# stores XYZ's libraries

Please see into CMake's find scripts what they define, because there are often more variables that are set up.

Using the REQUIRED directive the external dependency must be found if it is not found, then the build process will fail with an error message.

If the find modules you need are not distributed with CMake you can add your own into the cmake folder. Including dist.cmake will allow you to transparently use find_package with your find modules.

Searching for depencencies

If you need to find an external dependency that is not already included in CMake FIND_PACKAGE functionality, you can write a find script similar to those installed by CMake - they are well documented.

You do this by searching for headers and libraries with two commands. E.g. for the lmapm module we need to find mapm library and mapm header:

# search for m_apm.h header and store the path to this header into MAPM_INCLUDE_DIR variablefind_path ( MAPM_INCLUDE_DIRNAMESm_apm.h ) # search for mapm library (may be named mapm or libmapm; sufix is identified by CMake) # and store the path to this library into MAPM_LIBRARY variablefind_library ( MAPM_LIBRARYNAMESmapmlibmapm )

See CMake's documentation and existing find scripts in CMake for details.

Clone this wiki locally