rabbitmq-server/deps/rabbitmq_cli/mix.exs

201 lines
5.8 KiB
Elixir

## This Source Code Form is subject to the terms of the Mozilla Public
## License, v. 2.0. If a copy of the MPL was not distributed with this
## file, You can obtain one at https://mozilla.org/MPL/2.0/.
##
## Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
defmodule RabbitMQCtl.MixfileBase do
use Mix.Project
def project do
[
app: :rabbitmqctl,
version: "4.0.0-dev",
elixir: ">= 1.13.4 and < 1.19.0",
build_embedded: Mix.env() == :prod,
start_permanent: Mix.env() == :prod,
escript: [
main_module: RabbitMQCtl,
emu_args: "-hidden",
path: "escript/rabbitmqctl"
],
prune_code_paths: false,
elixirc_options: [ignore_module_conflict: true],
deps: deps(Mix.env()),
xref: [
exclude: [
CSV,
CSV.Encode,
JSON,
:mnesia,
:msacc,
:public_key,
:pubkey_cert,
:rabbit,
:rabbit_control_misc,
:rabbit_data_coercion,
:rabbit_db_cluster,
:rabbit_env,
:rabbit_event,
:rabbit_file,
:rabbit_net,
:rabbit_log,
:rabbit_misc,
:rabbit_mnesia,
:rabbit_nodes_common,
:rabbit_pbe,
:rabbit_plugins,
:rabbit_resource_monitor_misc,
:stdout_formatter
]
]
]
end
# Configuration for the OTP application
#
# Type "mix help compile.app" for more information
def application do
[
applications: [:logger],
env: [
scopes: [
"rabbitmq-plugins": :plugins,
rabbitmqctl: :ctl,
"rabbitmq-diagnostics": :diagnostics,
"rabbitmq-queues": :queues,
"rabbitmq-streams": :streams,
"rabbitmq-upgrade": :upgrade,
"vmware-rabbitmq": :vmware
]
]
]
|> add_modules(Mix.env())
end
defp add_modules(app, :test) do
# There are issues with building a package without this line ¯\_(ツ)_/¯
Mix.Project.get()
path = Mix.Project.compile_path()
mods = modules_from(Path.wildcard("#{path}/*.beam"))
test_modules = [
RabbitMQ.CLI.Ctl.Commands.DuckCommand,
RabbitMQ.CLI.Ctl.Commands.GrayGooseCommand,
RabbitMQ.CLI.Ctl.Commands.UglyDucklingCommand,
RabbitMQ.CLI.Plugins.Commands.StorkCommand,
RabbitMQ.CLI.Plugins.Commands.HeronCommand,
RabbitMQ.CLI.Custom.Commands.CrowCommand,
RabbitMQ.CLI.Custom.Commands.RavenCommand,
RabbitMQ.CLI.Seagull.Commands.SeagullCommand,
RabbitMQ.CLI.Seagull.Commands.PacificGullCommand,
RabbitMQ.CLI.Seagull.Commands.HerringGullCommand,
RabbitMQ.CLI.Seagull.Commands.HermannGullCommand,
RabbitMQ.CLI.Wolf.Commands.CanisLupusCommand,
RabbitMQ.CLI.Wolf.Commands.CanisLatransCommand,
RabbitMQ.CLI.Wolf.Commands.CanisAureusCommand
]
[{:modules, (mods ++ test_modules) |> Enum.sort()} | app]
end
defp add_modules(app, _) do
app
end
defp modules_from(beams) do
Enum.map(beams, &(&1 |> Path.basename() |> Path.rootname(".beam") |> String.to_atom()))
end
# Dependencies can be Hex packages:
#
# {:mydep, "~> 0.3.0"}
#
# Or git/path repositories:
#
# {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
#
# Type "mix help deps" for more examples and options
#
# CAUTION: Dependencies which are shipped with RabbitMQ *MUST* com
# from Hex.pm! Therefore it's ok to fetch dependencies from Git if
# they are test dependencies or it is temporary while testing a patch.
# But that's about it. If in doubt, use Hex.pm!
#
# The reason is that we have some Makefile code to put dependencies
# from Hex.pm in RabbitMQ source archive (the source archive must be
# self-contained and RabbitMQ must be buildable offline). However, we
# don't have the equivalent for other methods.
defp deps(env) do
deps_dir = System.get_env("DEPS_DIR", "deps")
# Mix is confused by any `rebar.{config,lock}` we might have left in
# `rabbit_common` or `amqp_client`. So just remove those files to be
# safe, as they are generated when we publish to Hex.pm only.
for dir <- ["rabbit_common", "amqp_client"] do
for file <- ["rebar.config", "rebar.lock"] do
File.rm(Path.join([deps_dir, dir, file]))
end
end
make_cmd = System.get_env("MAKE", "make")
fake_cmd = "true"
is_bazel = System.get_env("IS_BAZEL") != nil
# Note that normal deps will be fetched by Erlang.mk on build.
[
{
:json,
path: Path.join(deps_dir, "json")
},
{
:csv,
path: Path.join(deps_dir, "csv")
},
{
:stdout_formatter,
path: Path.join(deps_dir, "stdout_formatter"),
compile: if(is_bazel, do: fake_cmd, else: make_cmd)
},
{
:rabbit_common,
path: Path.join(deps_dir, "rabbit_common"),
compile: if(is_bazel, do: fake_cmd, else: make_cmd),
override: true
}
] ++
case env do
:test ->
[
{
:amqp,
path: Path.join(deps_dir, "amqp")
},
{
:rabbit,
path: Path.join(deps_dir, "rabbit"),
compile: if(is_bazel, do: fake_cmd, else: make_cmd),
override: true
},
{
:temp,
path: Path.join(deps_dir, "temp")
},
{
:x509,
path: Path.join(deps_dir, "x509")
},
{
:amqp_client,
path: Path.join(deps_dir, "amqp_client"),
compile: if(is_bazel, do: fake_cmd, else: make_cmd),
override: true
}
]
_ ->
[]
end
end
end