{"id":46976799,"url":"https://github.com/b-com-software-basis/remaken","last_synced_at":"2026-03-11T12:43:18.509Z","repository":{"id":128076458,"uuid":"183002361","full_name":"b-com-software-basis/remaken","owner":"b-com-software-basis","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-17T14:19:04.000Z","size":1283,"stargazers_count":0,"open_issues_count":9,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-02-17T18:52:12.371Z","etag":null,"topics":["artifactory","chocolatey","conan","cpp","dependency-manager","github","meta-dependency-manager","nexus","pkgutil","vcpkg","zypper"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/b-com-software-basis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-04-23T11:41:01.000Z","updated_at":"2025-04-22T13:39:54.000Z","dependencies_parsed_at":"2023-12-20T14:34:06.500Z","dependency_job_id":"bad04aa1-1457-446e-8226-67335dd0d199","html_url":"https://github.com/b-com-software-basis/remaken","commit_stats":null,"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/b-com-software-basis/remaken","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-com-software-basis%2Fremaken","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-com-software-basis%2Fremaken/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-com-software-basis%2Fremaken/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-com-software-basis%2Fremaken/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/b-com-software-basis","download_url":"https://codeload.github.com/b-com-software-basis/remaken/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-com-software-basis%2Fremaken/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30381314,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T06:09:32.197Z","status":"ssl_error","status_checked_at":"2026-03-11T06:09:17.086Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artifactory","chocolatey","conan","cpp","dependency-manager","github","meta-dependency-manager","nexus","pkgutil","vcpkg","zypper"],"created_at":"2026-03-11T12:43:17.720Z","updated_at":"2026-03-11T12:43:18.499Z","avatar_url":"https://github.com/b-com-software-basis.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Remaken\n\n**Remaken** is a meta dependencies management tool.\n\n**Remaken** supports various C++ packaging systems using a standardized dependency file format (named **packagedependencies**), that follows a modular syntax.\n\n**Remaken** also provide its own C++ packaging structure, based on [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/) description files.\n\n**Remaken** can be seen as the **\"one tool to rule them all\"** for C++ packagers.\n\n## Overview\n\nThe need to use a tool such as **Remaken** comes from :   \n- diversity of C++ package managers\n- need to speed up development bootstrap\n- need to shorten delays\n\nIndeed, whatever the dependency your project needs, there is a chance the dependency already exists in binary format on one of the existing C++ packaging systems.   \nIf it doesn't already exist in an existing C++ packaging systems, you can build your own binary version and share it as a **remaken dependency** across your team or organization, ensuring build options are the same.   \nIt also avoids other developers to build locally the same dependency.\n\n### Issues in native development without **remaken** and common development rules:\n\nTo setup a native C/C++ project that uses thirdparty dependencies, a developer must for each dependency (whatever the build system is in either [make](https://www.gnu.org/software/make/manual/make.html), [cmake](https://cmake.org/), [conan](https://conan.io/), [vcpkg](https://github.com/microsoft/vcpkg), [MSVC](https://visualstudio.microsoft.com/) …):   \n1. build each dependency with homogeneous build rules and flags (for instance c++ std version, for each target [*debug*, *release* | *os* | *cpu* | *shared*, *static*])\n2. install each dependency in an accessible path in the system (and eventually, pollute the development environment system for instance using `make install`, or set a different *sysroot* - make install by default will need sudo access for unix(e)s.)\n3. add include paths, libraries paths and libraries link flags for each dependency and sub dependency in its development project\n4. For each new development, even based on same dependencies : reproduce every dependency build step 1 to 3 (also true for [conan](https://conan.io/) when the binary hosted version doesn’t fit with your options)\n5. Running a final application : each dependency must either be copied in the same folder than the application or paths must be set to each shared dependency folder.\n6. Last but not least, to package a final application with its dependencies means to bundle manually every shared dependency with the application before creating the final bundle/setup for the application\u003cbr\u003e\nNOTE: for most build systems ([make](https://www.gnu.org/software/make/manual/make.html), [cmake](https://cmake.org/), [Microsoft Visual Studio](https://visualstudio.microsoft.com/) builds ...) the target can be overwritten across versions. The solution would be to manually add custom target path to installation post-build steps - for each project.\n\nShared library or application project heterogeneity across a team can lead to integration issues as the build rules can slightly differ on each developer station.\n\n### Development workflow using **remaken** / **builddefs-qmake** rules\n**Remaken** :   \n- provide the same set of build rules across packaging systems (certified for packaging systems that perform a local build such as [conan](https://conan.io/), [vcpkg](https://github.com/microsoft/vcpkg), [brew](https://brew.sh/index_fr))\n- install dependencies from any packaging system (including **remaken** own packaging and flag finding system) \n- there is no need to call manually each packaging system, to write a script … all is done at once from the **packagedependencies** description \n- build flags are populated either from remaken configure step or from [builddefs-qmake](https://github.com/b-com-software-basis/builddefs-qmake/releases/tag/builddefs-qmake-latest) rules (or other rules format will come in the future such as [cmake](https://cmake.org/), [bazel](https://bazel.build/) ...)\n- run any application with appropriate environment deduced from described dependencies and/or from [xpcf](https://github.com/b-com-software-basis/xpcf) configuration file\n- automate dependencies bundling within an application from dependencies description (either copying external dependencies in bundle destination folder or creating a shell script for native package managers such as apt, yum ...)\n- bundle [xpcf](https://github.com/b-com-software-basis/xpcf) applications from [xpcf](https://github.com/b-com-software-basis/xpcf) configuration file\n- integrate [conan](https://conan.io/) dependencies easily without writing a [conanfile.py](https://docs.conan.io/en/latest/reference/conanfile.html)\n- provide a normalized package installation structure for **remaken** dependencies. cf [Package tree](#package-tree)\n- allow to manage several dependencies version at the same time (each installation is based and searched with the package version number)\n- binaries installation don't occur in system path. It avoids the pollution of the environment. It also avoids the need for sudo access.\n- provide vcpkg installation and bootstrap\n- provide [builddefs-qmake](https://github.com/b-com-software-basis/builddefs-qmake/releases/tag/builddefs-qmake-latest) rules installation and update\n\n## Installing **remaken**\n### Linux Ubuntu 18.04/22.04 or mac OS X\n\n#### Install with brew\nFirst install [brew](https://brew.sh/index_fr) on your system:\n\n```\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n```\n\nThen enter the following commands from a terminal:\n\n```\nbrew tap b-com/sft\nbrew install remaken\n``` \n\n#### install with sh script - Ubuntu 22.04\n\n```\nwget https://github.com/b-com-software-basis/remaken/releases/download/install/install_remaken.sh\n./install_remaken.sh\n```\n\n### Windows\n\nDownload and install the latest [setup file](https://github.com/b-com-software-basis/remaken/releases/) version.   \n\n## Package formats supported\n### Cross platforms packaging systems :\n- [conan](https://conan.io/)\n- [vcpkg](https://github.com/microsoft/vcpkg)\n- [brew](https://brew.sh/index_fr) (mac OS X and linux)\n- **Remaken** packaging structure ([pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/) based)\n\n### Dedicated system tools :\n- apt-get (debian and derivatives)\n- [pacman](https://wiki.archlinux.org/title/pacman) (archlinux)\n- yum (redhat, fedora, centos)\n- zypper (openSUSE)\n- pkg (freebsd)\n- pkgutil (solaris)\n- [chocolatey](https://chocolatey.org/) (Windows)\n- [scoop](https://scoop-docs.vercel.app/) (Windows)\n- [others to come]\n\n## Command line usage samples\n### Initialize remaken default folder\n- ```remaken init```: creates the default .remaken folder.\n\nIt also initializes ```.remaken/rules/qmake``` with the [builddefs-qmake](https://github.com/b-com-software-basis/builddefs-qmake/releases/tag/builddefs-qmake-latest) release associated with the current remaken version. To get another version, use  ```remaken init --tag x.y.z```.  \nYou can also retrieve the latest qmake rules (latest rules reflects the current develop branch status) with ```remaken init --tag latest```.  \nAll qmake rules are retrieved from [builddefs-qmake](https://github.com/b-com-software-basis/builddefs-qmake/releases/tag/builddefs-qmake-latest).   \nThe ```remaken init``` command also supports the ```--force``` (alias ```-f```) to force reinstalling qmake rules and/or ```--override```  (alias ```-e```) to override existing files.   \n\n**Note:** ```remaken init``` need to be called with elevation rights (admin/sudo mode) \n\n### Install vcpkg\n- ```remaken init vcpkg```: initializes vcpkg (clone the vcpkg repository and bootstrap vcpkg)\n- ```remaken init vcpkg [--tag tag]```: initializes vcpkg (clone the vcpkg repository for tag [tag] and bootstrap vcpkg)\n\n### Install IDE wizards\nFor now, only QtCreator wizards are provided.   \nTo install the remaken, xpcf projects and classes wizards, use: \n- ```remaken init -w```\n- ```remaken init wizards```\n\n### Install Artefact Packager scripts\n\nTo install the artefact packager scripts for current OS in .remaken/scripts :\n- ```remaken init artefactpkg```: initializes artefact packager script (download script on https://github.com/b-com-software-basis/remaken/releases/tag/artifactpackager)\n- ```remaken init artefactpkg [--tag tag]```: initializes artefact packager script (download script on https://github.com/b-com-software-basis/remaken/releases/tag/artifactpackager for tag [tag])\n\n### Set remaken packages root folder\nThe remaken packages folder is the location where packages are installed, searched from ...\nThis folder defaults to ```$(HOME)/.remaken/packages```.\nIt can be changed in various ways:\n- define the ```REMAKEN_PKG_ROOT``` environment variable to another location.\n- create a ```.packagespath``` file in remaken root folder  ```$(HOME)/.remaken```. In this file, provide the path to your packages folder in the first line.\n- provide the package path with the ```--remaken-root``` parameter from remaken command line invocation.\n- put the ```remaken-root``` parameter and its value in the remaken ```config``` file in located in ```$(HOME)/.remaken```.\n\n### Managing remaken profiles\n\nRemaken has profile support to set several options once for all for every projects (for instance, the os, the architecture, the C++ standard ...).  \nIt also supports the creation of named profiles - it can be used for cross-platform builds (to target android systems for instance).\n\nTo initialize the default profile, use:   \n- ```remaken profile init```\n\nYou can also specify any value you want to set in the profile:\n- ```remaken profile init --cpp-std 17```\n- ```remaken profile init --apiKey XXX``` # artifactory apiKey can be set in the profile\n\nTo create a named profile, use:\n- ```remaken profile init [profile_name or path]```\n\nTo use a named profile for any command, run:\n- ```remaken --profile [profile_name or path] ...```\n\nTo display the default profile configuration:\n- ```remaken profile display```\n\nTo display a named profile configuration:\n- ```remaken --profile [profile_name or path] profile display```\n\nTo display options from the profile file and from default remaken values:\n- ```remaken profile display -w```\n\n\n### Searching dependencies\n- ```remaken search [--restrict packaging_system_name] package_name [package_version] ```\n\n```packaging_system_name``` is the name of the packaging system to search for this dependency. Its value depends on the operating system where remaken is used. \n\nOn mac OS X and linux, its value is one of ```[brew, conan, system or vcpkg]```.\n\nOn windows, its value is one of ```[choco, conan, scoop, system or vcpkg]```.\n\n### Managing remotes/repositories/ppa/taps/buckets ...\n\nTo get the list of installed remotes for every packaging system installed on the environment run:\n- ```remaken remote list```\n\nTo get the list of remotes declared in a packagedependencies.txt, run (using ```--recurse``` will list recursively every remote declared in every packagedependencies file in the dependency tree):\n- ```remaken remote listfile [--recurse] [path_to_remaken_dependencies_description_file.txt]```\n\nTo add the remotes declared in a packagedependencies.txt, run (using ```--recurse``` will add recursively every remote declared in every packagedependencies file in the dependency tree):\n- ```remaken remote add [--recurse] [path_to_remaken_dependencies_description_file.txt]```\n\nTo get a sample how to declare an additional remote/bucket/ppa ... see the ```repository_url``` section in chapter [Dependency file syntax](#dependency-file-syntax)\n\n\n### Installing/Configure dependencies\n- ```remaken install [--conan_profile conan_profile_name] [-r  path_to_remaken_root] -i [-o linux] -t github [-l nexus -u http://url_to_root_nexus_repo] [--cpp-std 17] [-c debug|release] [-m static|shared] [--project_mode,-p] [path_to_remaken_dependencies_description_file.txt] [--condition name=value]* [--conan-build dependency]* ```\n\n- ```remaken configure [--conan_profile conan_profile_name] [-r  path_to_remaken_root] -i [-o linux] -t github [-l nexus -u http://url_to_root_nexus_repo] [--cpp-std 17] [-c debug|release] [-m static|shared] [--project_mode,-p] [path_to_remaken_dependencies_description_file.txt] [--condition name=value]* ```\n\n**Notes:**\n \n- remaken_root defaults to ```$(HOME)/.remaken/packages``` or if ```REMAKEN_PKG_ROOT``` environment variable is defined, it defaults  to ```${REMAKEN_PKG_ROOT}```.   \n   ```[-r  path_to_remaken_root]``` allows to specify a specific Remaken packages root directory.\n- ```path_to_remaken_dependencies_description_file``` defaults to current folder ```packagedependencies.txt```file\n- ```[--project_mode,-p]```: enable project mode to generate project build files from packaging tools (conanbuildinfo.xxx, conanfile.txt ...).      \n   Project mode is enabled automatically when the folder containing the packagedependencies file also contains a QT project file\n- ```[--conan_profile conan_profile_name] ``` allows to specify a specific conan profile   \n   When ```--conan_profile ``` is not specified:\n  -  for native compilation: the ```default``` conan profile is used\n  -  for cross compilation: remaken expects a ```[os]-[build-toolchain]-[architecture]``` profile to be available - for instance for android build, expects a ```android-clang-armv8``` profile   \n- ```-i``` for ignore cache, then dependencies update is forced   \n- ```[-l nexus -u http://url_to_root_nexus_repo]``` allow s to specify alternate remote type, and alternate remote url   \n   ```[--invert-remote-order]``` allows to invert alernate remote type and url with default remote type and usrl used in packagedependencies file\n- ```[--conan_build dependency] ``` is a repeatable option, allows to specify to force rebuild of a conan dependency. Ex : ```--conan-build boost```.\n- ```[--condition name=value] ``` is a repeatable option, allows to force a condition without application prompt (useful in CI). Ex : ```--condition USE_GRPC=true```. \n\n#### Configure Conditions\n\nBy default, ```remaken install``` and ```remaken configure``` prompt users for enabled or disabled configure conditions.\n\n**Note:**\n\tA condition is defined just after library name with ```library name%[condition]``` in ```packagedependencies.txt``` file\n\na ```configure_conditions.pri``` file can be added into the project root folder to avoid user prompt :\n\n\tDEFINES+=CONDITION1\n\tDEFINES-=CONDITION2\n\nof\n\nAfter `remaken install` or `remaken configure`, a `configure_conditions.pri` file is generated in ```.build-rules/[os]-[build-toolchain]-[architecture]``` folder with specified (by file or by user_prompt) enabled conditions.\n\nThe generated file is used when run ```remaken install``` or ```remaken configure``` or ```qmake``` (on current project) for enable/disable dependencies automatically.    \nThen as only dependencies used are in the generated  ```.build-rules/[os]-[build-toolchain]-[architecture]/packagedependencies.txt```, only enabled condtions are generated in this file.   \n\n**Note:** ```[--condition name=value] ``` allows to force a condition without application prompt (useful in CI). Ex : ```--condition USE_GRPC=true```.   \n\n#### Specific to Configure  - Currently not used in projects\n\nAlso generates build flags in remaken build rules folder (```.build-rules/[os]-[build-toolchain]-[architecture]```) :\n\n- a master file ```dependenciesBuildInfo.pri``` includes\n  - ```conanbuildinfo.pri``` : conan dependencies flags\n  - ```remakenbuildinfo.pri``` : remaken dependencies flags \n\nThis file can be used automatically in qmake projects by using ```use_remaken_parser``` value in ```DEPENDENCIESCONFIG```, ```CONFIG``` or ```REMAKENCONFIG``` value.\nIt disables package dependencies parsing made by **builddefs-qmake** rules.\n \n### Bundling dependencies together\n```remaken bundle [--recurse] [-d path_to_bundle_destination] [--cpp-std 11|14|17|20] [-c debug|release] [path_to_remaken_dependencies_description_file.txt]```\n\nNote: ```remaken_dependencies_description_file``` defaults to current folder ```packagedependencies.txt```file.\n\n\n### Bundling XPCF applications\n```remaken bundleXpcf -d path_to_root_destination_folder -s relative_install_path_to_modules_folder --cpp-std 17 -c debug xpcfApplication.xml```\n\n### Checking packagedependencies file format validity\n```remaken parse [path_to_remaken_dependencies_description_file.txt]```\n\n### Removing installed remaken dependencies\n```remaken clean```\n\n### Listing dependencies tree from a packagedependencies.txt file\n```remaken info [path_to_remaken_dependencies_description_file.txt]```: displays the recursive dependency tree from the file.\n```remaken info pkg_systemfile -d path_to_write_pkgfile [path_to_remaken_dependencies_description_file.txt]```: generates pkg system files from packagedependencies files into specified folder - currently Only conan is managed.\n```remaken info [path_to_remaken_dependencies_description_file.txt] [-p [-m static|shared]]```: displays include, lib, and bin paths of all dependencies. can take an optionnal ```mode``` option (static or release) for defined default use mode.\n\n### Listing remaken installed packages\nThe **list** command allows to :\n\n- ```remaken list```: list all remaken installed packages\n- ```remaken list [package name]```: list all installed versions of a remaken package \n- ```remaken list --regex [package name regular expression]```: list all installed versions of remaken packages whose names match a regex \n- ```remaken list [package name] [package version]```: list all files for a specific version of a remaken package \n\n```remaken list``` also has a ```--tree```flag. When this flag is set, ```remaken list``` displays packages informations and their dependencies tree.\n\n### Running applications\nremaken can be used to ease application run by gathering all shared libraries paths and exposing the paths in the appropriate environment variable (LD_LIBRARY_PATH for unixes, DYLD_LIBRARY_PATH for mac and PATH for windows)\n\n```remaken run [-c debug|release] run --env [--ref remaken package reference] [--deps path_to_remaken_dependencies_description_file.txt] [--xpcf path_to_xpcf_configuration_file.xml] [--app path_to_executable] [--name ]-- [executable arguments list]```\n\nremaken also allow to run an application installed in remaken packages structure from its package reference (i.e [package name:package version]).\n```remaken run [-c debug|release] --ref [package name:package version]```\nIn this configuration, dynamic dependencies are searched in the package dependencies file and added to the platform library search path.\n\nIf an xpcf xml file is installed in the package folder or next to the application binary, the xpcf xml file is parsed to add the modules and their dependencies to the platform library search path.\n\nFor instance: ```remaken run -c debug --ref testxpcf:2.5.1```\nThe ```--ref``` option can be used with other options, especially to overwrite the application name if it differs from the package name, or to retrieve the environment set using ```--env```.\n\n```--app``` represents the complete application filepath including the filename.\n\n**Note** : options in **[executable arguments list]** starting with a dash (-) must be surrounded with quotes and prefixed with \\ for instance **\"\\\\-f\"** to forward **-f** option to the application (this is due to CLI11 interpretation of options).\n\n## Dependency file types\n### packagedependencies.txt dependency file\n\nFor each project, a ```packagedependencies.txt``` file can be created in the root project folder.\n\nFor dependencies specific to a particular os, a ```packagedependencies-[os].txt``` can also be created in the root project folder (os is a value in ```{android, linux, mac, win }``` ).\n\n### extra-packages.txt dependency file\nAn ```extra-packages.txt``` file can also be created along the ```packagedependencies.txt``` file.\n\nThe ```extra-packages.txt``` file can be used to add dependencies to install and bundle steps. Dependencies listed in the ```extra-packages.txt``` file will not be used by configure steps, or by the project build rules. \n\nThe ```extra-packages.txt``` purpose is to:\n\n- install and bundle sub-dependencies needed by a project direct dependency when the direct dependency doesn't install its sub-dependency. (for instance, the conan opencv recipe doesn't install gtk+ on linux, but gtk+ is needed when a project uses opencv::imgui, hence the opencv conan recipe is \"incomplete\" as the imgui functionality is disabled when the gtk+ package is missing)\n- install non-dependency packages : for instance install data needed by an application, configuration files ...\n\nFor packages specific to a particular os, an ```extra-packages-[os].txt``` can also be created in the root project folder (os is a value in ```{android, linux, mac, win }``` ).\n\n### packagignoreinstall.txt dependency file\n\nAn ```packagignoreinstall.txt``` file can also be created along the ```packagedependencies.txt``` file.\n\nThe ```packagignoreinstall.txt``` can be used to ignore dependencies to install at bundle steps.   \nDependencies listed in the ```packagignoreinstall.txt``` file will not be used by configure steps, or by the project build rules.\n\nEach ```framework_name``` are ignored (as defined in ```packagedependencies.txt``` file) with the pattern\n\n\tframework1 framework2\n\nor\n\n\tframework1 \n\tframework2\n\n## packagedependencies.txt/extra-packages.txt file syntax\n\nThe project build rules (builddefs-qmake for instance) will generate a packagedependencies.txt containing the build informations and will gather the dependencies in the original packagedependencies.txt and packagedependencies-[os].txt for the target os the build is run for.\n\n### Line syntax\nEach line follows the pattern :\n\n```framework#channel | version | library name%[condition] | identifier@repository_type | repository_url | link_mode | options```\n\n[more informations ](https://github.com/b-com-software-basis/builddefs-qmake/tree/develop#dependencies-declaration-file)\n\n\n| ```framework[#channel]``` | ```version``` | ```library name%[condition]``` | ```repository_type``` | ```repository_url``` | ```link_mode``` | ```options```|\n|---|---|---|---|---|---|---|\n|the framework name. Optionnally the channel to get the package from |the version number|the library name| a value in: [ artifactory, nexus, github or http (http or https public repositories), vcpkg, conan, system, path : local or network filesystem root path hosting the dependencies ]|---|optional value in : [ static, shared, default (inherits the project's link mode), na (not applicable) ] |---|\n\n**Note:**\nTo comment a line (and thus ignore a dependency) start the line with ```//``` (spaces and tabs before the ```//``` are ignored).\n\nNOT IMPLEMENTED :\nFor artifactory, nexus and github repositories, channel is a named scope describing a common combination of compile options from the remaken packaging manifests. The combination of values become a named scope. (TODO : manage named scopes)\nIt is not used for other kind of repos.\n\n### Fields specifications\n| ```framework#channel``` |\n|---|\n|when channel is not specified, it defaults to stable for conan dependencies| \n\n| ```repository_type``` |\n|---| \n|When repository\\_type is not specified :\u003cbr\u003e- it defaults to artifactory when identifier is either bcomBuild or thirdParties (and in this case, the identifier is also the destination subfolder where the dependencies are installed)\u003cbr\u003e- it defaults to system when identifier is one of yum, apt, pkgtool, pkgutil, brew, macports, pacman, choco, zypperFor other repository types (github, vcpkg, conan, system) \u003cbr\u003eWhen the identifier matches the repository type,the repository type reflects the identifier value - i.e. identifier = conan means repository\\_type is set to conan.\u003cbr\u003eWhen identifier is not specified :- @repository\\_type is mandatory| \n\n| ```repository_url ``` |\n|---| \n|repository url can be:\u003cbr\u003e- the repository url for github, artifactory or nexus repositories\u003cbr\u003e\u003cbr\u003eFor brew, scoop, apt and conan, the repository will be added before the dependency installation.\u003cbr\u003eFor those systems, the url format is:\u003cbr\u003e- for brew taps it will be either user/repo or user/repo#repository\\_url\u003cbr\u003e- for scoop buckets it will be either repo\\_identifier or repo\\_identifier#repository\\_url\u003cbr\u003e- for conan it will be repo\\_identifier#repository\\_url[#position]\u003cbr\u003e- for apt it will be the ppa url\u003cbr\u003e|\n\n| ```options ``` |\n|---| \n|options are directly forwarded to the underlying repository tool.\u003cbr\u003eNote : to provide specific options to dedicated system packaging tools, use one line for each specific tool describing the dependency.\u003cbr\u003e(once installed, system dependencies should not need specific options declarations during dependencies' parsing at project build stage. Hence the need for the below sample should be close to 0, except for packaging tools that build package upon install such as brew and macports and where build options can be provided).|\n\n\n### Dependencies samples\n| ```samples ``` |\n|----------------|\n|eigen \\| 3.3.5 \\|  eigen \\|  system \\|  https://github.com/SolarFramework/binaries/releases/download|\n|eigen \\| 3.3.5 \\| eigen | brew@system | https://github.com/SolarFramework/binaries/releases/download | default | -y|\n|eigen \\| 3.3.5 \\| eigen \\| pkgtool@system \\| https://github.com/SolarFramework/binaries/releases/download \\| default \\| --S#--noconfirm\n|opencv \\| 3.4.3 \\| opencv \\| thirdParties@github \\| https://github.com/SolarFramework/binaries/releases/download|\n|xpcf \\| 2.1.0 \\| xpcf \\| bcomBuild@github \\| https://github.com/SolarFramework/binaries/releases/download \\| static|\n|spdlog \\| 0.14.0 \\| spdlog \\| thirdParties@github \\| https://github.com/SolarFramework/binaries/releases/download|\n|eigen \\| 3.3.5 \\| eigen \\| system \\||\n|fbow \\| 0.0.1 \\| fbow \\| vcpkg \\||\n|boost#stable \\| 1.70.0 \\| boost \\| conan \\| conan-center\n|spdlog \\| 0.14.0 \\| spdlog \\| bincrafters@conan \\| conan-center \\| na\n|freeglut#testing \\| 3.0.0 \\| freeglut \\| user@conan \\| https://github.com/SolarFramework/binaries/releases/download|\n\n### Packaging systems specificities\n**github, artifactory, nexus and path** dependencies are installed using remaken packaging format through an url or filesystem repository.\n\n**system** dependencies are installed using operating system dependent package manager (apt for linux debian and derivatives, brew for Mac OS X, chocolatey for windows...)\n\n**conan** dependencies are installed using packaging format with conan package manager. conan url must match a declared remote in conan (remotes added with ```conan remote add```).\n\n**vcpkg** dependencies are installed using vcpkg packaging format with vcpkg package manager\n\nWARNING : using system without any OS option implies the current system the tool is run on.\nMoreover, some OSes don't have a package manager, hence don't rely on system for android cross-compilation for instance.\n\n## Remaken packaging structure\n\n### Package tree\n\n```\nPackageName\n|- PackageVersion (X.X.X)\n|-- interfaces\n|--- [here your header files]\n|-- lib\n|--- architecture (x86_64, arm64, ...)\n|---- mode (shared or static)\n|----- config (debug or release)\n|------ [your libraries here in release mode]\n|-- remaken-PackageName.pc\n|-- packagedependencies.txt (if your Package requires third-parties) or packagedependencies-static.txt (if your package is in static build mode)\n|-- PackageName-PackageVersion_remakeninfo.txt\n|-- .pkginfo\n|--- [.headers and/or .lib, and/or .bin folders]\n|-- [... specific dependendy files] (wizards, csharp, xml for instance)\n```\n\n### Packaging your third parties\n\nRemaken uses a ```packagedependencies.txt``` file defining all dependencies of your project. This file is interpreted by the QMake build script tools and is based on a simple dependency file (.pc).\nThus, by maintaining a simple dependency file and by using the remaken package tree describing the third parties used by your project, you will be able to download the dependencies, link and build your project, and install and deploy your solution with all its dependencies in a very simple way.\n\nLet’s describe now how to package the third parties required by your project in order to be compliant with the dependency manager and the build and install the project.\n\nTo create your package, you have to create the the package tree structure described above.\n\n#### remaken-DependencyName.pc\n\nThis file is used by `pkg-config` to provide the necessary details for compilng and linking a program to a library.\nIf this file is not already provided with your third party, you will have to create it:\n\n```\nlibname=PackageName\nprefix=/usr/local\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/lib\nincludedir=${prefix}/interfaces\nName: PackageName\nDescription: The PackageName library\nVersion: PackageVersion\nRequires:\nLibs: -L${libdir} -l${libname}\nLibs.private: ${libdir}/${pfx}${libname}.${lext}\nCflags: -I${includedir}\n```\n\nFor more information concerning the syntax of this pkg-config file, you can take a look to the [pkg-config guide](https://people.freedesktop.org/~dbn/pkg-config-guide.html).\n\n#### packagedependencies.txt\n\n```Remaken``` and [builddefs-qmake](https://github.com/b-com-software-basis/builddefs-qmake) support the recursive dependency download, link, and installation. But in order to do so, your package must precise its own dependencies in the packagedependencies.txt. \n\n#### PackageName-PackageVersion_remakeninfo.txt\n\nThis file is specific to remaken and https://github.com/b-com-software-basis/builddefs-qmake, and define the platform, the C++ version and the runtime version used to build your package. This file is similar to the ```conaninfo.txt``` used by conan.\n\n```\nplatform=win-cl-14.1\ncppstd=17\nruntime=dynamicCRT\n```\n\n#### Artifact Packager\n\nWhen the previous files, your interfaces, your libraries and/or your binaries are ready and well-placed in the folder structure detailed above, you can package the dependency by using the ArtifactPackager scripts.\n\nIn scripts folder :\n\n\t- win_artiPackager.bat\n\t- unixes_artiPackager.sh\n\t- mac_artiPackager.sh \n\nJust run the ArtifactPackager script for current Os at the root folder of your package, and it will automatically create folder(s) for each version :\n\n\t`architecture_mode_config`  \t\t\t\t\t\t\t\t\t\t// \tfor instance : `x86_64_shared_release` \n\nEach folder contains a zip file with name format :\n\n\t`PackageName_PackageVersion_architecture_mode_config.zip` \t\t\t// \tfor instance : `xpcf_2.5.0_x86_64_shared_release.zip` \n\nThis package name format must be respected and will be used by remaken to find the dependency required for a requested development environment.\n\n#### Share your package online\n\nIn order for Remaken to find the package corresponding to the requested dependency, you have to respect the following formatting rules concerning the URL to download your package: \n\n\tURL_root/PackageName/PackageVersion/platform/PackageName_PackageVersion_architecture_mode_config.zip\n\nWhere:\n\n- URL_root is the URL where you host your packages (github / artifactory ...)\n- platform can be win, linux, mac, android, etc.\n\n## Building remaken\n- Install pkg-config, cmake, conan\n- Install msvc2019 community for build native desktop (Windows only) \n- install a msvc2019 Qt kit for use qmake/jom (Windows only) or a gcc Qt kit (unixes)\n\n### Linux build\nfrom the ```scripts/unixes``` folder, run ```./build_remaken.sh```\n\n### Windows build\nfrom the ```scripts/win``` folder, run ```./build_remaken.bat```\n\n### Mac OS build\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fb-com-software-basis%2Fremaken","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fb-com-software-basis%2Fremaken","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fb-com-software-basis%2Fremaken/lists"}