How to add a changelog to an RPM created with CPack - cmake

In a typical spec file there is a changelog section. I now use CPack and was wondering how to add such a section. I can't find information about that on the web.
Could I use an external file and indicate it to CPack for example ?

If you pack a RPM file use CPACK_RPM_CHANGELOG_FILE
May be used to embed a changelog in the spec file. The refered file will be read and directly put after the %changelog section.

Related

Change options of already used latex package with doxygen

I'm using cmake with doxygen to generate documentation based on some markdown files. There are some special characters in those markdown files that I can't control (add by users and I just run my script). I found a solution by using the option utf8x instead of just utf8 with the inputenc package and use ucs package as well.
So, I added the following line into CMakeLists.txt file:
set(DOXYGEN_EXTRA_PACKAGES ucs "[utf8x]{inputenc}")
Which lead to having the following lines in refman.tex file:
% Packages requested by user
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
The problem is, there is already \usepackage[utf8]{inputenc} in the file which lead to an error on generating the pdf file using make pdf.
I can solve that by have a special bash/python script that replaces \usepackage[utf8]{inputenc} with whatever I want, but it seems strange to me that there is no way to make doxygen replaces/removes aready used packages as there is already EXTRA_PACKAGES which can be used to add extra packages.

Specify markdown description in csproj file

When using dotnet pack, I can use properties like RepositoryUrl to use as the resulting .nuspec file's repository URL etc.
But what property do I set to specify markdown content? Is it even possible to specify via .csproj files?
If not, how do I do it in a .nuspec file? The documentation is very lacking. According to this link, some interns have apparently published the feature - but how do I use it?
Update: You can use NuspecProperties as a Semicolon separated list of key=value pairs.
Here the complete command reference for csproj, in particular you have to set the documentation property as below reference:
According to this Nuspec documentation
You can specify the property documentation
<documentation src="documentation.md" />
in your .nuspec file.
target defaults to package root
Supported formats - md
On pack, strip source value, append the target value with the source file name - <documentation target="documentation.md"/>. (this is to help the gallery and the client know the path to the documentation file in the package and the file name.extension. Allows for extension validation, etc.)
nuget spec will add
<!-- e.g. <documentation src="documentation.md"/>. Learn more at https://aka.ms/nugetPackageDocumentation-->
<documentation src=""/>
package submitted to NuGet.org - target should not be null
Sidenote: this answer comes with a documentation resource published later than when the question was asked.

How to make CMake reconfiguration depend on custom file?

I have a project under CMake with some files generated with python generator from XML files. I cannot specify all files generated by this generator in CMakeLists.txt so I use file globbing for this.
The problem is that when I update my XML files or generator sources (which are in the same repository) I would like to have my build system reconfigured so changed files are taken into account when rebuilding the code (via make for example).
Is it possible to make CMake treat some files like it treats CMakeLists.txt files and to make it regenerate build system when those file are changed?
It doesn't require any kind of workarounds. The standard way is to use CMAKE_CONFIGURE_DEPENDS property:
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS <filename>)
Yes, you should be able to do that by (ab)using configure_file(). Configuring a file makes the source a dependency of the CMake run, so that any changes in it cause a reconfiguration. Simply like this:
configure_file(MyInputFile.xml DummyOutput.xml)
Since it has been a while I will add to #roolebo's answer.
There's actually a better command to add a dependency on a file:
set_directory_properties(PROPERTIES CMAKE_CONFIGURE_DEPENDS <relative_or_full_path_to_file>)
What might be confusing is that this command adds a property to the current directory. Well, it does not matter since you can set a full path to a file that resides outside of the current directory's scope, for instance: ../../config.json

How to install a FindXXX.cmake to a correct location?

I am developing a library which uses CMake to control it. It would be good to provide a "FindXXX.cmake" which locates the library and header files. This file would enable the users to use the command "find_package(XXX)" to find my library.
However, I don't know how to install my lib's "FindXXX.cmake" to an correct location. I failed to find a CMake's build-in mechanism to install a "FindXXX.cmake". In addition, CMake's variable "CMAKE_MODULE_PATH" is a list of directories, so I cannot install according to that vairable because I cannot decide which specific directory to use.
If the copy of CMake is installed to a standard location(i.e. use no prefix etc) then this can be done by placing the file in /usr/share/cmake/Modules/ directory.
If you are going to supply a bundle probably you can add some commands to check if the cmake is available. if yes you can check for cmake --system-information|grep _INCLUDED_SYSTEM_INFO_FILE value from that to get modules directory.
Otherwise there's no way you can do that.
A workaround can be done i.e. if there is a binary in your bundle then you can add a command line option for placing this file.

Creating a WiX patch from single file location

I am trying to create a patch for my application. Implementing the example described here worked as expected. However, the files for each version are stored in separate directories. Version 1.0 files are in c:sample\1.0 and 1.1 files are in c:sample\1.1. If I move the files to a single location, create the 1.0 installer, modify the files, and create the 1.1 installer; wixmst output of torch contains no differences. When I run pyro I get:
warning PYRO1079 : The cabinet 'media1.cab' does not contain any files. If this patch contains no files, this warning can likely be safely ignored. Otherwise, try passing -p to torch.exe when first building the transforms, or add a ComponentRef to your PatchFamily authoring to pull changed files into the cabinet.
This is a problem for me because the files for my project are kept in a single git repository. We use branching and tagging to delineate versions. Because of this I only have one directory of files.
I have the .msi and .wixpdb for both versions.
How can I create my patch in this situation?
Pyro requires access to the .wixmst and the old and new files. If you only have one set of files (newer or older) then the patch will obviously find no file differences. That is why you are getting the error from Pyro.
If you use bindpaths to create the original .msi files (and their .wixpdbs) then you can provide the old paths using the -bt switch to pyro and the new paths to the -bu switch. If you didn't use bindpaths and you need to recreate the old directory structure for the old files and create a new directory structure for the new files.
If you can't get the old and new files to be found (bindpaths work best) then you'll have to do admin image type patching.