asyncplusplus icon indicating copy to clipboard operation
asyncplusplus copied to clipboard

[question] Build both static and dynamic versions of the library

Open Peter2121 opened this issue 2 years ago • 8 comments

According to the wiki, build option BUILD_SHARED_LIBS permits to select between static and dynamic versions of the library to build. Is there any way to build at the same time (without re-configuring the build) the both versions? I want to create a FreeBSD port of the library (it works correctly under FreeBSD), and I would like to install both versions by default.

Peter2121 avatar Dec 03 '23 20:12 Peter2121

preferred way would be to run cmake configure/build twice i think.

kikaxa avatar Feb 09 '24 16:02 kikaxa

@kikaxa No problems to do like this in case of a manual build. But it is impossible in case of automatic build (package). Normally one build is started, it should provide everything to pack.

Peter2121 avatar Feb 21 '24 09:02 Peter2121

static version is only usable for devs(vs dynamic being used by other packages), and should be a separate -dev pkg imo. you can specify dependencies to install one/both as needed Screenshot 2024-02-21 at 11 04 01

..for c++ project dependency management, i would recommend using dev/language specific dependency/package managers, as opposed to system. e.g. submodules, cpm/vcpkg/conan etc

kikaxa avatar Feb 21 '24 10:02 kikaxa

@kikaxa Sorry, you explain Linux packaging approach. I work with FreeBSD, it's different. There is no xxxx-dev packages there. Yes, I would like to use Conan, but this library is not present there.

Peter2121 avatar Feb 21 '24 10:02 Peter2121

there certainly is dev packages. Screenshot 2024-02-21 at 13 22 16

kikaxa avatar Feb 21 '24 12:02 kikaxa

The screenshot shows two different ports. Yes, it is a possible approach - create two different ports with different build options, each one would produce a package with different content. Then, it is important to manage conflicts. For example, if I have an installed package (or several packages) that depends on non-dev version, and I want to build a software that needs a dev version - I need to uninstall the non-dev version and all dependent packages. To avoid this - the filenames in two packages should be different (or two packages install different set of files). IMHO, build both versions of the library is mush more simple. This is an approach used in (almost) all libraries ports.

Peter2121 avatar Feb 21 '24 13:02 Peter2121

can you provide a sample pkg (preferable cmake-) portsfile that does that? if it is common and clean, i see no problem implementing that

kikaxa avatar Feb 21 '24 14:02 kikaxa

I've already created a PR here, implementing this type of build. Hope, someone could test it on different systems and review the CMAKE code, so the author would merge it. I used another library as a model, the port is here

Peter2121 avatar Feb 22 '24 19:02 Peter2121