meson: Meson 0.52.0 no longer builds D shared libraries on Linux
The unit_threaded Meson build used to work fine. I built unit_threaded 0.10.3 using the Meson build of the time 2019-10-15 which I think was a Meson 0.51.1 setup from 2019-07-24. On upgrading the unit_threaded Git repository to try and build 0.10.4, Ninja did a rebuild of build files due to Meson 0.51.1 → 0.52.0 and now I get the error:
|> ninja
[31/35] Linking target libunit-threaded.so.0.10.4.
FAILED: libunit-threaded.so.0.10.4
ldc2 -of=libunit-threaded.so.0.10.4 'unit-threaded@sha/.._source_unit_threaded_attrs.d.o' 'unit-threaded@sha/.._source_unit_threaded_io.d.o' 'unit-threaded@sha/.._source_unit_threaded_light.d.o' 'unit-threaded@sha/.._source_unit_threaded_package.d.o' 'unit-threaded@sha/.._source_unit_threaded_reflection.d.o' 'unit-threaded@sha/.._source_unit_threaded_should.d.o' 'unit-threaded@sha/.._source_unit_threaded_static_.d.o' 'unit-threaded@sha/.._source_unit_threaded_testcase.d.o' 'unit-threaded@sha/.._subpackages_assertions_source_unit_threaded_assertions.d.o' 'unit-threaded@sha/.._subpackages_exception_source_unit_threaded_exception.d.o' 'unit-threaded@sha/.._subpackages_from_source_unit_threaded_from.d.o' 'unit-threaded@sha/.._subpackages_integration_source_unit_threaded_integration.d.o' 'unit-threaded@sha/.._subpackages_mocks_source_unit_threaded_mock.d.o' 'unit-threaded@sha/.._subpackages_property_source_unit_threaded_property.d.o' 'unit-threaded@sha/.._subpackages_property_source_unit_threaded_randomized_benchmark.d.o' 'unit-threaded@sha/.._subpackages_property_source_unit_threaded_randomized_gen.d.o' 'unit-threaded@sha/.._subpackages_property_source_unit_threaded_randomized_package.d.o' 'unit-threaded@sha/.._subpackages_property_source_unit_threaded_randomized_random.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_attrs.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_factory.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_io.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_options.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_package.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_reflection.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_runner.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_static._.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_testcase.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_testsuite.d.o' 'unit-threaded@sha/.._subpackages_runner_source_unit_threaded_runner_traits.d.o' -L=--start-group -L-soname,libunit-threaded.so.0 -L=--end-group -L--allow-shlib-undefined -relocation-model=pic
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o:function _start: error: undefined reference to 'main'
collect2: error: ld returned 1 exit status
Error: /usr/bin/gcc failed with status: 1
[33/35] Compiling D object 'gen-ut-main@exe/.._gen_source_unit_threaded_runtime_runtime.d.o'.
ninja: build stopped: subcommand failed.
The Meson file for unit_threaded is:
# -*- mode: python; -*-
project(
'unit-threaded',
'd',
version: '0.10.4',
meson_version: '>=0.48',
default_options: ['buildtype=release'],
)
main_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../source/unit_threaded/*.d').stdout().split()
assertions_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/assertions/source/unit_threaded/*.d').stdout().split()
exception_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/exception/source/unit_threaded/*.d').stdout().split()
from_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/from/source/unit_threaded/*.d').stdout().split()
integration_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/integration/source/unit_threaded/*.d').stdout().split()
mocks_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/mocks/source/unit_threaded/*.d').stdout().split()
property_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/property/source/unit_threaded/*.d').stdout().split()
property_subpackage_randomized_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/property/source/unit_threaded/randomized/*.d').stdout().split()
runner_subpackage_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../subpackages/runner/source/unit_threaded/runner/*.d').stdout().split()
# Treat the single source file packages differently to those with multiple files including a package.d file.
install_headers(main_source, subdir: 'd/unit_threaded')
install_headers(assertions_subpackage_source, subdir: 'd/unit_threaded') # Single file package.
install_headers(exception_subpackage_source, subdir: 'd/unit_threaded') # Single file package.
install_headers(from_subpackage_source, subdir: 'd/unit_threaded') # Single file package.
install_headers(integration_subpackage_source, subdir: 'd/unit_threaded') # Single file package.
install_headers(mocks_subpackage_source, subdir: 'd/unit_threaded') # Single file package.
install_headers(property_subpackage_source, subdir: 'd/unit_threaded') # Single file package.
install_headers(property_subpackage_randomized_source, subdir: 'd/unit_threaded/randomized')
install_headers(runner_subpackage_source, subdir: 'd/unit_threaded/runner')
include_dirs = [
include_directories('../source/'),
include_directories('../subpackages/assertions/source/'),
include_directories('../subpackages/exception/source/'),
include_directories('../subpackages/from/source/'),
include_directories('../subpackages/integration/source/'),
include_directories('../subpackages/mocks/source/'),
include_directories('../subpackages/property/source/'),
include_directories('../subpackages/runner/source/'),
]
lib = library(
meson.project_name(),
main_source +
assertions_subpackage_source +
exception_subpackage_source +
from_subpackage_source +
integration_subpackage_source +
mocks_subpackage_source +
property_subpackage_source +
property_subpackage_randomized_source +
runner_subpackage_source,
include_directories: include_dirs,
version: meson.project_version(),
pic: true,
install: true,
)
pkgconfig = import('pkgconfig')
pkgconfig.generate(
name: meson.project_name(),
libraries: lib,
subdirs: 'd/',
version: meson.project_version(),
description: 'Advanced multi-threaded unit testing framework with minimal to no boilerplate using built-in unittest blocks.',
)
gen_ut_main_runtime_source = run_command('sh', '-c', 'cd $MESON_SOURCE_ROOT && ls ../gen/source/unit_threaded/runtime/*.d').stdout().split()
executable(
'gen-ut-main',
['../gen/gen_ut_main.d'] + gen_ut_main_runtime_source,
include_directories: include_dirs + [include_directories('../gen/source')],
link_with: lib,
link_args: ['-link-defaultlib-shared'],
install: true,
)
unitthreaded_dep = declare_dependency(
link_with: lib,
include_directories: [include_dirs],
)
The unit_threaded Git repository is at: https://github.com/atilaneves/unit-threaded
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 15 (7 by maintainers)
I retested the build of Unit_Threaded using Meson master and it seems to work fine. Thanks for fixing this regression.
It’s listed at the top of the merge request page:
ldc2soname
.