diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 000000000..bdb2bfc88 --- /dev/null +++ b/.bazelrc @@ -0,0 +1,15 @@ +common --enable_bzlmod +common --lockfile_mode=off + +# Add C++17 compiler flags. +build --cxxopt=-std=c++17 +build --host_cxxopt=-std=c++17 + +build --force_pic +build --strip=never +build --strict_system_includes +build --fission=dbg +build --features=per_object_debug_info + +# Enable header processing, required for layering checks with parse_header. +build --process_headers_in_dependencies diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 000000000..643916c03 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +7.3.1 diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml new file mode 100644 index 000000000..3e3f878d1 --- /dev/null +++ b/.github/workflows/bazel.yml @@ -0,0 +1,23 @@ +name: Bazel CI +on: + push: + branches: [sdf15, main] + pull_request: + branches: [sdf15, main] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + test: + uses: bazel-contrib/.github/.github/workflows/bazel.yaml@v7 + with: + folders: | + [ + ".", + ] + exclude: | + [ + {"folder": ".", "bzlmodEnabled": false}, + ] diff --git a/.github/workflows/ci.bazelrc b/.github/workflows/ci.bazelrc new file mode 100644 index 000000000..3b4aad2af --- /dev/null +++ b/.github/workflows/ci.bazelrc @@ -0,0 +1,15 @@ +# This file contains Bazel settings to apply on CI only. +# It is referenced with a --bazelrc option in the call to bazel in ci.yaml + +# Debug where options came from +build --announce_rc +# This directory is configured in GitHub actions to be persisted between runs. +# We do not enable the repository cache to cache downloaded external artifacts +# as these are generally faster to download again than to fetch them from the +# GitHub actions cache. +build --disk_cache=~/.cache/bazel +# Don't rely on test logs being easily accessible from the test runner, +# though it makes the log noisier. +test --test_output=errors +# Allows tests to run bazelisk-in-bazel, since this is the cache folder used +test --test_env=XDG_CACHE_HOME diff --git a/.gitignore b/.gitignore index fe7c191e7..962b6a180 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build_* *.*.sw? .vscode __pycache__ +bazel-* diff --git a/BUILD.bazel b/BUILD.bazel index 0e26e2c84..bed038e87 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,36 +1,47 @@ -load( - "@gz//bazel/skylark:build_defs.bzl", - "GZ_FEATURES", - "GZ_ROOT", - "GZ_VISIBILITY", - "add_lint_tests", - "gz_configure_file", - "gz_configure_header", - "gz_export_header", - "gz_include_header", - "gz_py_binary", -) +load("@buildifier_prebuilt//:rules.bzl", "buildifier", "buildifier_test") +load("@rules_gazebo//gazebo:headers.bzl", "gz_configure_header", "gz_export_header") +load("@rules_license//rules:license.bzl", "license") package( - default_visibility = GZ_VISIBILITY, - features = GZ_FEATURES, + default_applicable_licenses = [":license"], + default_visibility = ["__subpackages__"], + features = [ + "layering_check", + "parse_headers", + ], +) + +license( + name = "license", + package_name = "sdformat", ) licenses(["notice"]) -exports_files(["LICENSE"]) +exports_files([ + "package.xml", + "LICENSE", + "MODULE.bazel", +]) + +gz_export_header( + name = "Export", + out = "include/sdf/Export.hh", + export_base = "GZ_SDFORMAT", + lib_name = "sdformat", +) gz_configure_header( - name = "config", + name = "Config", src = "include/sdf/config.hh.in", - cmakelists = ["CMakeLists.txt"], - defines = { - "CMAKE_INSTALL_FULL_DATAROOTDIR": "unused", - }, - package = "sdformat", + defines = [ + "CMAKE_INSTALL_FULL_DATAROOTDIR=unused", + "SDF_PROTOCOL_VERSION=1.12", + ], + package_xml = "package.xml", ) -gz_py_binary( +py_binary( name = "embed_sdf", srcs = ["sdf/embedSdf.py"], main = "sdf/embedSdf.py", @@ -43,49 +54,12 @@ genrule( "sdf/**/*.convert", ]), outs = ["EmbeddedSdf.cc"], - cmd = "$(execpath :embed_sdf) --output-file $@ --sdf-root sdformat/sdf/ --input-files $(SRCS)", # noqa + cmd = "$(execpath :embed_sdf) --output-file $@ --sdf-root sdf/ --input-files $(SRCS)", tools = [":embed_sdf"], ) -public_headers_no_gen = glob([ - "include/sdf/*.h", - "include/sdf/*.hh", -]) - -private_headers = glob(["src/*.hh"]) - -sources = glob( - ["src/*.cc"], - exclude = [ - "src/*_TEST.cc", - "src/gz.cc", - ], -) - -gz_export_header( - name = "include/sdf/Export.hh", - export_base = "GZ_SDFORMAT", - lib_name = "sdf", - visibility = ["//visibility:private"], -) - -gz_include_header( - name = "sdformat_hh_genrule", - out = "include/sdformat.hh", - hdrs = public_headers_no_gen + [ - "include/sdf/config.hh", - "include/sdf/Export.hh", - ], -) - -public_headers = public_headers_no_gen + [ - "include/sdf/Export.hh", - "include/sdf/config.hh", - "include/sdformat.hh", -] - cc_library( - name = "urdf", + name = "urdf_parser", srcs = [ "src/urdf/urdf_parser/joint.cpp", "src/urdf/urdf_parser/link.cpp", @@ -101,6 +75,7 @@ cc_library( ), copts = ["-Wno-unknown-pragmas"], includes = ["src/urdf"], + visibility = ["//visibility:public"], deps = [ "@tinyxml2", ], @@ -108,9 +83,30 @@ cc_library( cc_library( name = "sdformat", - srcs = sources + private_headers + ["EmbeddedSdf.cc"], - hdrs = public_headers, + srcs = glob( + include = [ + "src/*.cc", + "src/*.hh", + "src/bazel/*.cc", + ], + exclude = [ + "src/*_TEST.cc", + ], + ) + ["EmbeddedSdf.cc"], + hdrs = glob( + include = [ + "include/sdf/*.hh", + ], + exclude = [ + # Bazel does not generate top-level includes, so exclude the redirect + "include/sdf/sdf.hh", + ], + ), + data = [ + "sdf", + ], defines = [ + "CMAKE_INSTALL_RELATIVE_DATAROOTDIR=\\\"\\\"", 'SDF_SHARE_PATH=\\".\\"', 'SDF_VERSION_PATH=\\"sdformat\\"', ], @@ -118,83 +114,1009 @@ cc_library( "include", "src", ], + visibility = ["//visibility:public"], deps = [ - ":urdf", - GZ_ROOT + "math", - GZ_ROOT + "utils", + ":Config", + ":Export", + ":urdf_parser", + "@gz-math//:Angle", + "@gz-math//:Box", + "@gz-math//:Capsule", + "@gz-math//:Color", + "@gz-math//:Cone", + "@gz-math//:Cylinder", + "@gz-math//:Ellipsoid", + "@gz-math//:Graph", + "@gz-math//:Helpers", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Material", + "@gz-math//:Plane", + "@gz-math//:Pose3", + "@gz-math//:Quaternion", + "@gz-math//:SemanticVersion", + "@gz-math//:Sphere", + "@gz-math//:SphericalCoordinates", + "@gz-math//:Temperature", + "@gz-math//:Vector2", + "@gz-math//:Vector3", + "@gz-utils//:Environment", + "@gz-utils//:ImplPtr", + "@gz-utils//:NeverDestroyed", + "@gz-utils//:SuppressWarning", "@tinyxml2", ], ) -cc_library( - name = "sdformat_internal", +cc_test( + name = "Actor_TEST", + srcs = [ + "src/Actor_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "AirPressure_TEST", + srcs = [ + "src/AirPressure_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Airspeed_TEST", + srcs = [ + "src/Airspeed_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Altimeter_TEST", + srcs = [ + "src/Altimeter_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Atmosphere_TEST", + srcs = [ + "src/Atmosphere_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Temperature", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Box_TEST", + srcs = [ + "src/Box_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Camera_TEST", + srcs = [ + "src/Camera_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Capsule_TEST", + srcs = [ + "src/Capsule_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Collision_TEST", + srcs = [ + "src/Collision_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Cone_TEST", srcs = [ - "src/gz.cc", - "src/gz.hh", + "src/Cone_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", ], - visibility = ["//visibility:private"], - deps = [":sdformat"], ) -test_sources = glob( - ["src/*_TEST.cc"], - exclude = ["src/gz_TEST.cc"], +cc_test( + name = "Console_TEST", + srcs = [ + "src/Console_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-utils//:Environment", + ], ) -[cc_test( - name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), - srcs = [src], +cc_test( + name = "Converter_TEST", + srcs = [ + "src/Converter.hh", + "src/Converter_TEST.cc", + "src/XmlUtils.hh", + ], data = [ - "sdf", - GZ_ROOT + "sdformat/test:integration", - GZ_ROOT + "sdformat/test:sdf", + "sdf/1.10/1_9.convert", + "sdf/1.6/1_5.convert", + "sdf/1.7/1_6.convert", + "sdf/1.8/1_7.convert", + "sdf/1.9/1_8.convert", ], - env = { - "GZ_BAZEL": "1", - "GZ_BAZEL_PATH": "sdformat", - }, deps = [ ":sdformat", - GZ_ROOT + "sdformat/test:test_utils", - "@gtest", - "@gtest//:gtest_main", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", ], -) for src in test_sources] +) -gz_configure_file( - name = "sdformat.rb", - src = "src/cmd/cmdsdformat.rb.in", - out = "cmdsdformat.rb", - cmakelists = ["CMakeLists.txt"], - defines = [ - "library_location=libgz-sdformat.so", +cc_test( + name = "CustomInertiaCalcProperties_TEST", + srcs = [ + "src/CustomInertiaCalcProperties_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Vector3", ], - package = "sdformat", - visibility = [GZ_ROOT + "tools:__pkg__"], ) -gz_configure_file( - name = "sdformat_yaml", - src = "conf/sdformat.yaml.in", - out = "sdformat.yaml", - cmakelists = ["CMakeLists.txt"], - defines = [ - "gz_library_path=gz/sdformat/cmdsdformat.rb", +cc_test( + name = "Cylinder_TEST", + srcs = [ + "src/Cylinder_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Element_TEST", + srcs = [ + "src/Element_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Ellipsoid_TEST", + srcs = [ + "src/Ellipsoid_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Error_TEST", + srcs = [ + "src/Error_TEST.cc", + ], + deps = [ + ":Config", + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Exception_TEST", + srcs = [ + "src/Exception_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Filesystem_TEST", + srcs = [ + "src/Filesystem_TEST.cc", + ], + deps = [ + ":sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-utils//:Environment", + ], +) + +cc_test( + name = "ForceTorque_TEST", + srcs = [ + "src/ForceTorque_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Frame_TEST", + srcs = [ + "src/Frame_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "FrameSemantics_TEST", + srcs = [ + "src/FrameSemantics.hh", + "src/FrameSemantics_TEST.cc", + "src/ScopedGraph.hh", + ], + data = [ + "//test:sdf", + ], + deps = [ + ":Config", + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Helpers", + ], +) + +cc_test( + name = "Geometry_TEST", + srcs = [ + "src/Geometry_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Gui_TEST", + srcs = [ + "src/Gui_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +# TODO: Enable once gz-utils exposes ExtraTestMacros.hh in bazel build. +# cc_test( +# name = "gz_TEST", +# srcs = [ +# "src/gz_TEST.cc", +# ], +# deps = [ +# ":sdformat", +# "//test:test_utils", +# "@googletest//:gtest_main", +# ], +#) + +cc_test( + name = "Heightmap_TEST", + srcs = [ + "src/Heightmap_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Imu_TEST", + srcs = [ + "src/Imu_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "InterfaceElements_TEST", + srcs = [ + "src/InterfaceElements_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "Joint_TEST", + srcs = [ + "src/Joint_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "JointAxis_TEST", + srcs = [ + "src/JointAxis_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Lidar_TEST", + srcs = [ + "src/Lidar_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Angle", + ], +) + +cc_test( + name = "Light_TEST", + srcs = [ + "src/Light_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "Link_TEST", + srcs = [ + "src/Link_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Magnetometer_TEST", + srcs = [ + "src/Magnetometer_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Material_TEST", + srcs = [ + "src/Material_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + ], +) + +cc_test( + name = "Mesh_TEST", + srcs = [ + "src/Mesh_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Model_TEST", + srcs = [ + "src/Model_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "NavSat_TEST", + srcs = [ + "src/NavSat_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Noise_TEST", + srcs = [ + "src/Noise_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "OutputConfig_TEST", + srcs = [ + "src/OutputConfig_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Param_TEST", + srcs = [ + "src/Param_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Angle", + "@gz-math//:Color", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "ParamPassing_TEST", + srcs = [ + "src/ParamPassing.hh", + "src/ParamPassing_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "parser_TEST", + srcs = [ + "src/parser_TEST.cc", + ], + data = [ + "//test:integration/model", + "//test:sdf", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-utils//:Environment", + ], +) + +cc_test( + name = "parser_urdf_TEST", + srcs = [ + "src/parser_urdf.hh", + "src/parser_urdf_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "ParserConfig_TEST", + srcs = [ + "src/ParserConfig_TEST.cc", + ], + data = [ + "//test:sdf", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "ParticleEmitter_TEST", + srcs = [ + "src/ParticleEmitter_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Pbr_TEST", + srcs = [ + "src/Pbr_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + ], +) + +cc_test( + name = "Physics_TEST", + srcs = [ + "src/Physics_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Plane_TEST", + srcs = [ + "src/Plane_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Vector2", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Plugin_TEST", + srcs = [ + "src/Plugin_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Polyline_TEST", + srcs = [ + "src/Polyline_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "PrintConfig_TEST", + srcs = [ + "src/PrintConfig_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Projector_TEST", + srcs = [ + "src/Projector_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Root_TEST", + srcs = [ + "src/Root_TEST.cc", + ], + data = [ + "//test:sdf", + ], + deps = [ + ":Config", + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Scene_TEST", + srcs = [ + "src/Scene_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "SDF_TEST", + srcs = [ + "src/SDF_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + "@gz-math//:Pose3", + "@gz-math//:Vector2", + "@gz-math//:Vector3", + "@gz-utils//:Environment", + "@gz-utils//:SuppressWarning", + ], +) + +cc_test( + name = "SemanticPose_TEST", + srcs = [ + "src/SemanticPose_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "Sensor_TEST", + srcs = [ + "src/Sensor_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Sky_TEST", + srcs = [ + "src/Sky_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Sphere_TEST", + srcs = [ + "src/Sphere_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Surface_TEST", + srcs = [ + "src/Surface_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "Types_TEST", + srcs = [ + "src/Types_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "Utils_TEST", + srcs = [ + "src/Utils.hh", + "src/Utils_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "Visual_TEST", + srcs = [ + "src/Visual_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", ], - package = "sdformat", - visibility = [GZ_ROOT + "tools:__pkg__"], ) -cc_binary( - name = "libgz-sdformat.so", - srcs = [":sdformat_internal"], - linkshared = True, - visibility = [GZ_ROOT + "tools:__pkg__"], +cc_test( + name = "World_TEST", + srcs = [ + "src/World_TEST.cc", + ], deps = [ ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + "@gz-math//:Inertial", + "@gz-math//:MassMatrix3", + "@gz-math//:Pose3", + "@gz-math//:SphericalCoordinates", + "@gz-math//:Vector3", ], ) -exports_files(["sdf"]) +cc_test( + name = "XmlUtils_TEST", + srcs = [ + "src/XmlUtils.hh", + "src/XmlUtils_TEST.cc", + ], + deps = [ + ":sdformat", + "//test:test_utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@tinyxml2", + ], +) -add_lint_tests() +# Bazel linting +buildifier( + name = "buildifier.fix", + exclude_patterns = ["./.git/*"], + lint_mode = "fix", + mode = "fix", +) + +buildifier_test( + name = "buildifier.test", + exclude_patterns = ["./.git/*"], + lint_mode = "warn", + mode = "diff", + no_sandbox = True, + workspace = "//:MODULE.bazel", +) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1eed1eaa..0fedcd424 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ if(COMMAND CMAKE_POLICY) CMAKE_POLICY(SET CMP0004 NEW) endif(COMMAND CMAKE_POLICY) -project (sdformat15 VERSION 15.0.0) +project (sdformat15 VERSION 15.1.1) # The protocol version has nothing to do with the package version. # It represents the current version of SDFormat implemented by the software @@ -97,16 +97,6 @@ if (BUILD_SDF) ) if (NOT Python3_Development_FOUND) GZ_BUILD_WARNING("Python development libraries are missing: Python interfaces are disabled.") - else() - set(PYBIND11_PYTHON_VERSION 3) - find_package(pybind11 2.4 CONFIG QUIET) - - if (pybind11_FOUND) - message (STATUS "Searching for pybind11 - found version ${pybind11_VERSION}.") - else() - GZ_BUILD_WARNING("pybind11 is missing: Python interfaces are disabled.") - message (STATUS "Searching for pybind11 - not found.") - endif() endif() endif() @@ -136,9 +126,11 @@ if (BUILD_SDF) ################################################ # Find psutil python package for memory tests - find_python_module(psutil) - if (NOT PY_PSUTIL) - gz_build_warning("Python psutil package not found. Memory leak tests will be skipped") + if (BUILD_TESTING) + find_python_module(psutil) + if (NOT PY_PSUTIL) + gz_build_warning("Python psutil package not found. Memory leak tests will be skipped") + endif() endif() ######################################## @@ -159,7 +151,7 @@ if (BUILD_SDF) add_subdirectory(sdf) add_subdirectory(conf) add_subdirectory(doc) - if (pybind11_FOUND AND NOT SKIP_PYBIND11) + if (Python3_Development_FOUND AND NOT SKIP_PYBIND11) add_subdirectory(python) endif() endif(BUILD_SDF) diff --git a/Changelog.md b/Changelog.md index 211119ff2..739fe6b6c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,44 @@ ## libsdformat 15.X +### libsdformat 15.1.1 (2024-11-15) + +1. **Baseline:** this includes all changes from 15.1.0 and earlier. + +1. Fix bazel rules for layering_check and parse_headers with clang + * [Pull request #1507](https://github.com/gazebosim/sdformat/pull/1507) + +1. Enable header layering checks for bazel build + * [Pull request #1505](https://github.com/gazebosim/sdformat/pull/1505) + +### libsdformat 15.1.0 (2024-11-13) + +1. Bazel CI + * [Pull request #1500](https://github.com/gazebosim/sdformat/pull/1500) + +1. Add bzlmod support to sdf15 + * [Pull request #1493](https://github.com/gazebosim/sdformat/pull/1493) + +1. Support removing the actor, light, or model from the root + * [Pull request #1492](https://github.com/gazebosim/sdformat/pull/1492) + +1. Only look for psutil if testing is enabled + * [Pull request #1495](https://github.com/gazebosim/sdformat/pull/1495) + +1. Improve installation instructions + * [Pull request #1496](https://github.com/gazebosim/sdformat/pull/1496) + +1. Permit building python bindings separately from libsdformat library + * [Pull request #1491](https://github.com/gazebosim/sdformat/pull/1491) + +1. Change sdf\_config.h to sdf/config.hh everywhere + * [Pull request #1494](https://github.com/gazebosim/sdformat/pull/1494) + +1. Improve installation instructions + * [Pull request #1490](https://github.com/gazebosim/sdformat/pull/1490) + +1. Fix symbol checking test when compiled with debug symbols + * [Pull request #1474](https://github.com/gazebosim/sdformat/pull/1474) + ### libsdformat 15.0.0 (2024-09-25) 1. **Baseline:** this includes all changes from 14.5.0 and earlier. diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 000000000..5fa4ee358 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,27 @@ +## MODULE.bazel +module( + name = "sdformat", + repo_name = "org_gazebosim_sdformat", +) + +bazel_dep(name = "buildifier_prebuilt", version = "6.1.2") +bazel_dep(name = "googletest", version = "1.14.0") +bazel_dep(name = "rules_license", version = "0.0.8") +bazel_dep(name = "tinyxml2", version = "10.0.0") + +# Gazebo Dependencies +bazel_dep(name = "rules_gazebo", version = "0.0.2") +bazel_dep(name = "gz-utils") +bazel_dep(name = "gz-math") + +archive_override( + module_name = "gz-utils", + strip_prefix = "gz-utils-gz-utils3", + urls = ["https://github.com/gazebosim/gz-utils/archive/refs/heads/gz-utils3.tar.gz"], +) + +archive_override( + module_name = "gz-math", + strip_prefix = "gz-math-gz-math8", + urls = ["https://github.com/gazebosim/gz-math/archive/refs/heads/gz-math8.tar.gz"], +) diff --git a/README.md b/README.md index 0b6dfc324..e157f9a05 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,9 @@ which version you need, or leave it empty for version 1. ### macOS -On macOS, add OSRF packages: +On macOS, after installing the [Homebrew package manager](https://brew.sh), +add OSRF packages: ```sh - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew tap osrf/simulation ``` @@ -129,6 +129,25 @@ git clone https://github.com/gazebosim/sdformat -b sdf<#> Be sure to replace `<#>` with a number value, such as 14 or 15, depending on which version you need. +### Install dependencies + +#### Ubuntu + +```sh +cd sdformat +sudo apt -y install \ + $(sort -u $(find . -iname 'packages-'`lsb_release -cs`'.apt' -o -iname 'packages.apt' | tr '\n' ' ')) +``` + +#### macOS + +```sh +brew install --only-dependencies sdformat<#> +``` + +Be sure to replace `<#>` with a number value, such as 14 or 15, depending on +which version you need. + ### Build from Source Standard installation can be performed in UNIX systems using the following @@ -144,60 +163,43 @@ make install sdformat supported cmake parameters at configuring time: -* `USE_INTERNAL_URDF` (`bool`) [default `False`]
- Use an internal copy of urdfdom 1.0.0 instead of look for one - installed in the system -* `USE_UPSTREAM_CFLAGS` (`bool`) [default `True`]
- Use the sdformat team compilation flags instead of the common set defined - by cmake. +| Name | Type | Default | Description | +|-----------------------|------|----------|--------------------------------------| +| `SKIP_PYBIND11` | BOOL | False | Skip generating Python bindings via pybind11 | +| `USE_INTERNAL_URDF` | BOOL | False | Use an internal copy of urdfdom 1.0.0 instead of looking for one installed in the system | +| `USE_UPSTREAM_CFLAGS` | BOOL | True | Use the sdformat team compilation flags instead of the common set defined by cmake. | -## Uninstallation +### Build python bindings separately from main library -To uninstall the software installed with the previous steps: +If you want to build Python bindings separately from the main libsdformat library +(for example if you want to build Python bindings for multiple versions of Python), +you can invoke cmake on the `python` folder instead of the root folder. +Specify the path to the python executable with which you wish to build bindings +in the `Python3_EXECUTABLE` cmake variable. +Specify the install path for the bindings in the `CMAKE_INSTALL_PREFIX` +variable, and be sure to set your `PYTHONPATH` accordingly after install. -```sh -cd build -make uninstall +```bash +cd sdformat +mkdir build_python3 +cd build_python3 +cmake ../python \ + -DPython3_EXECUTABLE=/usr/local/bin/python3.12 \ + -DCMAKE_INSTALL_PREFIX= ``` -## macOS +See the homebrew [sdformat15 formula](https://github.com/osrf/homebrew-simulation/blob/027d06f5be49da1e40d01180aedae7f76dc7ff47/Formula/sdformat15.rb#L12-L56) +for an example of building bindings for multiple versions of Python. -### Prerequisites +## Uninstallation -Clone the repository -```sh -git clone https://github.com/gazebosim/sdformat -b sdf<#> -``` -Be sure to replace `<#>` with a number value, such as 14 or 15, depending on -which version you need. +To uninstall the software installed with the previous steps: -Install dependencies ```sh -brew install --only-dependencies sdformat<#> +cd build +make uninstall ``` -### Build from Source - -1. Configure and build - ```sh - cd sdformat - mkdir build - cd build - cmake .. # Consider specifying -DCMAKE_INSTALL_PREFIX=... - make - ``` - -2. Optionally, install and uninstall - ```sh - sudo make install - ``` - - To uninstall the software installed with the previous steps: - ```sh - cd build/ - sudo make uninstall - ``` - ## Windows ### Prerequisites diff --git a/include/sdf/Actor.hh b/include/sdf/Actor.hh index 509ae58a9..f3e76ae2c 100644 --- a/include/sdf/Actor.hh +++ b/include/sdf/Actor.hh @@ -28,7 +28,7 @@ #include "sdf/Link.hh" #include "sdf/Joint.hh" #include "sdf/Plugin.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/AirPressure.hh b/include/sdf/AirPressure.hh index 798474dd5..cf94e7d54 100644 --- a/include/sdf/AirPressure.hh +++ b/include/sdf/AirPressure.hh @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/AirSpeed.hh b/include/sdf/AirSpeed.hh index 90a1be025..6fcbb3356 100644 --- a/include/sdf/AirSpeed.hh +++ b/include/sdf/AirSpeed.hh @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Altimeter.hh b/include/sdf/Altimeter.hh index c27a6daf1..4405c326b 100644 --- a/include/sdf/Altimeter.hh +++ b/include/sdf/Altimeter.hh @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Atmosphere.hh b/include/sdf/Atmosphere.hh index ed4042128..e4497be35 100644 --- a/include/sdf/Atmosphere.hh +++ b/include/sdf/Atmosphere.hh @@ -22,7 +22,7 @@ #include "sdf/Element.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" diff --git a/include/sdf/Box.hh b/include/sdf/Box.hh index ae3515f39..10ff8cc1a 100644 --- a/include/sdf/Box.hh +++ b/include/sdf/Box.hh @@ -25,7 +25,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Camera.hh b/include/sdf/Camera.hh index bb564c057..71843ebfb 100644 --- a/include/sdf/Camera.hh +++ b/include/sdf/Camera.hh @@ -24,7 +24,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Capsule.hh b/include/sdf/Capsule.hh index 97f6dce0b..c385c1216 100644 --- a/include/sdf/Capsule.hh +++ b/include/sdf/Capsule.hh @@ -24,7 +24,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Collision.hh b/include/sdf/Collision.hh index 2ab4114ce..e2285a93c 100644 --- a/include/sdf/Collision.hh +++ b/include/sdf/Collision.hh @@ -27,7 +27,7 @@ #include "sdf/Element.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "sdf/ParserConfig.hh" diff --git a/include/sdf/Cone.hh b/include/sdf/Cone.hh index 641c5a304..cc935a5e7 100644 --- a/include/sdf/Cone.hh +++ b/include/sdf/Cone.hh @@ -26,7 +26,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Console.hh b/include/sdf/Console.hh index 04856e900..539bb77cc 100644 --- a/include/sdf/Console.hh +++ b/include/sdf/Console.hh @@ -23,7 +23,7 @@ #include #include -#include +#include #include "sdf/system_util.hh" #ifdef _WIN32 diff --git a/include/sdf/Cylinder.hh b/include/sdf/Cylinder.hh index bba37ba24..9ea63c7a9 100644 --- a/include/sdf/Cylinder.hh +++ b/include/sdf/Cylinder.hh @@ -24,7 +24,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Element.hh b/include/sdf/Element.hh index 1f04c8a4a..9d7f1f624 100644 --- a/include/sdf/Element.hh +++ b/include/sdf/Element.hh @@ -28,7 +28,7 @@ #include "sdf/Error.hh" #include "sdf/Param.hh" #include "sdf/PrintConfig.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "sdf/Types.hh" diff --git a/include/sdf/Ellipsoid.hh b/include/sdf/Ellipsoid.hh index 33a046c2c..b328fcd8a 100644 --- a/include/sdf/Ellipsoid.hh +++ b/include/sdf/Ellipsoid.hh @@ -24,7 +24,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Error.hh b/include/sdf/Error.hh index 9664cc850..54cebf951 100644 --- a/include/sdf/Error.hh +++ b/include/sdf/Error.hh @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "sdf/Console.hh" #include "sdf/system_util.hh" diff --git a/include/sdf/Exception.hh b/include/sdf/Exception.hh index 303482017..271a885b1 100644 --- a/include/sdf/Exception.hh +++ b/include/sdf/Exception.hh @@ -25,7 +25,7 @@ #include #include -#include +#include #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Filesystem.hh b/include/sdf/Filesystem.hh index f8b049d6d..b15b683d8 100644 --- a/include/sdf/Filesystem.hh +++ b/include/sdf/Filesystem.hh @@ -22,7 +22,7 @@ #include #include -#include +#include #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/ForceTorque.hh b/include/sdf/ForceTorque.hh index 2a9a693ed..1ce09f5d4 100644 --- a/include/sdf/ForceTorque.hh +++ b/include/sdf/ForceTorque.hh @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Frame.hh b/include/sdf/Frame.hh index cecb63ea9..f1a5e275e 100644 --- a/include/sdf/Frame.hh +++ b/include/sdf/Frame.hh @@ -24,7 +24,7 @@ #include "sdf/Element.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Geometry.hh b/include/sdf/Geometry.hh index 5d75b860d..aec5076d0 100644 --- a/include/sdf/Geometry.hh +++ b/include/sdf/Geometry.hh @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include diff --git a/include/sdf/Gui.hh b/include/sdf/Gui.hh index 67435fdb0..d3201b1a8 100644 --- a/include/sdf/Gui.hh +++ b/include/sdf/Gui.hh @@ -21,7 +21,7 @@ #include "sdf/Element.hh" #include "sdf/Plugin.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Heightmap.hh b/include/sdf/Heightmap.hh index e4779f64b..364f7b43f 100644 --- a/include/sdf/Heightmap.hh +++ b/include/sdf/Heightmap.hh @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Imu.hh b/include/sdf/Imu.hh index e3ced1181..a339f00d8 100644 --- a/include/sdf/Imu.hh +++ b/include/sdf/Imu.hh @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/InstallationDirectories.hh b/include/sdf/InstallationDirectories.hh index be3b0c678..e58084721 100644 --- a/include/sdf/InstallationDirectories.hh +++ b/include/sdf/InstallationDirectories.hh @@ -20,7 +20,7 @@ #include -#include +#include #include namespace sdf diff --git a/include/sdf/InterfaceElements.hh b/include/sdf/InterfaceElements.hh index aaeb7d614..ae8658394 100644 --- a/include/sdf/InterfaceElements.hh +++ b/include/sdf/InterfaceElements.hh @@ -28,7 +28,7 @@ #include "sdf/InterfaceModel.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/InterfaceFrame.hh b/include/sdf/InterfaceFrame.hh index 932e7c635..564fd8dd3 100644 --- a/include/sdf/InterfaceFrame.hh +++ b/include/sdf/InterfaceFrame.hh @@ -23,7 +23,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/InterfaceJoint.hh b/include/sdf/InterfaceJoint.hh index 92f9460d1..7bd513f5b 100644 --- a/include/sdf/InterfaceJoint.hh +++ b/include/sdf/InterfaceJoint.hh @@ -23,7 +23,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/InterfaceLink.hh b/include/sdf/InterfaceLink.hh index 91bf77217..36736a34e 100644 --- a/include/sdf/InterfaceLink.hh +++ b/include/sdf/InterfaceLink.hh @@ -23,7 +23,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/InterfaceModel.hh b/include/sdf/InterfaceModel.hh index 30c8a6c7a..3205e779d 100644 --- a/include/sdf/InterfaceModel.hh +++ b/include/sdf/InterfaceModel.hh @@ -32,7 +32,7 @@ #include "sdf/InterfaceModelPoseGraph.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/InterfaceModelPoseGraph.hh b/include/sdf/InterfaceModelPoseGraph.hh index fa0d05934..4846aa4e0 100644 --- a/include/sdf/InterfaceModelPoseGraph.hh +++ b/include/sdf/InterfaceModelPoseGraph.hh @@ -27,7 +27,7 @@ #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Joint.hh b/include/sdf/Joint.hh index 596e0a398..b62368160 100644 --- a/include/sdf/Joint.hh +++ b/include/sdf/Joint.hh @@ -24,7 +24,7 @@ #include "sdf/Element.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/JointAxis.hh b/include/sdf/JointAxis.hh index eed7f8169..f0fb8b0a2 100644 --- a/include/sdf/JointAxis.hh +++ b/include/sdf/JointAxis.hh @@ -25,7 +25,7 @@ #include "sdf/Element.hh" #include "sdf/Exception.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Lidar.hh b/include/sdf/Lidar.hh index 89cfa612b..a3c000d8b 100644 --- a/include/sdf/Lidar.hh +++ b/include/sdf/Lidar.hh @@ -23,7 +23,7 @@ #include #include #include -#include +#include namespace sdf diff --git a/include/sdf/Light.hh b/include/sdf/Light.hh index fc19e02f1..e97a37b6a 100644 --- a/include/sdf/Light.hh +++ b/include/sdf/Light.hh @@ -26,7 +26,7 @@ #include "sdf/Element.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Link.hh b/include/sdf/Link.hh index dfd02f69c..d692476fb 100644 --- a/include/sdf/Link.hh +++ b/include/sdf/Link.hh @@ -26,7 +26,7 @@ #include "sdf/Element.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "sdf/ParserConfig.hh" #include "sdf/Error.hh" diff --git a/include/sdf/Magnetometer.hh b/include/sdf/Magnetometer.hh index 3f6d9ae74..2d83e3954 100644 --- a/include/sdf/Magnetometer.hh +++ b/include/sdf/Magnetometer.hh @@ -21,7 +21,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Material.hh b/include/sdf/Material.hh index 6891a8899..e45afaa73 100644 --- a/include/sdf/Material.hh +++ b/include/sdf/Material.hh @@ -21,7 +21,7 @@ #include #include "sdf/Element.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Mesh.hh b/include/sdf/Mesh.hh index c77cb7bff..0ce5c525e 100644 --- a/include/sdf/Mesh.hh +++ b/include/sdf/Mesh.hh @@ -26,7 +26,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Model.hh b/include/sdf/Model.hh index 86cc3d422..fd6f5d615 100644 --- a/include/sdf/Model.hh +++ b/include/sdf/Model.hh @@ -29,7 +29,7 @@ #include "sdf/Plugin.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/NavSat.hh b/include/sdf/NavSat.hh index 9b1677d77..13341132e 100644 --- a/include/sdf/NavSat.hh +++ b/include/sdf/NavSat.hh @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include diff --git a/include/sdf/Noise.hh b/include/sdf/Noise.hh index 361e12f7e..c570908c4 100644 --- a/include/sdf/Noise.hh +++ b/include/sdf/Noise.hh @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/OutputConfig.hh b/include/sdf/OutputConfig.hh index 7b51876cb..5beef97e6 100644 --- a/include/sdf/OutputConfig.hh +++ b/include/sdf/OutputConfig.hh @@ -21,7 +21,7 @@ #include #include "sdf/InterfaceElements.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" diff --git a/include/sdf/Param.hh b/include/sdf/Param.hh index d0a952f4c..883df8777 100644 --- a/include/sdf/Param.hh +++ b/include/sdf/Param.hh @@ -42,7 +42,7 @@ #include "sdf/Console.hh" #include "sdf/PrintConfig.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "sdf/Types.hh" diff --git a/include/sdf/ParserConfig.hh b/include/sdf/ParserConfig.hh index 9baa677a0..a3741ef6f 100644 --- a/include/sdf/ParserConfig.hh +++ b/include/sdf/ParserConfig.hh @@ -28,7 +28,7 @@ #include "sdf/Error.hh" #include "sdf/InterfaceElements.hh" #include "sdf/CustomInertiaCalcProperties.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" diff --git a/include/sdf/ParticleEmitter.hh b/include/sdf/ParticleEmitter.hh index 0326f34c2..55b5fac2d 100644 --- a/include/sdf/ParticleEmitter.hh +++ b/include/sdf/ParticleEmitter.hh @@ -25,7 +25,7 @@ #include "sdf/Material.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Pbr.hh b/include/sdf/Pbr.hh index 19a238347..c872fbe54 100644 --- a/include/sdf/Pbr.hh +++ b/include/sdf/Pbr.hh @@ -21,7 +21,7 @@ #include #include "sdf/Element.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Physics.hh b/include/sdf/Physics.hh index 0fa5ea5ef..c8b9a0565 100644 --- a/include/sdf/Physics.hh +++ b/include/sdf/Physics.hh @@ -22,7 +22,7 @@ #include "sdf/Element.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Plane.hh b/include/sdf/Plane.hh index b3b3a98a1..913e975b0 100644 --- a/include/sdf/Plane.hh +++ b/include/sdf/Plane.hh @@ -23,7 +23,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Plugin.hh b/include/sdf/Plugin.hh index def211593..77804b2c1 100644 --- a/include/sdf/Plugin.hh +++ b/include/sdf/Plugin.hh @@ -25,7 +25,7 @@ #include #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #ifdef _WIN32 diff --git a/include/sdf/Polyline.hh b/include/sdf/Polyline.hh index f16de2c27..461185822 100644 --- a/include/sdf/Polyline.hh +++ b/include/sdf/Polyline.hh @@ -23,7 +23,7 @@ #include #include #include -#include +#include namespace sdf { diff --git a/include/sdf/PrintConfig.hh b/include/sdf/PrintConfig.hh index 826dc128e..9a57765d6 100644 --- a/include/sdf/PrintConfig.hh +++ b/include/sdf/PrintConfig.hh @@ -20,7 +20,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "sdf/Types.hh" diff --git a/include/sdf/Projector.hh b/include/sdf/Projector.hh index b13fd8797..959d9b292 100644 --- a/include/sdf/Projector.hh +++ b/include/sdf/Projector.hh @@ -27,7 +27,7 @@ #include "sdf/Plugin.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Root.hh b/include/sdf/Root.hh index 9ad5f1632..6ad91ba63 100644 --- a/include/sdf/Root.hh +++ b/include/sdf/Root.hh @@ -25,7 +25,7 @@ #include "sdf/ParserConfig.hh" #include "sdf/SDFImpl.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf @@ -246,6 +246,11 @@ namespace sdf public: sdf::ElementPtr ToElement( const OutputConfig &_config = OutputConfig::GlobalConfig()) const; + /// \brief Remove the actor, light, or model if one of them exists. + /// The SDF Root object can only hold one, or none, from the set + /// [Actor, Light, Model]. + public: void ClearActorLightModel(); + /// \brief Private data pointer GZ_UTILS_IMPL_PTR(dataPtr) }; diff --git a/include/sdf/SDFImpl.hh b/include/sdf/SDFImpl.hh index fb7e96ea0..9fa7d4bac 100644 --- a/include/sdf/SDFImpl.hh +++ b/include/sdf/SDFImpl.hh @@ -26,7 +26,7 @@ #include "sdf/ParserConfig.hh" #include "sdf/PrintConfig.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #ifdef _WIN32 diff --git a/include/sdf/Scene.hh b/include/sdf/Scene.hh index e11f51596..83da62c62 100644 --- a/include/sdf/Scene.hh +++ b/include/sdf/Scene.hh @@ -23,7 +23,7 @@ #include "sdf/Element.hh" #include "sdf/Sky.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/SemanticPose.hh b/include/sdf/SemanticPose.hh index 3280d1e47..8ab81b4ec 100644 --- a/include/sdf/SemanticPose.hh +++ b/include/sdf/SemanticPose.hh @@ -24,7 +24,7 @@ #include #include -#include +#include #include "sdf/system_util.hh" #ifdef _WIN32 diff --git a/include/sdf/Sensor.hh b/include/sdf/Sensor.hh index 49bc336f9..7247fd7ab 100644 --- a/include/sdf/Sensor.hh +++ b/include/sdf/Sensor.hh @@ -25,7 +25,7 @@ #include "sdf/Plugin.hh" #include "sdf/SemanticPose.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Sky.hh b/include/sdf/Sky.hh index 4475cd0ee..2c998c1df 100644 --- a/include/sdf/Sky.hh +++ b/include/sdf/Sky.hh @@ -25,7 +25,7 @@ #include "sdf/Element.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Sphere.hh b/include/sdf/Sphere.hh index 05eb072e3..a56f37b16 100644 --- a/include/sdf/Sphere.hh +++ b/include/sdf/Sphere.hh @@ -25,7 +25,7 @@ #include #include -#include +#include namespace sdf { diff --git a/include/sdf/Surface.hh b/include/sdf/Surface.hh index caec7d0cd..f26419ba7 100644 --- a/include/sdf/Surface.hh +++ b/include/sdf/Surface.hh @@ -21,7 +21,7 @@ #include #include "sdf/Element.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/Types.hh b/include/sdf/Types.hh index 26e25cdac..6b8cd60a4 100644 --- a/include/sdf/Types.hh +++ b/include/sdf/Types.hh @@ -26,7 +26,7 @@ #include #include -#include +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "sdf/Error.hh" diff --git a/include/sdf/Visual.hh b/include/sdf/Visual.hh index f8e46a2bf..409ecec20 100644 --- a/include/sdf/Visual.hh +++ b/include/sdf/Visual.hh @@ -31,7 +31,7 @@ #include "sdf/SemanticPose.hh" #include "sdf/Sphere.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/World.hh b/include/sdf/World.hh index 757f4f45d..8e75c19b5 100644 --- a/include/sdf/World.hh +++ b/include/sdf/World.hh @@ -32,7 +32,7 @@ #include "sdf/Plugin.hh" #include "sdf/Scene.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" namespace sdf diff --git a/include/sdf/parser.hh b/include/sdf/parser.hh index a96b484e3..c8f2423ab 100644 --- a/include/sdf/parser.hh +++ b/include/sdf/parser.hh @@ -20,7 +20,7 @@ #include #include "sdf/SDFImpl.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" /// \ingroup sdf_parser diff --git a/package.xml b/package.xml index 2cfe9abe1..3b32ed407 100644 --- a/package.xml +++ b/package.xml @@ -1,7 +1,7 @@ sdformat15 - 15.0.0 + 15.1.1 SDFormat is an XML file format that describes environments, objects, and robots in a manner suitable for robotic applications diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 1ad2cc7a7..81bf3c1f0 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,3 +1,34 @@ +# Detect if we are doing a standalone build of the bindings, using an external sdformat +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + cmake_minimum_required(VERSION 3.22.1) + find_package(gz-cmake4 4.1.0 REQUIRED) + gz_get_package_xml_version(${CMAKE_SOURCE_DIR}/../package.xml PACKAGE_XML) + project(sdformat${PACKAGE_XML_VERSION_MAJOR}-python VERSION ${PACKAGE_XML_VERSION}) + find_package(sdformat${PROJECT_VERSION_MAJOR} REQUIRED) + set(PROJECT_LIBRARY_TARGET_NAME "sdformat${PROJECT_VERSION_MAJOR}::sdformat${PROJECT_VERSION_MAJOR}") + # require python dependencies to be found + find_package(Python3 COMPONENTS Interpreter Development REQUIRED) + set(CMAKE_REQUIRE_FIND_PACKAGE_pybind11 TRUE) + include(GNUInstallDirs) + include(CTest) + + if(BUILD_TESTING) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/test_config.hh.in + ${PROJECT_BINARY_DIR}/include/test_config.hh) + include_directories(${PROJECT_BINARY_DIR}/include) + endif() +endif() + +set(PYBIND11_PYTHON_VERSION 3) +find_package(pybind11 2.4 CONFIG QUIET) + +if (pybind11_FOUND) + message (STATUS "Searching for pybind11 - found version ${pybind11_VERSION}.") +else() + message(WARNING "pybind11 is missing: Python interfaces are disabled.") + return() +endif() + if(USE_SYSTEM_PATHS_FOR_PYTHON_INSTALLATION) if(NOT Python3_SITEARCH) # Get variable from Python3 module @@ -12,7 +43,7 @@ if(USE_SYSTEM_PATHS_FOR_PYTHON_INSTALLATION) endif() else() # If not a system installation, respect local paths - set(GZ_PYTHON_INSTALL_PATH ${GZ_LIB_INSTALL_DIR}/python) + set(GZ_PYTHON_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR}/python) endif() # Set the build location and install location for a CPython extension @@ -108,7 +139,6 @@ if (BUILD_TESTING AND NOT WIN32) target_link_libraries(sdformattest PRIVATE ${PROJECT_LIBRARY_TARGET_NAME} - gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} ) set(python_tests @@ -176,10 +206,10 @@ if (BUILD_TESTING AND NOT WIN32) foreach (test ${python_tests}) if (pytest_FOUND) add_test(NAME ${test}.py COMMAND - "${Python3_EXECUTABLE}" -m pytest "${CMAKE_SOURCE_DIR}/python/test/${test}.py" --junitxml "${CMAKE_BINARY_DIR}/test_results/${test}.xml") + "${Python3_EXECUTABLE}" -m pytest "${CMAKE_CURRENT_SOURCE_DIR}/test/${test}.py" --junitxml "${CMAKE_BINARY_DIR}/test_results/${test}.xml") else() add_test(NAME ${test}.py COMMAND - "${Python3_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/python/test/${test}.py") + "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test/${test}.py") endif() set(_env_vars) list(APPEND _env_vars "PYTHONPATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/python/:${CMAKE_BINARY_DIR}/lib:$ENV{PYTHONPATH}") diff --git a/python/src/sdf/pyRoot.cc b/python/src/sdf/pyRoot.cc index 2da83830a..af94e78b5 100644 --- a/python/src/sdf/pyRoot.cc +++ b/python/src/sdf/pyRoot.cc @@ -96,6 +96,10 @@ void defineRoot(pybind11::object module) .def("set_light", &sdf::Root::SetLight, "Set the light object. This will override any existing model, " "actor, and light object.") + .def("clear_actor_light_model", &sdf::Root::ClearActorLightModel, + "Remove the actor, light, or model if one of them exists." + "The SDF Root object can only hold one, or none, from the set" + "[Actor, Light, Model].") .def("add_world", [](Root &self, const World &_world) { ThrowIfErrors(self.AddWorld(_world)); diff --git a/python/src/sdf/pybind11_helpers.hh b/python/src/sdf/pybind11_helpers.hh index 3e58d839a..cf2de2ca5 100644 --- a/python/src/sdf/pybind11_helpers.hh +++ b/python/src/sdf/pybind11_helpers.hh @@ -17,7 +17,7 @@ #ifndef SDFORMAT_PYTHON_PYBIND11_HELPERS_HH_ #define SDFORMAT_PYTHON_PYBIND11_HELPERS_HH_ -#include +#include #include diff --git a/python/test/pyRoot_TEST.py b/python/test/pyRoot_TEST.py index 0a41bf667..785f94de3 100644 --- a/python/test/pyRoot_TEST.py +++ b/python/test/pyRoot_TEST.py @@ -358,5 +358,33 @@ def test_resolve_auto_inertials_with_save_calculation_configuration(self): self.assertEqual(len(inertialErr), 0) self.assertTrue(link.auto_inertia_saved()) + def test_clear_actor_light_model(self): + root = Root() + + # \TODO(anyone) Wrap the Actor class. + # self.assertEqual(None, root.actor()) + # actor1 = Actor() + # actor1.set_name("actor1") + # root.set_actor(actor1) + # self.assertNotEqual(None, root.actor()) + # root.clear_actor_light_model() + # self.assertEqual(None, root.actor()) + + self.assertEqual(None, root.light()) + light1 = Light() + light1.set_name("light1") + root.set_light(light1) + self.assertNotEqual(None, root.light()) + root.clear_actor_light_model() + self.assertEqual(None, root.light()) + + self.assertEqual(None, root.model()) + model1 = Model() + model1.set_name("model1") + root.set_model(model1) + self.assertNotEqual(None, root.model()) + root.clear_actor_light_model() + self.assertEqual(None, root.model()) + if __name__ == '__main__': unittest.main() diff --git a/src/Console.cc b/src/Console.cc index 558f10d87..c87ff536e 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -24,7 +24,7 @@ #include "sdf/Console.hh" #include "sdf/Filesystem.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include diff --git a/src/Converter.hh b/src/Converter.hh index cfba5413f..0c0551aff 100644 --- a/src/Converter.hh +++ b/src/Converter.hh @@ -22,9 +22,10 @@ #include #include -#include +#include #include #include "sdf/system_util.hh" +#include namespace sdf { diff --git a/src/Error_TEST.cc b/src/Error_TEST.cc index d8bbc7747..63a127e0d 100644 --- a/src/Error_TEST.cc +++ b/src/Error_TEST.cc @@ -17,7 +17,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/Exception.hh" #include "sdf/Error.hh" #include "test_utils.hh" diff --git a/src/FrameSemantics_TEST.cc b/src/FrameSemantics_TEST.cc index 1bacb5633..22d6f66ac 100644 --- a/src/FrameSemantics_TEST.cc +++ b/src/FrameSemantics_TEST.cc @@ -29,7 +29,7 @@ #include "sdf/SDFImpl.hh" #include "sdf/World.hh" #include "sdf/parser.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "FrameSemantics.hh" #include "ScopedGraph.hh" diff --git a/src/InstallationDirectories.cc b/src/InstallationDirectories.cc index a260a32b4..df73fcac8 100644 --- a/src/InstallationDirectories.cc +++ b/src/InstallationDirectories.cc @@ -18,7 +18,7 @@ #include #include -#include +#include #include namespace sdf diff --git a/src/ParamPassing.cc b/src/ParamPassing.cc index 5bf0c97a9..f30eeb7ea 100644 --- a/src/ParamPassing.cc +++ b/src/ParamPassing.cc @@ -20,7 +20,7 @@ #include "sdf/Filesystem.hh" #include "sdf/parser.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "ParamPassing.hh" #include "parser_private.hh" diff --git a/src/Root.cc b/src/Root.cc index 03349d2af..b6e412d2f 100644 --- a/src/Root.cc +++ b/src/Root.cc @@ -27,7 +27,7 @@ #include "sdf/Types.hh" #include "sdf/World.hh" #include "sdf/parser.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "FrameSemantics.hh" #include "ScopedGraph.hh" #include "Utils.hh" @@ -644,3 +644,9 @@ sdf::ElementPtr Root::ToElement(const OutputConfig &_config) const return elem; } + +///////////////////////////////////////////////// +void Root::ClearActorLightModel() +{ + this->dataPtr->modelLightOrActor = std::monostate{}; +} diff --git a/src/Root_TEST.cc b/src/Root_TEST.cc index 4bb518ad2..629d6b7e7 100644 --- a/src/Root_TEST.cc +++ b/src/Root_TEST.cc @@ -17,7 +17,7 @@ #include #include "sdf/Actor.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/Collision.hh" #include "sdf/Error.hh" #include "sdf/Link.hh" @@ -670,3 +670,45 @@ TEST(DOMRoot, WorldByName) ASSERT_TRUE(root.WorldNameExists("world2")); EXPECT_EQ("world2", root.WorldByName("world2")->Name()); } + +///////////////////////////////////////////////// +TEST(DOMRoot, ClearActorLightModel) +{ + sdf::Root root; + EXPECT_EQ(nullptr, root.Actor()); + EXPECT_EQ(nullptr, root.Light()); + EXPECT_EQ(nullptr, root.Model()); + + sdf::Actor actor1; + actor1.SetName("actor1"); + root.SetActor(actor1); + EXPECT_NE(nullptr, root.Actor()); + EXPECT_EQ(nullptr, root.Light()); + EXPECT_EQ(nullptr, root.Model()); + root.ClearActorLightModel(); + EXPECT_EQ(nullptr, root.Actor()); + EXPECT_EQ(nullptr, root.Light()); + EXPECT_EQ(nullptr, root.Model()); + + sdf::Light light1; + light1.SetName("light1"); + root.SetLight(light1); + EXPECT_EQ(nullptr, root.Actor()); + EXPECT_NE(nullptr, root.Light()); + EXPECT_EQ(nullptr, root.Model()); + root.ClearActorLightModel(); + EXPECT_EQ(nullptr, root.Actor()); + EXPECT_EQ(nullptr, root.Light()); + EXPECT_EQ(nullptr, root.Model()); + + sdf::Model model1; + model1.SetName("model1"); + root.SetModel(model1); + EXPECT_EQ(nullptr, root.Actor()); + EXPECT_EQ(nullptr, root.Light()); + EXPECT_NE(nullptr, root.Model()); + root.ClearActorLightModel(); + EXPECT_EQ(nullptr, root.Actor()); + EXPECT_EQ(nullptr, root.Light()); + EXPECT_EQ(nullptr, root.Model()); +} diff --git a/src/SDF.cc b/src/SDF.cc index d9fa57dbd..04fc53748 100644 --- a/src/SDF.cc +++ b/src/SDF.cc @@ -32,7 +32,7 @@ #include "sdf/InstallationDirectories.hh" #include "sdf/SDFImpl.hh" #include "SDFImplPrivate.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "EmbeddedSdf.hh" #include "Utils.hh" diff --git a/src/SDFExtension.hh b/src/SDFExtension.hh index 8fe3ac762..b3a3eb1e4 100644 --- a/src/SDFExtension.hh +++ b/src/SDFExtension.hh @@ -26,7 +26,7 @@ #include -#include +#include #include "sdf/Types.hh" namespace sdf diff --git a/src/SDFImplPrivate.hh b/src/SDFImplPrivate.hh index eefc57fcd..382718147 100644 --- a/src/SDFImplPrivate.hh +++ b/src/SDFImplPrivate.hh @@ -20,6 +20,7 @@ #include #include "sdf/Types.hh" +#include "sdf/Element.hh" /// \ingroup sdf_parser /// \brief namespace for Simulation Description Format parser diff --git a/src/SDF_TEST.cc b/src/SDF_TEST.cc index 6b81db9f9..4936e8f98 100644 --- a/src/SDF_TEST.cc +++ b/src/SDF_TEST.cc @@ -20,15 +20,17 @@ #include #include -#include +#include +#include +#include +#include #include #include +#include "sdf/parser.hh" #include "test_config.hh" #include "test_utils.hh" -#include "sdf/sdf.hh" - class SDFUpdateFixture { public: std::string GetName() const {return this->name;} diff --git a/src/ScopedGraph.hh b/src/ScopedGraph.hh index 3f4c2ab3c..41739f179 100644 --- a/src/ScopedGraph.hh +++ b/src/ScopedGraph.hh @@ -27,7 +27,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" namespace sdf { diff --git a/src/Sensor_TEST.cc b/src/Sensor_TEST.cc index 482c6f1f9..df192bede 100644 --- a/src/Sensor_TEST.cc +++ b/src/Sensor_TEST.cc @@ -16,9 +16,15 @@ */ #include -#include "sdf/Noise.hh" +#include "sdf/AirPressure.hh" +#include "sdf/Altimeter.hh" +#include "sdf/Camera.hh" +#include "sdf/ForceTorque.hh" +#include "sdf/Imu.hh" +#include "sdf/Lidar.hh" #include "sdf/Magnetometer.hh" -#include "sdf/sdf.hh" +#include "sdf/NavSat.hh" +#include "sdf/Noise.hh" #include "sdf/Sensor.hh" ///////////////////////////////////////////////// diff --git a/src/Surface.cc b/src/Surface.cc index 0d10e4e9e..a0343ecf5 100644 --- a/src/Surface.cc +++ b/src/Surface.cc @@ -22,7 +22,7 @@ #include "sdf/parser.hh" #include "sdf/Surface.hh" #include "sdf/Types.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" #include "Utils.hh" diff --git a/src/bazel/InstallationDirectories.cc b/src/bazel/InstallationDirectories.cc new file mode 100644 index 000000000..6acfaa468 --- /dev/null +++ b/src/bazel/InstallationDirectories.cc @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include + +namespace sdf +{ + +inline namespace SDF_VERSION_NAMESPACE { + +// Generate an install prefix specifically for bazel build. +std::string getInstallPrefix() +{ + return "."; +} +} // namespace SDF_VERSION_NAMESPACE +} // namespace sdf + diff --git a/src/gz.cc b/src/gz.cc index 5b79685e4..54b4794d1 100644 --- a/src/gz.cc +++ b/src/gz.cc @@ -22,7 +22,7 @@ #include #include -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/Filesystem.hh" #include "sdf/Link.hh" #include "sdf/Model.hh" diff --git a/src/gz.hh b/src/gz.hh index e588721ef..6f3dbd2c6 100644 --- a/src/gz.hh +++ b/src/gz.hh @@ -20,7 +20,7 @@ #include -#include +#include #include "sdf/system_util.hh" // Inline bracket to help doxygen filtering. diff --git a/src/gz_TEST.cc b/src/gz_TEST.cc index d58121345..dc54a45d2 100644 --- a/src/gz_TEST.cc +++ b/src/gz_TEST.cc @@ -28,7 +28,7 @@ #include "sdf/Filesystem.hh" #include "sdf/parser.hh" #include "sdf/SDFImpl.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "test_config.hh" #include "test_utils.hh" diff --git a/src/parser.cc b/src/parser.cc index fea9f1ff6..6a39a9194 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -37,7 +37,7 @@ #include "sdf/World.hh" #include "sdf/parser.hh" #include "sdf/ParserConfig.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "Converter.hh" #include "FrameSemantics.hh" diff --git a/src/parser_private.hh b/src/parser_private.hh index 031f6aa51..5ced75389 100644 --- a/src/parser_private.hh +++ b/src/parser_private.hh @@ -22,7 +22,7 @@ #include #include "sdf/SDFImpl.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "sdf/system_util.hh" /// \ingroup sdf_parser diff --git a/src/parser_urdf.cc b/src/parser_urdf.cc index d8d2b2352..fac4ea5bd 100644 --- a/src/parser_urdf.cc +++ b/src/parser_urdf.cc @@ -35,8 +35,8 @@ #include #include "sdf/Error.hh" -#include "sdf/sdf.hh" #include "sdf/Types.hh" +#include "sdf/Frame.hh" #include "XmlUtils.hh" #include "SDFExtension.hh" diff --git a/src/parser_urdf.hh b/src/parser_urdf.hh index e3e2d3614..d45ada77c 100644 --- a/src/parser_urdf.hh +++ b/src/parser_urdf.hh @@ -18,7 +18,7 @@ #define SDFORMAT_URDF2SDF_HH_ #include -#include +#include #include diff --git a/src/parser_urdf_TEST.cc b/src/parser_urdf_TEST.cc index 96b940d99..ece561937 100644 --- a/src/parser_urdf_TEST.cc +++ b/src/parser_urdf_TEST.cc @@ -19,7 +19,6 @@ #include -#include "sdf/sdf.hh" #include "parser_urdf.hh" #include "test_utils.hh" diff --git a/test/BUILD.bazel b/test/BUILD.bazel index bb1baa410..1a6e82814 100644 --- a/test/BUILD.bazel +++ b/test/BUILD.bazel @@ -1,24 +1,15 @@ -load( - "@gz//bazel/skylark:build_defs.bzl", - "GZ_FEATURES", - "GZ_ROOT", - "GZ_VISIBILITY", - "cmake_configure_file", -) +load("@buildifier_prebuilt//:rules.bzl", "buildifier", "buildifier_test") +load("@rules_gazebo//gazebo:headers.bzl", "gz_configure_header") package( - default_visibility = GZ_VISIBILITY, - features = GZ_FEATURES, + default_applicable_licenses = ["//:license"], + features = ["layering_check"], ) -licenses(["notice"]) - -cmake_configure_file( - name = "config", +gz_configure_header( + name = "TestConfig", src = "test_config.hh.in", - out = "test_config.hh", - cmakelists = ["CMakeLists.txt"], - defines = [], + package_xml = "//:package.xml", ) cc_library( @@ -28,45 +19,1049 @@ cc_library( "test_utils.hh", ], includes = ["."], + visibility = ["//:__subpackages__"], +) + +exports_files( + [ + "sdf", + "integration/model", + ], + visibility = ["//:__subpackages__"], +) + +cc_test( + name = "INTEGRATION_actor_dom", + srcs = [ + "integration/actor_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_audio", + srcs = [ + "integration/audio.cc", + ], + data = [ + "integration/audio.sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_category_bitmask", + srcs = [ + "integration/category_bitmask.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_cfm_damping_implicit_spring_damper", + srcs = [ + "integration/cfm_damping_implicit_spring_damper.cc", + ], + data = [ + "integration/cfm_damping_implicit_spring_damper.sdf", + "integration/cfm_damping_implicit_spring_damper.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_collision_dom", + srcs = [ + "integration/collision_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_converter", + srcs = [ + "integration/converter.cc", + ], + data = [ + "integration/audio.sdf", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_default_elements", + srcs = [ + "integration/default_elements.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_deprecated_specs", + srcs = [ + "integration/deprecated_specs.cc", + ], + data = [ + "integration/deprecated_sdf_1-0.sdf", + "integration/deprecated_sdf_1-2.sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_disable_fixed_joint_reduction", + srcs = [ + "integration/disable_fixed_joint_reduction.cc", + ], + data = [ + "integration/fixed_joint_reduction.urdf", + "integration/fixed_joint_reduction_disabled.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +# TODO: Enable after adding build rule for tools/get_mem_info.py +# cc_test( +# name = "INTEGRATION_element_memory_leak", +# srcs = [ +# "integration/element_memory_leak.cc", +# ], +# data = [ +# ":sdf", +# ], +# deps = [ +# "//:sdformat", +# ":test_utils", +# "@googletest//:gtest_main", +# ], +# ) + +cc_test( + name = "INTEGRATION_element_tracing", + srcs = [ + "integration/element_tracing.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_error_output", + srcs = [ + "integration/error_output.cc", + ], + data = [ + ":integration/model", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_fixed_joint_reduction", + srcs = [ + "integration/fixed_joint_reduction.cc", + ], + data = glob( + [ + "integration/fixed_joint_reduction*.sdf", + "integration/fixed_joint_reduction*.urdf", + ], + ), + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_force_torque_sensor", + srcs = [ + "integration/force_torque_sensor.cc", + ], + data = [ + "integration/force_torque_sensor.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_frame", + srcs = [ + "integration/frame.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], deps = [ - GZ_ROOT + "utils:utils", - GZ_ROOT + "sdformat:sdformat", + ":test_utils", + "//:Config", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_geometry_dom", + srcs = [ + "integration/geometry_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_gui_dom", + srcs = [ + "integration/gui_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_include", + srcs = [ + "integration/include.cc", + ], + data = [ + "integration/include_description.sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) -integration_test_sources = glob( - ["integration/*.cc"], - exclude = [ - "integration/schema_test.cc", - "integration/element_memory_leak.cc", +cc_test( + name = "INTEGRATION_includes", + srcs = [ + "integration/includes.cc", + ], + data = glob( + [ + "integration/include*.sdf", + ], + ) + [ + "integration/merge_include_model.sdf", + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", ], ) -[cc_test( - name = src.replace("/", "_").replace(".cc", "").replace("integration_", "INTEGRATION_"), +cc_test( + name = "INTEGRATION_interface_api", srcs = [ - src, + "integration/interface_api.cc", "integration/toml_parser.hh", ], data = [ - GZ_ROOT + "sdformat:sdf", - "integration", - "sdf", + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_joint_axis_dom", + srcs = [ + "integration/joint_axis_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_joint_axis_frame", + srcs = [ + "integration/joint_axis_frame.cc", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_joint_dom", + srcs = [ + "integration/joint_dom.cc", + ], + data = [ + "integration/provide_feedback.urdf", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_light_dom", + srcs = [ + "integration/light_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_link_dom", + srcs = [ + "integration/link_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + ], +) + +cc_test( + name = "INTEGRATION_link_light", + srcs = [ + "integration/link_light.cc", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + ], +) + +cc_test( + name = "INTEGRATION_locale_fix", + srcs = [ + "integration/locale_fix.cc", + ], + data = [ + "integration/numeric.sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_locale_fix_cxx", + srcs = [ + "integration/locale_fix_cxx.cc", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_material", + srcs = [ + "integration/material.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + ], +) + +cc_test( + name = "INTEGRATION_material_pbr", + srcs = [ + "integration/material_pbr.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_model_dom", + srcs = [ + "integration/model_dom.cc", + ], + data = [ + ":integration/model", + ":sdf", ], - env = { - "GZ_BAZEL": "1", - "GZ_BAZEL_PATH": "sdformat", - }, - includes = ["integration"], deps = [ - GZ_ROOT + "sdformat:sdformat", ":test_utils", - "@gtest", - "@gtest//:gtest_main", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + "@gz-math//:Vector3", ], -) for src in integration_test_sources] +) -exports_files([ - "sdf", - "integration", -]) +cc_test( + name = "INTEGRATION_model_versions", + srcs = [ + "integration/model_versions.cc", + ], + data = [ + ":integration/model", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_nested_model", + srcs = [ + "integration/nested_model.cc", + ], + data = [ + "integration/nested_model_with_frames_expected.sdf", + "integration/partially_flattened.sdf", + "integration/two_level_nested_model_with_frames_expected.sdf", + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "INTEGRATION_nested_multiple_elements_error", + srcs = [ + "integration/nested_multiple_elements_error.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_param_passing", + srcs = [ + "integration/param_passing.cc", + ], + data = [ + "integration/include_custom_model.sdf", + "integration/include_custom_model_expected_output.sdf", + "integration/include_custom_nested_model_expected_output.sdf", + "integration/include_invalid_custom_model.sdf", + "integration/include_model.sdf", + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_parser_config", + srcs = [ + "integration/parser_config.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_parser_error_detection", + srcs = [ + "integration/parser_error_detection.cc", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_particle_emitter_dom", + srcs = [ + "integration/particle_emitter_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "INTEGRATION_plugin_attribute", + srcs = [ + "integration/plugin_attribute.cc", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_plugin_bool", + srcs = [ + "integration/plugin_bool.cc", + ], + deps = [ + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_plugin_include", + srcs = [ + "integration/plugin_include.cc", + ], + data = [ + ":integration/model", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_pose_1_9_sdf", + srcs = [ + "integration/pose_1_9_sdf.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Angle", + "@gz-math//:Pose3", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "INTEGRATION_precision", + srcs = [ + "integration/precision.cc", + ], + deps = [ + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_print_config", + srcs = [ + "integration/print_config.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_projector_dom", + srcs = [ + "integration/projector_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Vector3", + ], +) + +cc_test( + name = "INTEGRATION_provide_feedback", + srcs = [ + "integration/provide_feedback.cc", + ], + data = [ + "integration/provide_feedback.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_resolve_uris", + srcs = [ + "integration/resolve_uris.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_root_dom", + srcs = [ + "integration/root_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_scene_dom", + srcs = [ + "integration/scene_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + "@gz-math//:Color", + ], +) + +# TODO: Enable once xmllint is available in toolchain +# cc_test( +# name = "INTEGRATION_schema_test", +# srcs = [ +# "integration/schema_test.cc", +# ], +# data = [ +# ":integration/model", +# ], +# deps = [ +# "//:sdformat", +# ":test_utils", +# "@googletest//:gtest_main", +# ], +# ) + +cc_test( + name = "INTEGRATION_sdf_basic", + srcs = [ + "integration/sdf_basic.cc", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_sdf_custom", + srcs = [ + "integration/sdf_custom.cc", + ], + data = [ + "integration/custom_elems_attrs.sdf", + ":integration/model", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_sdf_dom_conversion", + srcs = [ + "integration/sdf_dom_conversion.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_sensor_dom", + srcs = [ + "integration/sensor_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_surface_dom", + srcs = [ + "integration/surface_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_unknown", + srcs = [ + "integration/unknown.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_urdf_gazebo_extensions", + srcs = [ + "integration/urdf_gazebo_extensions.cc", + ], + data = [ + "integration/fixed_joint_example.urdf", + "integration/fixed_joint_simple.urdf", + "integration/fixed_joint_static.urdf", + "integration/urdf_gazebo_extensions.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_urdf_joint_parameters", + srcs = [ + "integration/urdf_joint_parameters.cc", + ], + data = [ + "integration/urdf_joint_parameters.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_urdf_to_sdf", + srcs = [ + "integration/urdf_to_sdf.cc", + ], + data = [ + "integration/force_torque_sensor.urdf", + "integration/invalid_force_torque_sensor_lumped_and_reduced.urdf", + "integration/invalid_force_torque_sensor_massless_child_link.urdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_visual_dom", + srcs = [ + "integration/visual_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_whitespace", + srcs = [ + "integration/whitespace.cc", + ], + data = [ + ":integration/model", + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "INTEGRATION_world_dom", + srcs = [ + "integration/world_dom.cc", + ], + data = [ + ":sdf", + ], + deps = [ + ":test_utils", + "//:sdformat", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + +# Bazel linting +buildifier( + name = "buildifier.fix", + lint_mode = "fix", + mode = "fix", +) + +buildifier_test( + name = "buildifier.test", + lint_mode = "warn", + mode = "diff", + no_sandbox = True, + workspace = "//:MODULE.bazel", +) diff --git a/test/integration/audio.cc b/test/integration/audio.cc index ed6c39191..4e6e3cb46 100644 --- a/test/integration/audio.cc +++ b/test/integration/audio.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/category_bitmask.cc b/test/integration/category_bitmask.cc index e983631b3..e3a2f8506 100644 --- a/test/integration/category_bitmask.cc +++ b/test/integration/category_bitmask.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" ///////////////////////////////////////////////// TEST(CategoryBitmask, WasSpecified) diff --git a/test/integration/cfm_damping_implicit_spring_damper.cc b/test/integration/cfm_damping_implicit_spring_damper.cc index 2d5f2e8dc..a9bedf18c 100644 --- a/test/integration/cfm_damping_implicit_spring_damper.cc +++ b/test/integration/cfm_damping_implicit_spring_damper.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/converter.cc b/test/integration/converter.cc index 1509de722..40fc6cc9a 100644 --- a/test/integration/converter.cc +++ b/test/integration/converter.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/disable_fixed_joint_reduction.cc b/test/integration/disable_fixed_joint_reduction.cc index d71390f36..8bd75866f 100644 --- a/test/integration/disable_fixed_joint_reduction.cc +++ b/test/integration/disable_fixed_joint_reduction.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/element_memory_leak.cc b/test/integration/element_memory_leak.cc index ecb9c03d9..4562f3c1b 100644 --- a/test/integration/element_memory_leak.cc +++ b/test/integration/element_memory_leak.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/fixed_joint_reduction.cc b/test/integration/fixed_joint_reduction.cc index 064484964..3bf03345d 100644 --- a/test/integration/fixed_joint_reduction.cc +++ b/test/integration/fixed_joint_reduction.cc @@ -20,7 +20,10 @@ #include -#include "sdf/sdf.hh" +#include "sdf/Model.hh" +#include "sdf/Joint.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" #include "test_config.hh" diff --git a/test/integration/force_torque_sensor.cc b/test/integration/force_torque_sensor.cc index 83c730349..f7cd36773 100644 --- a/test/integration/force_torque_sensor.cc +++ b/test/integration/force_torque_sensor.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/frame.cc b/test/integration/frame.cc index b080ae5d5..8590c0d14 100644 --- a/test/integration/frame.cc +++ b/test/integration/frame.cc @@ -30,7 +30,7 @@ #include "sdf/SDFImpl.hh" #include "sdf/World.hh" #include "sdf/parser.hh" -#include "sdf/sdf_config.h" +#include "sdf/config.hh" #include "test_config.hh" diff --git a/test/integration/include.cc b/test/integration/include.cc index 7e48e84c2..79386e404 100644 --- a/test/integration/include.cc +++ b/test/integration/include.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/joint_axis_frame.cc b/test/integration/joint_axis_frame.cc index 31b54bdb6..fcc5c6515 100644 --- a/test/integration/joint_axis_frame.cc +++ b/test/integration/joint_axis_frame.cc @@ -20,7 +20,8 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" std::string get_sdf_string(const std::string &_version) { diff --git a/test/integration/link_light.cc b/test/integration/link_light.cc index fbffca098..7d0cba245 100644 --- a/test/integration/link_light.cc +++ b/test/integration/link_light.cc @@ -18,7 +18,7 @@ #include #include #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/locale_fix.cc b/test/integration/locale_fix.cc index 7957919e1..5e103a96e 100644 --- a/test/integration/locale_fix.cc +++ b/test/integration/locale_fix.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/locale_fix_cxx.cc b/test/integration/locale_fix_cxx.cc index 36d74d898..589497562 100644 --- a/test/integration/locale_fix_cxx.cc +++ b/test/integration/locale_fix_cxx.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/Param.hh" TEST(CheckFixForLocal, CheckFixForCxxLocal) { diff --git a/test/integration/material.cc b/test/integration/material.cc index df927af16..74bce1c10 100644 --- a/test/integration/material.cc +++ b/test/integration/material.cc @@ -20,7 +20,8 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" #include "test_config.hh" void ExpectInvalidWithMessage(sdf::Errors &_errors, std::string _compType) diff --git a/test/integration/material_pbr.cc b/test/integration/material_pbr.cc index b7ef86d23..f9b8677e7 100644 --- a/test/integration/material_pbr.cc +++ b/test/integration/material_pbr.cc @@ -17,8 +17,14 @@ #include #include -#include "sdf/sdf.hh" + +#include "sdf/Link.hh" +#include "sdf/Material.hh" +#include "sdf/Model.hh" #include "sdf/Pbr.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" +#include "sdf/Visual.hh" #include "test_config.hh" diff --git a/test/integration/model_versions.cc b/test/integration/model_versions.cc index 7bd2627eb..09bc0e7a1 100644 --- a/test/integration/model_versions.cc +++ b/test/integration/model_versions.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/nested_model.cc b/test/integration/nested_model.cc index 54859c95e..720551609 100644 --- a/test/integration/nested_model.cc +++ b/test/integration/nested_model.cc @@ -23,7 +23,16 @@ #include #include -#include "sdf/sdf.hh" +#include "sdf/Collision.hh" +#include "sdf/Frame.hh" +#include "sdf/Joint.hh" +#include "sdf/JointAxis.hh" +#include "sdf/Link.hh" +#include "sdf/Model.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" +#include "sdf/Visual.hh" +#include "sdf/World.hh" #include "test_config.hh" diff --git a/test/integration/parser_error_detection.cc b/test/integration/parser_error_detection.cc index 3d6fc752f..69fcd53f8 100644 --- a/test/integration/parser_error_detection.cc +++ b/test/integration/parser_error_detection.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" std::string get_sdf_string() { diff --git a/test/integration/plugin_attribute.cc b/test/integration/plugin_attribute.cc index 7f4f9f4cb..19ac6e484 100644 --- a/test/integration/plugin_attribute.cc +++ b/test/integration/plugin_attribute.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" std::string get_sdf_string() { diff --git a/test/integration/plugin_bool.cc b/test/integration/plugin_bool.cc index 55139b2a7..b7b735615 100644 --- a/test/integration/plugin_bool.cc +++ b/test/integration/plugin_bool.cc @@ -20,7 +20,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" std::string get_sdf_string() { diff --git a/test/integration/plugin_include.cc b/test/integration/plugin_include.cc index e7f5e1827..fef78f692 100644 --- a/test/integration/plugin_include.cc +++ b/test/integration/plugin_include.cc @@ -17,7 +17,7 @@ #include #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/precision.cc b/test/integration/precision.cc index b2503ecd3..65d3ca255 100644 --- a/test/integration/precision.cc +++ b/test/integration/precision.cc @@ -17,7 +17,7 @@ #include #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" std::string get_sdf_string() { diff --git a/test/integration/print_config.cc b/test/integration/print_config.cc index 922f7f5fa..c0882580f 100644 --- a/test/integration/print_config.cc +++ b/test/integration/print_config.cc @@ -22,7 +22,17 @@ #include #include -#include "sdf/sdf.hh" +#include "sdf/Camera.hh" +#include "sdf/Geometry.hh" +#include "sdf/Joint.hh" +#include "sdf/JointAxis.hh" +#include "sdf/Link.hh" +#include "sdf/Model.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" +#include "sdf/Sensor.hh" +#include "sdf/Visual.hh" +#include "sdf/World.hh" #include "test_config.hh" diff --git a/test/integration/provide_feedback.cc b/test/integration/provide_feedback.cc index 1811628f8..3f5e771c8 100644 --- a/test/integration/provide_feedback.cc +++ b/test/integration/provide_feedback.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/resolve_uris.cc b/test/integration/resolve_uris.cc index f7273e5e5..b268c0590 100644 --- a/test/integration/resolve_uris.cc +++ b/test/integration/resolve_uris.cc @@ -20,7 +20,15 @@ #include -#include "sdf/sdf.hh" +#include "sdf/Collision.hh" +#include "sdf/Geometry.hh" +#include "sdf/Heightmap.hh" +#include "sdf/Link.hh" +#include "sdf/Model.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" +#include "sdf/Visual.hh" +#include "sdf/World.hh" #include "test_config.hh" diff --git a/test/integration/schema_test.cc b/test/integration/schema_test.cc index 99a309fdb..7a8392d53 100644 --- a/test/integration/schema_test.cc +++ b/test/integration/schema_test.cc @@ -21,7 +21,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/sdf_basic.cc b/test/integration/sdf_basic.cc index 7ea458804..71009c0d5 100644 --- a/test/integration/sdf_basic.cc +++ b/test/integration/sdf_basic.cc @@ -16,7 +16,7 @@ */ #include -#include "sdf/sdf.hh" +#include "sdf/SDFImpl.hh" #include "test_config.hh" diff --git a/test/integration/sdf_custom.cc b/test/integration/sdf_custom.cc index ef04256b9..8434270d2 100644 --- a/test/integration/sdf_custom.cc +++ b/test/integration/sdf_custom.cc @@ -19,7 +19,11 @@ #include -#include "sdf/sdf.hh" +#include "sdf/Link.hh" +#include "sdf/Model.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" +#include "sdf/World.hh" #include "test_config.hh" diff --git a/test/integration/unknown.cc b/test/integration/unknown.cc index 33204521b..60dc4dcbc 100644 --- a/test/integration/unknown.cc +++ b/test/integration/unknown.cc @@ -19,8 +19,9 @@ #include -#include "sdf/sdf.hh" #include "sdf/Error.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" #include "test_config.hh" diff --git a/test/integration/urdf_gazebo_extensions.cc b/test/integration/urdf_gazebo_extensions.cc index a8c9f7f7c..56f3be4bb 100644 --- a/test/integration/urdf_gazebo_extensions.cc +++ b/test/integration/urdf_gazebo_extensions.cc @@ -19,7 +19,12 @@ #include -#include "sdf/sdf.hh" +#include "sdf/Frame.hh" +#include "sdf/Joint.hh" +#include "sdf/Link.hh" +#include "sdf/Model.hh" +#include "sdf/parser.hh" +#include "sdf/Root.hh" #include "test_config.hh" diff --git a/test/integration/urdf_joint_parameters.cc b/test/integration/urdf_joint_parameters.cc index 734d52c5f..9462b16e2 100644 --- a/test/integration/urdf_joint_parameters.cc +++ b/test/integration/urdf_joint_parameters.cc @@ -19,7 +19,7 @@ #include -#include "sdf/sdf.hh" +#include "sdf/parser.hh" #include "test_config.hh" diff --git a/test/integration/urdf_to_sdf.cc b/test/integration/urdf_to_sdf.cc index 0dcd42444..2afd40511 100644 --- a/test/integration/urdf_to_sdf.cc +++ b/test/integration/urdf_to_sdf.cc @@ -18,7 +18,10 @@ #include #include -#include "sdf/sdf.hh" +#include "sdf/Frame.hh" +#include "sdf/Joint.hh" +#include "sdf/Link.hh" +#include "sdf/Model.hh" #include "sdf/parser.hh" #include "sdf/ParserConfig.hh" #include "test_config.hh" diff --git a/test/test_config.hh.in b/test/test_config.hh.in index 303eab375..f57debcee 100644 --- a/test/test_config.hh.in +++ b/test/test_config.hh.in @@ -48,13 +48,13 @@ namespace sdf /// \return True if directory is set correctly, false otherwise bool ProjectSourcePath(std::string &_sourceDir) { - std::string bazel_path; // Bazel builds set TEST_SRCDIR - if(gz::utils::env("TEST_SRCDIR", _sourceDir) && - gz::utils::env("GZ_BAZEL_PATH", bazel_path)) + if(gz::utils::env("TEST_SRCDIR", _sourceDir)) { - _sourceDir = sdf::filesystem::append( - _sourceDir, "gz", bazel_path); + // Bazel symlinks test files at .runfiles/_main/ and + // the TEST_SRCDIR env var should point to .runfiles. + // See https://bazel.build/remote/output-directories for details. + _sourceDir = sdf::filesystem::append(_sourceDir, "_main"); return true; } else