From 9a8aa5cf992429f9fe5749970b9d76be2ea7d01e Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Wed, 14 Apr 2021 03:41:02 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E6=A8=A1=E5=9D=97=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=20=E9=98=B2=E6=AD=A2=E6=A8=A1=E5=9D=97=E9=87=8D?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootstrap | 14 ++--- eNpc | Bin 26669 -> 50337 bytes include/rebar.hrl | 10 ++-- src/eNpc.erl | 4 +- src/{rebarNpCompiler.erl => npRCompiler.erl} | 58 +++++++++---------- src/{rebarConfig.erl => npRConfig.erl} | 10 ++-- src/{rebar.erl => npRMain.erl} | 50 ++++++++-------- src/{rebarUtils.erl => npRUtils.erl} | 18 +++--- 8 files changed, 82 insertions(+), 82 deletions(-) rename src/{rebarNpCompiler.erl => npRCompiler.erl} (94%) rename src/{rebarConfig.erl => npRConfig.erl} (96%) rename src/{rebar.erl => npRMain.erl} (83%) rename src/{rebarUtils.erl => npRUtils.erl} (97%) diff --git a/bootstrap b/bootstrap index 7422f73..461d589 100644 --- a/bootstrap +++ b/bootstrap @@ -24,8 +24,8 @@ main(Args) -> true -> rm("ebin/*.beam"); false -> - case filelib:is_file("ebin/rebar.beam") of - true -> rm("ebin/rebar.beam"); + case filelib:is_file("ebin/npRMain.beam") of + true -> rm("ebin/npRMain.beam"); false -> io:fwrite("No beam files found.~n") end end, @@ -44,7 +44,7 @@ main(Args) -> %% At the same time, their counterparts dict() and digraph() are to be %% deprecated in Erlang 18. namespaced_types option is used to select %% proper type name depending on the OTP version used. - %% Extract the system info of the version of OTP we use to compile rebar + %% Extract the system info of the version of OTP we use to compile npRMain %% NamespacedTypes = %% case is_otp(OtpInfo, "^[0-9]+") of %% true -> {d, namespaced_types}; @@ -53,7 +53,7 @@ main(Args) -> %% Compile all src/*.erl to ebin %% To not accidentally try to compile files like Mac OS X resource forks, - %% we only look for rebar source files that start with a letter. + %% we only look for npRMain source files that start with a letter. Opts = [ DebugFlag, {outdir, "ebin"}, @@ -82,10 +82,10 @@ main(Args) -> %% Add ebin/ to our path true = code:add_path("ebin"), - %% Run rebar compile to do proper .app validation etc. - %% and rebar escriptize to create the rebar script + %% Run npRMain compile to do proper .app validation etc. + %% and npRMain escriptize to create the npRMain script %% RebarArgs = Args -- ["debug"], %% Avoid trying to run 'debug' command - % rebar:main(["compile"] ++ RebarArgs), + % npRMain:main(["compile"] ++ RebarArgs), escriptize(), diff --git a/eNpc b/eNpc index bab264af286737d6318aec3a5a35da3fc9133d62..61ea55e6821868641e5201e76947423c7abbbf2a 100644 GIT binary patch delta 25395 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 gTuuo3h@YReahv!vf(EoC5 {ok, CurDir} = file:get_cwd(), io:format("eNpc cur ~p: ~-18.s, cur pwd:~p ~n", [Args, File, CurDir]), file:set_cwd(File), - rebar:main(Args), + npRMain:main(Args), file:set_cwd(".."); _ -> ignore @@ -25,7 +25,7 @@ main(Args) -> {ok, Files} -> lists:foreach(FunCom, Files); _Err -> - rebar:log(error, "eNpc start compile error ~p ~n", [_Err]) + npRMain:log(error, "eNpc start compile error ~p ~n", [_Err]) end. diff --git a/src/rebarNpCompiler.erl b/src/npRCompiler.erl similarity index 94% rename from src/rebarNpCompiler.erl rename to src/npRCompiler.erl index 65cad53..b09c598 100644 --- a/src/rebarNpCompiler.erl +++ b/src/npRCompiler.erl @@ -1,4 +1,4 @@ --module(rebarNpCompiler). +-module(npRCompiler). -include("rebar.hrl"). @@ -28,7 +28,7 @@ compile(Config, AppFile) -> [] -> ok; Specs -> - SharedEnv = rebarConfig:getEnv(Config, ?MODULE), + SharedEnv = npRConfig:getEnv(Config, ?MODULE), %% Compile each of the sources NewBins = compileSources(Config, Specs, SharedEnv), @@ -52,7 +52,7 @@ compile(Config, AppFile) -> LinkTemplate = selectLinkTemplate(LinkLang, Target), Env = proplists:get_value(env, Opts, SharedEnv), Cmd = expandCommand(LinkTemplate, Env, string:join(Bins, " "), Target), - rebarUtils:sh(Cmd, [{env, Env}]); + npRUtils:sh(Cmd, [{env, Env}]); false -> ?INFO("Skipping relink of ~s\n", [Target]), ok @@ -67,9 +67,9 @@ clean(Config, AppFile) -> Specs -> lists:foreach( fun(#spec{target = Target, objects = Objects}) -> - rebarUtils:deleteEach([Target]), - rebarUtils:deleteEach(Objects), - rebarUtils:deleteEach(portDeps(Objects)) + npRUtils:deleteEach([Target]), + npRUtils:deleteEach(Objects), + npRUtils:deleteEach(portDeps(Objects)) end, Specs) end, ok. @@ -156,8 +156,8 @@ infoHelp(Description) -> %% set REBAR_DEPS_DIR and ERL_LIBS environment variables defaultEnv(Config) -> - BaseDir = rebarUtils:baseDir(Config), - DepsDir0 = rebarConfig:getXconf(Config, deps_dir, "deps"), + BaseDir = npRUtils:baseDir(Config), + DepsDir0 = npRConfig:getXconf(Config, deps_dir, "deps"), DepsDir = filename:dirname(filename:join([BaseDir, DepsDir0, "dummy"])), %% include rebar's DepsDir in ERL_LIBS @@ -185,10 +185,10 @@ setupEnv(Config, ExtraEnv) -> %% Get any port-specific envs; use port_env first and then fallback %% to port_envs for compatibility - RawPortEnv = rebarConfig:getList( + RawPortEnv = npRConfig:getList( Config, port_env, - rebarConfig:getList(Config, port_envs, [])), + npRConfig:getList(Config, port_envs, [])), PortEnv = filterEnv(RawPortEnv, []), Defines = getDefines(Config), @@ -197,7 +197,7 @@ setupEnv(Config, ExtraEnv) -> expandVarsLoop(mergeEachVar(RawEnv, [])). getDefines(Config) -> - RawDefines = rebarConfig:getXconf(Config, defines, []), + RawDefines = npRConfig:getXconf(Config, defines, []), Defines = string:join(["-D" ++ D || D <- RawDefines], " "), [{"ERL_CFLAGS", "$ERL_CFLAGS " ++ Defines}]. @@ -264,7 +264,7 @@ cdbEntry(Src, Cmd, SrcRest) -> string:tokens(Cmd, " ")), " "), - Cwd = rebarUtils:getCwd(), + Cwd = npRUtils:getCwd(), %% If there are more source files, make sure we end the CDB entry %% with a comma. Sep = case SrcRest of @@ -279,10 +279,10 @@ cdbEntry(Src, Cmd, SrcRest) -> [Src, Cwd, CDBCmd, Sep]). execCompiler(Config, Source, Cmd, ShOpts) -> - case rebarUtils:sh(Cmd, ShOpts) of + case npRUtils:sh(Cmd, ShOpts) of {error, {_RC, RawError}} -> AbsSource = - case rebarUtils:processingBaseDir(Config) of + case npRUtils:processingBaseDir(Config) of true -> Source; false -> @@ -337,7 +337,7 @@ needsLink(SoName, NewBins) -> getSpecs(Config, AppFile) -> Specs = - case rebarConfig:getLocal(Config, port_specs, []) of + case npRConfig:getLocal(Config, port_specs, []) of [] -> %% No spec provided. Construct a spec %% from old-school so_name and sources @@ -352,17 +352,17 @@ getSpecs(Config, AppFile) -> portSpecFromLegacy(Config, AppFile) -> %% Get the target from the so_name variable Target = - case rebarConfig:get(Config, so_name, undefined) of + case npRConfig:get(Config, so_name, undefined) of undefined -> %% Generate a sensible default from app file - {_, AppName} = rebarUtils:appName(Config, AppFile), + {_, AppName} = npRUtils:appName(Config, AppFile), filename:join("priv", lists:concat([AppName, "_drv.so"])); AName -> %% Old form is available -- use it filename:join("priv", AName) end, %% Get the list of source files from port_sources - Sources = portSources(rebarConfig:getList(Config, port_sources, ["c_src/*.c"])), + Sources = portSources(npRConfig:getList(Config, port_sources, ["c_src/*.c"])), #spec{ type = targetType(Target), link_lang = cc, @@ -375,9 +375,9 @@ filterPortSpecs(Specs) -> [S || S <- Specs, filterPortSpec(S)]. filterPortSpec({ArchRegex, _, _, _}) -> - rebarUtils:isArch(ArchRegex); + npRUtils:isArch(ArchRegex); filterPortSpec({ArchRegex, _, _}) -> - rebarUtils:isArch(ArchRegex); + npRUtils:isArch(ArchRegex); filterPortSpec({_, _}) -> true. @@ -459,7 +459,7 @@ applyDefaults(Vars, Defaults) -> fun(Key, VarValue, DefaultValue) -> case isExpandable(DefaultValue) of true -> - rebarUtils:expandEnvVariable(DefaultValue, + npRUtils:expandEnvVariable(DefaultValue, Key, VarValue); false -> VarValue @@ -481,10 +481,10 @@ mergeEachVar([{Key, Value} | Rest], Vars) -> error -> %% Nothing yet defined for this key/value. %% Expand any self-references as blank. - rebarUtils:expandEnvVariable(Value, Key, ""); + npRUtils:expandEnvVariable(Value, Key, ""); {ok, Value0} -> %% Use previous definition in expansion - rebarUtils:expandEnvVariable(Value, Key, Value0) + npRUtils:expandEnvVariable(Value, Key, Value0) end, mergeEachVar(Rest, orddict:store(Key, Evalue, Vars)). @@ -537,7 +537,7 @@ expandKeysInValue([Key | Rest], Value, Vars) -> NewValue = case dict:find(Key, Vars) of {ok, KValue} -> - rebarUtils:expandEnvVariable(Value, Key, KValue); + npRUtils:expandEnvVariable(Value, Key, KValue); error -> Value end, @@ -545,8 +545,8 @@ expandKeysInValue([Key | Rest], Value, Vars) -> expandCommand(TmplName, Env, InFiles, OutFile) -> Cmd0 = proplists:get_value(TmplName, Env), - Cmd1 = rebarUtils:expandEnvVariable(Cmd0, "PORT_IN_FILES", InFiles), - rebarUtils:expandEnvVariable(Cmd1, "PORT_OUT_FILE", OutFile). + Cmd1 = npRUtils:expandEnvVariable(Cmd0, "PORT_IN_FILES", InFiles), + npRUtils:expandEnvVariable(Cmd1, "PORT_OUT_FILE", OutFile). %% %% Given a string, determine if it is expandable @@ -564,7 +564,7 @@ isExpandable(InStr) -> filterEnv([], Acc) -> lists:reverse(Acc); filterEnv([{ArchRegex, Key, Value} | Rest], Acc) -> - case rebarUtils:isArch(ArchRegex) of + case npRUtils:isArch(ArchRegex) of true -> filterEnv(Rest, [{Key, Value} | Acc]); false -> @@ -671,8 +671,8 @@ defaultEnv() -> ])}, {"ERL_EI_LIBDIR", lists:concat(["\"", erlInterfaceDir(lib), "\""])}, {"ERL_LDFLAGS", " -L$ERL_EI_LIBDIR -lei"}, - {"ERLANG_ARCH", rebarUtils:wordsize()}, - {"ERLANG_TARGET", rebarUtils:getArch()}, + {"ERLANG_ARCH", npRUtils:wordsize()}, + {"ERLANG_TARGET", npRUtils:getArch()}, {"darwin", "DRV_LDFLAGS", "-bundle -flat_namespace -undefined suppress $ERL_LDFLAGS"}, diff --git a/src/rebarConfig.erl b/src/npRConfig.erl similarity index 96% rename from src/rebarConfig.erl rename to src/npRConfig.erl index 9512880..9ccab08 100644 --- a/src/rebarConfig.erl +++ b/src/npRConfig.erl @@ -1,4 +1,4 @@ --module(rebarConfig). +-module(npRConfig). -include("rebar.hrl"). @@ -39,18 +39,18 @@ -spec baseConfig(config()) -> config(). baseConfig(GlobalConfig) -> - ConfName = rebarConfig:getGlobal(GlobalConfig, config, ?DEFAULT_NAME), + ConfName = npRConfig:getGlobal(GlobalConfig, config, ?DEFAULT_NAME), new(GlobalConfig, ConfName). -spec new() -> config(). new() -> - #config{dir = rebarUtils:getCwd()}. + #config{dir = npRUtils:getCwd()}. -spec new(file:filename() | config()) -> config(). new(ConfigFile) when is_list(ConfigFile) -> case consultFile(ConfigFile) of {ok, Opts} -> - #config{dir = rebarUtils:getCwd(), + #config{dir = npRUtils:getCwd(), opts = Opts}; Other -> ?ABORT("Failed to load ~s: ~p~n", [ConfigFile, Other]) @@ -140,7 +140,7 @@ getXconf(Config, Key, Default) -> -spec new(config(), file:filename()) -> config(). new(ParentConfig, ConfName) -> %% Load terms from rebar.config, if it exists - Dir = rebarUtils:getCwd(), + Dir = npRUtils:getCwd(), ConfigFile = filename:join([Dir, ConfName]), Opts0 = ParentConfig#config.opts, Opts = case consultFile(ConfigFile) of diff --git a/src/rebar.erl b/src/npRMain.erl similarity index 83% rename from src/rebar.erl rename to src/npRMain.erl index dc2dd20..c7ef87c 100644 --- a/src/rebar.erl +++ b/src/npRMain.erl @@ -1,4 +1,4 @@ --module(rebar). +-module(npRMain). -export([ main/1, @@ -26,12 +26,12 @@ main(Args) -> ok -> ok; rebar_abort -> - rebarUtils:delayedHalt(1); + npRUtils:delayedHalt(1); Error -> %% Nothing should percolate up from rebar_core; %% Dump this error to console io:format("Uncaught error in rebar_core: ~p\n", [Error]), - rebarUtils:delayedHalt(1) + npRUtils:delayedHalt(1) end. log(Level, Format, Args) -> @@ -74,13 +74,13 @@ loadRebarApp() -> {error, {already_loaded,eNpc}} -> ok; _ -> - rebarUtils:delayedHalt(1) + npRUtils:delayedHalt(1) end. help(compile) -> - rebarNpCompiler:info(help, compile); + npRCompiler:info(help, compile); help(clean) -> - rebarNpCompiler:info(help, clean); + npRCompiler:info(help, clean); help(Command) -> ?CONSOLE("eNpc no help available for \"~p\"~n", [Command]). @@ -89,17 +89,17 @@ parseArgs([]) -> parseArgs(["-h" | _]) -> usage(), help(compile), - rebarUtils:delayedHalt(0); + npRUtils:delayedHalt(0); parseArgs(["--help" | _]) -> usage(), help(compile), - rebarUtils:delayedHalt(0); + npRUtils:delayedHalt(0); parseArgs(["-v" | _]) -> version(), - rebarUtils:delayedHalt(0); + npRUtils:delayedHalt(0); parseArgs(["--version" | _]) -> version(), - rebarUtils:delayedHalt(0); + npRUtils:delayedHalt(0); parseArgs(["-c", FileName | Rest]) -> {Opts, NonOpts} = parseArgs(Rest), {[{config, FileName} | Opts], NonOpts}; @@ -118,9 +118,9 @@ initConfig({Options, _NonOptArgs}) -> GlobalConfig = case filelib:is_regular(GlobalConfigFile) of true -> - rebarConfig:new(GlobalConfigFile); + npRConfig:new(GlobalConfigFile); false -> - rebarConfig:new() + npRConfig:new() end, %% Set the rebar config to use @@ -129,24 +129,24 @@ initConfig({Options, _NonOptArgs}) -> undefined -> GlobalConfig; Conf -> - rebarConfig:setGlobal(GlobalConfig, config, Conf) + npRConfig:setGlobal(GlobalConfig, config, Conf) end, - BaseConfig = rebarConfig:baseConfig(GlobalConfig1), + BaseConfig = npRConfig:baseConfig(GlobalConfig1), %% Keep track of how many operations we do, so we can detect bad commands - BaseConfig1 = rebarConfig:setXconf(BaseConfig, operations, 0), + BaseConfig1 = npRConfig:setXconf(BaseConfig, operations, 0), %% Initialize vsn cache - rebarUtils:initVsnCache(BaseConfig1). + npRUtils:initVsnCache(BaseConfig1). initConfig_1(BaseConfig) -> %% Determine the location of the rebar executable; important for pulling %% resources out of the escript ScriptName = filename:absname(escript:script_name()), - BaseConfig1 = rebarConfig:setXconf(BaseConfig, escript, ScriptName), + BaseConfig1 = npRConfig:setXconf(BaseConfig, escript, ScriptName), %% Note the top-level directory for reference - AbsCwd = filename:absname(rebarUtils:getCwd()), - rebarConfig:setXconf(BaseConfig1, base_dir, AbsCwd). + AbsCwd = filename:absname(npRUtils:getCwd()), + npRConfig:setXconf(BaseConfig1, base_dir, AbsCwd). runAux(BaseConfig, Commands) -> %% Make sure crypto is running @@ -182,22 +182,22 @@ setupEnvs(Config, Modules) -> lists:foldl( fun(Module, CfgAcc) -> Env = Module:setupEnv(CfgAcc), - rebarConfig:saveEnv(CfgAcc, Module, Env) + npRConfig:saveEnv(CfgAcc, Module, Env) end, Config, Modules). processCommand(compile, Config, AppFile) -> - rebarNpCompiler:compile(Config, AppFile); + npRCompiler:compile(Config, AppFile); processCommand(clean, Config, AppFile) -> - rebarNpCompiler:clean(Config, AppFile); + npRCompiler:clean(Config, AppFile); processCommand(Other, _, _) -> ?CONSOLE("Unknown command: ~s~n", [Other]), - rebarUtils:delayedHalt(1). + npRUtils:delayedHalt(1). saveOptions(Config, {Options, NonOptArgs}) -> GlobalDefines = proplists:get_all_values(defines, Options), - Config1 = rebarConfig:setXconf(Config, defines, GlobalDefines), + Config1 = npRConfig:setXconf(Config, defines, GlobalDefines), filterFlags(Config1, NonOptArgs, []). %% show version information and halt @@ -222,7 +222,7 @@ filterFlags(Config, [Item | Rest], Commands) -> _ -> RawValue end, - Config1 = rebarConfig:setGlobal(Config, Key, Value), + Config1 = npRConfig:setGlobal(Config, Key, Value), filterFlags(Config1, Rest, Commands); Other -> ?CONSOLE("Ignoring command line argument: ~p\n", [Other]), diff --git a/src/rebarUtils.erl b/src/npRUtils.erl similarity index 97% rename from src/rebarUtils.erl rename to src/npRUtils.erl index 0e538dd..0095f2e 100644 --- a/src/rebarUtils.erl +++ b/src/npRUtils.erl @@ -1,4 +1,4 @@ --module(rebarUtils). +-module(npRUtils). -include("rebar.hrl"). @@ -49,7 +49,7 @@ get_system_arch(Arch) -> Arch. isAppDir() -> - isAppDir(rebarUtils:getCwd()). + isAppDir(npRUtils:getCwd()). isAppDir(Dir) -> SrcDir = filename:join([Dir, "src"]), @@ -91,11 +91,11 @@ appName(Config, AppFile) -> loadAppFile(Config, Filename) -> AppFile = {app_file, Filename}, - case rebarConfig:getXconf(Config, {appfile, AppFile}, undefined) of + case npRConfig:getXconf(Config, {appfile, AppFile}, undefined) of undefined -> case consultAppFile(Filename) of {ok, {application, AppName, AppData}} -> - Config1 = rebarConfig:setXconf(Config, + Config1 = npRConfig:setXconf(Config, {appfile, AppFile}, {AppName, AppData}), {ok, Config1, AppName, AppData}; @@ -114,7 +114,7 @@ consultAppFile(Filename) -> true -> file:consult(Filename); false -> - rebarConfig:consultFile(Filename) + npRConfig:consultFile(Filename) end, case Result of {ok, [Term]} -> @@ -188,11 +188,11 @@ initVsnCache(Config) -> initVsnCache(Config, os:getenv("REBAR_VSN_CACHE_FILE")). initVsnCache(Config, false) -> - rebarConfig:setXconf(Config, vsn_cache, dict:new()); + npRConfig:setXconf(Config, vsn_cache, dict:new()); initVsnCache(Config, CacheFile) -> {ok, CacheList} = file:consult(CacheFile), CacheDict = dict:from_list(CacheList), - rebarConfig:setXconf(Config, vsn_cache, CacheDict). + npRConfig:setXconf(Config, vsn_cache, CacheDict). -spec delayedHalt(integer()) -> no_return(). delayedHalt(Code) -> @@ -229,10 +229,10 @@ deleteEach([File | Rest]) -> end. baseDir(Config) -> - rebarConfig:getXconf(Config, base_dir). + npRConfig:getXconf(Config, base_dir). processingBaseDir(Config) -> - Cwd = rebarUtils:getCwd(), + Cwd = npRUtils:getCwd(), processingBaseDir(Config, Cwd). processingBaseDir(Config, Dir) ->