{"id":21683404,"url":"https://github.com/stonestepsinc/libexif-nuget","last_synced_at":"2026-05-16T23:02:31.912Z","repository":{"id":62326783,"uuid":"540988179","full_name":"StoneStepsInc/libexif-nuget","owner":"StoneStepsInc","description":"This project builds a libexif Nuget package with static libraries and header files for the x64 platform and Debug/Release configurations.","archived":false,"fork":false,"pushed_at":"2022-11-10T21:06:00.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-28T11:40:20.572Z","etag":null,"topics":["exif","libexif","library","native","nuget"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/StoneStepsInc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-24T22:50:18.000Z","updated_at":"2022-10-30T18:56:27.000Z","dependencies_parsed_at":"2022-10-30T20:45:36.679Z","dependency_job_id":null,"html_url":"https://github.com/StoneStepsInc/libexif-nuget","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StoneStepsInc%2Flibexif-nuget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StoneStepsInc%2Flibexif-nuget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StoneStepsInc%2Flibexif-nuget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StoneStepsInc%2Flibexif-nuget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StoneStepsInc","download_url":"https://codeload.github.com/StoneStepsInc/libexif-nuget/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244601399,"owners_count":20479449,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["exif","libexif","library","native","nuget"],"created_at":"2024-11-25T16:11:48.228Z","updated_at":"2026-05-16T23:02:31.846Z","avatar_url":"https://github.com/StoneStepsInc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## libexif Nuget Package\r\n\r\nThis project builds a libexif Nuget package with static libexif\r\nlibraries and header files  for the `x64` platform and `Debug`/\r\n`Release` configurations.\r\n\r\nVisit libexif website for additional information about the libexif\r\nproject and library documentation:\r\n\r\nhttps://github.com/libexif/libexif\r\n\r\n## Package Configuration\r\n\r\nThe libexif static library appropriate for the platform and\r\nconfiguration selected in a Visual Studio solution is explicitly\r\nreferenced within this package and will appear within the solution\r\nfolder tree after the package is installed. The solution may need\r\nto be reloaded to make the library file visible. This library may\r\nbe moved into any solution folder after the installation.\r\n\r\nNote that the libexif library path in this package is valid only\r\nfor build configurations named `Debug` and `Release` and will\r\nnot work for any other configuration names. Do not install this\r\npackage for projects with configurations other than `Debug` and\r\n`Release`.\r\n\r\nSee `StoneSteps.libexif.VS2022.Static.props` and\r\n`StoneSteps.libexif.VS2022.Static.targets`\r\nfor specific package configuration details and file locations.\r\n\r\nLibraries in this package do not have libexif localization\r\nenabled and will return field names only in ASCII. This should\r\nnot affect EXIF data, which may contain characters other than\r\nASCII, even though EXIF requires ASCII. Many software packages\r\nwill store UTF-8 characters in EXIF fields, which is a willful\r\nviolation of the EXIF specification.\r\n\r\n## Building a Nuget Package\r\n\r\nThis project can build a Nuget package for libexif either locally\r\nor via a GitHub workflow. In each case, following steps are taken.\r\n\r\n  * libexif source archive is downloaded from libexif's website and\r\n    its SHA-256 signature is verified.\r\n\r\n  * The default `config.h.in` is patched to work with Visual C++\r\n    2022.\r\n\r\n  * VS2022 Community Edition is used to build libexif libraries\r\n    locally and Enterprise Edition to build libraries on GitHub.\r\n\r\n  * Build artifacts for all platforms and configurations are\r\n    collected in staging directories under `nuget/build/native/lib`.\r\n\r\n  * `nuget.exe` is used to package staged files with the first\r\n    three version components used as a libexif version and the last\r\n    version component used as a package revision. See _Package\r\n    Version_ section for more details.\r\n\r\n  * The Nuget package built on GitHub is uploaded to [nuget.org][].\r\n    The package built locally is saved in the root project\r\n    directory.\r\n\r\n## Package Version\r\n\r\n### Package Revision\r\n\r\nNuget packages lack package revision and in order to repackage\r\nthe same upstream software version, such as libexif v0.6.24, the\r\n4th component of the Nuget version is used to track the Nuget\r\npackage revision.\r\n\r\nNuget package revision is injected outside of the Nuget package\r\nconfiguration, during the package build process, and is not present\r\nin the package specification file.\r\n\r\nSpecifically, `nuget.exe` is invoked with `-Version=0.6.24.123`\r\nto build a package with the revision `123`.\r\n\r\n### Version Locations\r\n\r\nlibexif version is located in a few places in this repository and\r\nneeds to be changed in all of them for a new version of libexif.\r\n\r\n  * nuget/StoneSteps.libexif.VS2022.Static.nuspec (`version`)\r\n  * devops/make-package.bat (`PKG_VER`, `PKG_REV`, `LIBEXIF_FNAME`,\r\n    `LIBEXIF_SHA256`)\r\n  * .github/workflows/build-nuget-package.yml (`name`, `PKG_VER`,\r\n    `PKG_REV`, `LIBEXIF_FNAME`, `LIBEXIF_SHA256`)\r\n\r\n`LIBEXIF_SHA256` ia a SHA-256 checksum of the libexif package file and\r\nneeds to be changed when a new version of libexif is released.\r\n\r\nVerify that the new libexif archive follows the directory name\r\npattern used in the `LIBEXIF_DNAME` variable.\r\n\r\nIn the GitHub workflow YAML, `PKG_REV` must be reset to `1` (one)\r\nevery time libexif version is changed. The workflow file must be\r\nrenamed with the new version in the name. This is necessary because\r\nGitHub maintains build numbers per workflow file name.\r\n\r\nFor local builds package revision is supplied on the command line\r\nand should be specified as `1` (one) for a new version of libexif.\r\n\r\n### GitHub Build Number\r\n\r\nBuild number within the GitHub workflow YAML is maintained in an\r\nunconventional way because of the lack of build maturity management\r\nbetween GitHub and Nuget.\r\n\r\nFor example, using build management systems, such as Artifactory,\r\nevery build would generate a Nuget package with the same version\r\nand package revision for the upcoming release and build numbers\r\nwould be tracked within the build management system. A build that\r\nwas successfully tested would be promoted to the production Nuget\r\nrepository without generating a new build.\r\n\r\nWithout a build management system, the GitHub workflow in this\r\nrepository uses the pre-release version as a surrogate build\r\nnumber for builds that do not publish packages to nuget.org,\r\nso these builds can be downloaded and tested before the final\r\nbuild is made and published to nuget.org. This approach is not\r\nrecommended for robust production environments because even\r\nthough the final published package is built from the exact\r\nsame source, the build process may still potentially introduce \r\nsome unknowns into the final package (e.g. build VM was updated).\r\n\r\n## Building Package Locally\r\n\r\nYou can build a Nuget package locally with `make-package.bat`\r\nlocated in `devops`. This script expects VS2022 Community Edition\r\ninstalled in the default location. If you have other edition of\r\nVisual Studio, edit the file to use the correct path to the\r\n`vcvarsall.bat` file.\r\n\r\nRun `make-package.bat` from the repository root directory with a\r\npackage revision as the first argument. There is no provision to\r\nmanage build numbers from the command line and other tools should\r\nbe used for this (e.g. Artifactory).\r\n\r\n## Sample Application\r\n\r\nA Visual Studio project is included in this repository under\r\n`sample-libexif` to test the Nuget package built by this project.\r\nThis application dumps all EXIF tags found in a supplied image\r\nfile.\r\n\r\nIn order to build `sample-libexif.exe`, open Nuget Package manager\r\nin the solution and install either the locally-built Nuget package\r\nor the one from [nuget.org][].\r\n\r\n[nuget.org]: https://www.nuget.org/packages/StoneSteps.libexif.VS2022.Static/\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstonestepsinc%2Flibexif-nuget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstonestepsinc%2Flibexif-nuget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstonestepsinc%2Flibexif-nuget/lists"}