On Monday, 6 March 2023 at 05:59:09 UTC, Mike Parker wrote:
On Monday, 6 March 2023 at 02:09:23 UTC, ryuukk_ wrote:
dub should build a static library for the project i build,
that includes each library it uses that are referenced as
"library" since the default is "staticLibrary" according to
rikki
What you're asking for is a different use case. `staticLibrary`
is for compiling a specific dub package as a static library. It
does not imply that all of that package's dependencies should
also be compiled into a single static library. Nor should it.
You're asking for a package and its dependencies to be bundled
for use outside of the dub ecosystem as a single static
library. I won't say it's not a legitimate use case, it's just
not one that dub currently supports, nor was it originally
intended to (I wouldn't expect it to be a common one either,
but then again common expectations are always changing).
As a potential dub enhancement, e.g., `staticLibraryBundle`, I
do agree it's worth exploring. I don't believe you can expect
every package to "just work" in that environment. As Steve
mentioned, there will always be link-time dependencies to any
shared libraries on which those bundled libraries depend. And
some packages may be set up in a way that causes issues, as
Rikki noted when he said he had to make some tweaks on his
successful build.
But for the time being, dealing with static libraries in D is
just the same as dealing with them in the C and C++ world. They
always have been a PITA to deal with, and that's why the trend
in recent years has been to move away from them. Build tools
like dub hide them from you when used as intended. It's when
you mix build systems that you run into trouble.
Still, I suggest you send an email to soc...@dlang.org as part
of the Gripes and Wishes campaign so that this gets added into
the dataset. Anything that enhances dub's usability should be
looked at.
Having a way to define a static library bundle is really great.
It does help a lot when you create a package where it is
initialized in non D code.
Right now, this is the third time I'm going to need it for my
engine, for MacOS I need to manually assign my dependencies, and
having only the main code as a library doesn't work for that
purpose. I have done before a simple program which executes dub
describe for taking the dependencies then I build the program as
a staticLibrary, problem is that this requires a 2-pass build and
it is not standard.