mirror of
https://github.com/RubyMetric/chsrc
synced 2025-06-28 23:42:49 +08:00
Add common functions for python, nodejs, perl, php
This commit is contained in:
parent
cb9c4ed4c5
commit
a3a0522ef2
480
chsrc.c
480
chsrc.c
@ -100,141 +100,29 @@ test_speed (char* url)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] place 所有源的url后,所接的部分url
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
common_cesu (source_info* sources, size_t size, char* place)
|
||||||
|
{
|
||||||
|
double speeds[size];
|
||||||
|
for (int i=0;i<size;i++)
|
||||||
|
{
|
||||||
|
source_info src = sources[i];
|
||||||
|
const char* baseurl = src.url;
|
||||||
|
char* testurl = xy_2strjoin(baseurl, place);
|
||||||
|
double speed = test_speed (testurl);
|
||||||
|
speeds[i] = speed;
|
||||||
|
}
|
||||||
|
int fastidx = dblary_maxidx (speeds, size);
|
||||||
|
xy_success (xy_2strjoin("最快镜像站为: ", sources[fastidx].mirror->name));
|
||||||
|
return fastidx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************** 换源 *********************************************/
|
/***************************************** 换源 *********************************************/
|
||||||
|
|
||||||
/**
|
|
||||||
* Perl换源
|
|
||||||
*
|
|
||||||
* 参考:https://help.mirrors.cernet.edu.cn/CPAN/
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
pl_perl_setsrc (char* option)
|
|
||||||
{
|
|
||||||
int selected = 0; char* check_cmd, *prog = NULL;
|
|
||||||
|
|
||||||
if (xy_on_windows) check_cmd = "perl --version >nul 2>nul";
|
|
||||||
else check_cmd = "perl --version 1>/dev/null 2>&1";
|
|
||||||
|
|
||||||
bool exist_b = does_the_program_exist (check_cmd, "perl");
|
|
||||||
|
|
||||||
if (!exist_b) {
|
|
||||||
xy_error ("chsrc: 未找到 perl 相关命令,请检查是否存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0;i<sizeof(pl_perl_sources);i++) {
|
|
||||||
// 循环测速
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* source_name = pl_perl_sources[selected].mirror->name;
|
|
||||||
const char* source_abbr = pl_perl_sources[selected].mirror->abbr;
|
|
||||||
const char* source_url = pl_perl_sources[selected].url;
|
|
||||||
|
|
||||||
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
|
||||||
|
|
||||||
char* cmd = xy_strjoin(3,
|
|
||||||
"perl -MCPAN -e 'CPAN::HandleConfig->edit(\"pushy_https\", 0); CPAN::HandleConfig->edit(\"urllist\", \"unshift\", \"",
|
|
||||||
source_url,
|
|
||||||
"\"); mkmyconfig'");
|
|
||||||
|
|
||||||
system(cmd);
|
|
||||||
free(cmd);
|
|
||||||
|
|
||||||
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NodeJS换源
|
|
||||||
*
|
|
||||||
* 参考:https://npmmirror.com/
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
pl_nodejs_setsrc (char* option)
|
|
||||||
{
|
|
||||||
int selected = 0; char* check_cmd, *prog = NULL;
|
|
||||||
|
|
||||||
if (xy_on_windows) check_cmd = "npm -v >nul 2>nul";
|
|
||||||
else check_cmd = "npm -v 1>/dev/null 2>&1";
|
|
||||||
|
|
||||||
bool exist_b = does_the_program_exist (check_cmd, "npm");
|
|
||||||
|
|
||||||
if (!exist_b) {
|
|
||||||
xy_error ("chsrc: 未找到 npm 相关命令,请检查是否存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0;i<sizeof(pl_nodejs_sources);i++) {
|
|
||||||
// 循环测速
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* source_name = pl_nodejs_sources[selected].mirror->name;
|
|
||||||
const char* source_abbr = pl_nodejs_sources[selected].mirror->abbr;
|
|
||||||
const char* source_url = pl_nodejs_sources[selected].url;
|
|
||||||
|
|
||||||
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
|
||||||
|
|
||||||
char* cmd = xy_2strjoin("npm config set registry ", source_url);
|
|
||||||
system(cmd);
|
|
||||||
free(cmd);
|
|
||||||
|
|
||||||
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Python换源
|
|
||||||
*
|
|
||||||
* 参考:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
|
|
||||||
*
|
|
||||||
* 经测试,Windows上调用换源命令,会写入 C:\Users\RubyMetric\AppData\Roaming\pip\pip.ini
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
pl_python_setsrc (char* option)
|
|
||||||
{
|
|
||||||
int selected = 0; char* check_cmd, *prog = NULL;
|
|
||||||
|
|
||||||
// 不要调用 python 自己,而是使用 python --version,避免Windows弹出Microsoft Store
|
|
||||||
if (xy_on_windows) check_cmd = "python --version >nul 2>nul";
|
|
||||||
else check_cmd = "python --version 1>/dev/null 2>&1";
|
|
||||||
|
|
||||||
bool exist_b = does_the_program_exist (check_cmd, "python");
|
|
||||||
|
|
||||||
if (!exist_b) {
|
|
||||||
if (xy_on_windows) check_cmd = "python3 --version >nul 2>nul";
|
|
||||||
else check_cmd = "python3 --version 1>/dev/null 2>&1";
|
|
||||||
exist_b = does_the_program_exist (check_cmd, "python3");
|
|
||||||
if (exist_b) prog = "python3";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
prog = "python";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!exist_b) {
|
|
||||||
xy_error ("chsrc: 未找到 Python 相关命令,请检查是否存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0;i<sizeof(pl_python_sources);i++) {
|
|
||||||
// 循环测速
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* source_name = pl_python_sources[selected].mirror->name;
|
|
||||||
const char* source_abbr = pl_python_sources[selected].mirror->abbr;
|
|
||||||
const char* source_url = pl_python_sources[selected].url;
|
|
||||||
|
|
||||||
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
|
||||||
|
|
||||||
char* cmd = xy_2strjoin(prog, xy_2strjoin(" -m pip config set global.index-url ", source_url));
|
|
||||||
system(cmd);
|
|
||||||
free(cmd);
|
|
||||||
|
|
||||||
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Ruby源 @maintainer ccmywish */
|
/* Ruby源 @maintainer ccmywish */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -247,24 +135,23 @@ pl_ruby_cesu (char* option)
|
|||||||
{
|
{
|
||||||
size_t size = pl_ruby_sources_n;
|
size_t size = pl_ruby_sources_n;
|
||||||
source_info* sources = pl_ruby_sources;
|
source_info* sources = pl_ruby_sources;
|
||||||
double speeds[size];
|
return common_cesu (sources, size, "gems/nokogiri-1.15.0-java.gem");
|
||||||
for (int i=0;i<size;i++)
|
|
||||||
{
|
|
||||||
source_info src = sources[i];
|
|
||||||
const char* baseurl = src.url;
|
|
||||||
char* testurl = xy_2strjoin(baseurl, "gems/nokogiri-1.15.0-java.gem");
|
|
||||||
double speed = test_speed (testurl);
|
|
||||||
speeds[i] = speed;
|
|
||||||
}
|
|
||||||
int fastidx = dblary_maxidx (speeds, size);
|
|
||||||
xy_success (xy_2strjoin("最快镜像站为: ", sources[fastidx].mirror->name));
|
|
||||||
return fastidx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pl_ruby_getsrc (char* option)
|
||||||
|
{
|
||||||
|
char* cmd = "gem sources";
|
||||||
|
xy_info (xy_2strjoin("chsrc: 运行 ", cmd));
|
||||||
|
system(cmd);
|
||||||
|
cmd = "bundle config get mirror.https://rubygems.org";
|
||||||
|
xy_info (xy_2strjoin("chsrc: 运行 ", cmd));
|
||||||
|
system(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ruby换源
|
* Ruby换源,参考:https://gitee.com/RubyKids/rbenv-cn
|
||||||
*
|
|
||||||
* 参考:https://gitee.com/RubyKids/rbenv-cn
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
pl_ruby_setsrc (char* option)
|
pl_ruby_setsrc (char* option)
|
||||||
@ -310,17 +197,263 @@ pl_ruby_setsrc (char* option)
|
|||||||
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
pl_ruby_getsrc (char* option)
|
|
||||||
|
/**
|
||||||
|
* TODO: 选择 Python 中的大文件
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pl_python_cesu (char* option)
|
||||||
{
|
{
|
||||||
char* cmd = "gem sources";
|
return common_cesu (pl_python_sources, pl_python_sources_n,
|
||||||
xy_info (xy_2strjoin("chsrc: 运行 ", cmd));
|
"gems/nokogiri-1.15.0-java.gem");
|
||||||
system(cmd);
|
}
|
||||||
cmd = "bundle config get mirror.https://rubygems.org";
|
|
||||||
xy_info (xy_2strjoin("chsrc: 运行 ", cmd));
|
/**
|
||||||
|
* @param[out] prog 返回 Python 的可用名,如果不可用,则返回 NULL
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
_pl_python_check_cmd (char** prog)
|
||||||
|
{
|
||||||
|
char* check_cmd = NULL; *prog = NULL;
|
||||||
|
|
||||||
|
// 不要调用 python 自己,而是使用 python --version,避免Windows弹出Microsoft Store
|
||||||
|
if (xy_on_windows) check_cmd = "python --version >nul 2>nul";
|
||||||
|
else check_cmd = "python --version 1>/dev/null 2>&1";
|
||||||
|
|
||||||
|
bool exist_b = does_the_program_exist (check_cmd, "python");
|
||||||
|
|
||||||
|
if (!exist_b) {
|
||||||
|
if (xy_on_windows) check_cmd = "python3 --version >nul 2>nul";
|
||||||
|
else check_cmd = "python3 --version 1>/dev/null 2>&1";
|
||||||
|
exist_b = does_the_program_exist (check_cmd, "python3");
|
||||||
|
if (exist_b) *prog = "python3";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*prog = "python";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exist_b) {
|
||||||
|
xy_error ("chsrc: 未找到 Python 相关命令,请检查是否存在");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pl_python_getsrc (char* option)
|
||||||
|
{
|
||||||
|
char* prog = NULL;
|
||||||
|
_pl_python_check_cmd (&prog);
|
||||||
|
char* cmd = xy_2strjoin(prog, " -m pip config get global.index-url");
|
||||||
system(cmd);
|
system(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Python换源,参考:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
|
||||||
|
*
|
||||||
|
* 经测试,Windows上调用换源命令,会写入 C:\Users\RubyMetric\AppData\Roaming\pip\pip.ini
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
pl_python_setsrc (char* option)
|
||||||
|
{
|
||||||
|
int selected = 0;
|
||||||
|
char* prog = NULL;
|
||||||
|
_pl_python_check_cmd (&prog);
|
||||||
|
|
||||||
|
selected = pl_python_cesu ("");
|
||||||
|
|
||||||
|
const char* source_name = pl_python_sources[selected].mirror->name;
|
||||||
|
const char* source_abbr = pl_python_sources[selected].mirror->abbr;
|
||||||
|
const char* source_url = pl_python_sources[selected].url;
|
||||||
|
|
||||||
|
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
||||||
|
|
||||||
|
char* cmd = xy_2strjoin(prog, xy_2strjoin(" -m pip config set global.index-url ", source_url));
|
||||||
|
system(cmd);
|
||||||
|
free(cmd);
|
||||||
|
|
||||||
|
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: 寻找合适的文件
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pl_nodejs_cesu (char* option)
|
||||||
|
{
|
||||||
|
return common_cesu (pl_nodejs_sources, pl_nodejs_sources_n,
|
||||||
|
"gems/nokogiri-1.15.0-java.gem");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_pl_nodejs_check_cmd ()
|
||||||
|
{
|
||||||
|
char* check_cmd = NULL;
|
||||||
|
if (xy_on_windows) check_cmd = "npm -v >nul 2>nul";
|
||||||
|
else check_cmd = "npm -v 1>/dev/null 2>&1";
|
||||||
|
|
||||||
|
bool exist_b = does_the_program_exist (check_cmd, "npm");
|
||||||
|
if (!exist_b) {
|
||||||
|
xy_error ("chsrc: 未找到 npm 命令,请检查是否存在");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pl_nodejs_getsrc (char* option)
|
||||||
|
{
|
||||||
|
_pl_nodejs_check_cmd ();
|
||||||
|
char* cmd = "npm config get registry";
|
||||||
|
system(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NodeJS换源,参考:https://npmmirror.com/
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
pl_nodejs_setsrc (char* option)
|
||||||
|
{
|
||||||
|
_pl_nodejs_check_cmd();
|
||||||
|
|
||||||
|
int selected = pl_nodejs_cesu ("");
|
||||||
|
|
||||||
|
const char* source_name = pl_nodejs_sources[selected].mirror->name;
|
||||||
|
const char* source_abbr = pl_nodejs_sources[selected].mirror->abbr;
|
||||||
|
const char* source_url = pl_nodejs_sources[selected].url;
|
||||||
|
|
||||||
|
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
||||||
|
|
||||||
|
char* cmd = xy_2strjoin("npm config set registry ", source_url);
|
||||||
|
system(cmd);
|
||||||
|
free(cmd);
|
||||||
|
|
||||||
|
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: 寻找合适的文件
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pl_perl_cesu (char* option)
|
||||||
|
{
|
||||||
|
return common_cesu (pl_perl_sources, pl_perl_sources_n,
|
||||||
|
"gems/nokogiri-1.15.0-java.gem");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_pl_perl_check_cmd ()
|
||||||
|
{
|
||||||
|
char* check_cmd = NULL;
|
||||||
|
if (xy_on_windows) check_cmd = "perl --version >nul 2>nul";
|
||||||
|
else check_cmd = "perl --version 1>/dev/null 2>&1";
|
||||||
|
|
||||||
|
bool exist_b = does_the_program_exist (check_cmd, "perl");
|
||||||
|
|
||||||
|
if (!exist_b) {
|
||||||
|
xy_error ("chsrc: 未找到 perl 命令,请检查是否存在");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: 暂未实现 */
|
||||||
|
void
|
||||||
|
pl_perl_getsrc (char* option)
|
||||||
|
{
|
||||||
|
_pl_perl_check_cmd ();
|
||||||
|
|
||||||
|
// char* cmd = "npm config get registry";
|
||||||
|
// system(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perl换源,参考:https://help.mirrors.cernet.edu.cn/CPAN/
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
pl_perl_setsrc (char* option)
|
||||||
|
{
|
||||||
|
int selected = 0; char* check_cmd, *prog = NULL;
|
||||||
|
|
||||||
|
selected = pl_perl_cesu ("");
|
||||||
|
|
||||||
|
const char* source_name = pl_perl_sources[selected].mirror->name;
|
||||||
|
const char* source_abbr = pl_perl_sources[selected].mirror->abbr;
|
||||||
|
const char* source_url = pl_perl_sources[selected].url;
|
||||||
|
|
||||||
|
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
||||||
|
|
||||||
|
char* cmd = xy_strjoin(3,
|
||||||
|
"perl -MCPAN -e 'CPAN::HandleConfig->edit(\"pushy_https\", 0); CPAN::HandleConfig->edit(\"urllist\", \"unshift\", \"",
|
||||||
|
source_url,
|
||||||
|
"\"); mkmyconfig'");
|
||||||
|
|
||||||
|
system(cmd);
|
||||||
|
free(cmd);
|
||||||
|
|
||||||
|
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: 寻找合适的文件
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pl_php_cesu (char* option)
|
||||||
|
{
|
||||||
|
return common_cesu (pl_php_sources, pl_php_sources_n,
|
||||||
|
"gems/nokogiri-1.15.0-java.gem");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_pl_php_check_cmd()
|
||||||
|
{
|
||||||
|
char* check_cmd = NULL;
|
||||||
|
if (xy_on_windows) check_cmd = "composer --version >nul 2>nul";
|
||||||
|
else check_cmd = "composer --version 1>/dev/null 2>&1";
|
||||||
|
|
||||||
|
bool exist_b = does_the_program_exist (check_cmd, "composer");
|
||||||
|
|
||||||
|
if (!exist_b) {
|
||||||
|
xy_error ("chsrc: 未找到 composer 命令,请检查是否存在");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: 待PHP用户确认 */
|
||||||
|
void
|
||||||
|
pl_php_getsrc (char* option)
|
||||||
|
{
|
||||||
|
_pl_php_check_cmd ();
|
||||||
|
char* cmd = "composer config repo.packagist composer";
|
||||||
|
system(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP 换源,参考:https://developer.aliyun.com/composer
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
pl_php_setsrc (char* option)
|
||||||
|
{
|
||||||
|
_pl_php_check_cmd();
|
||||||
|
|
||||||
|
int selected = pl_php_cesu ("");
|
||||||
|
|
||||||
|
const char* source_name = pl_php_sources[selected].mirror->name;
|
||||||
|
const char* source_abbr = pl_php_sources[selected].mirror->abbr;
|
||||||
|
const char* source_url = pl_php_sources[selected].url;
|
||||||
|
|
||||||
|
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
||||||
|
|
||||||
|
char* cmd = xy_2strjoin("composer config repo.packagist composer ", source_url);
|
||||||
|
system(cmd);
|
||||||
|
|
||||||
|
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -419,43 +552,6 @@ pl_dotnet_setsrc (char* option)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHP 换源
|
|
||||||
*
|
|
||||||
* 参考:https://developer.aliyun.com/composer
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
pl_php_setsrc (char* option)
|
|
||||||
{
|
|
||||||
int selected = 0; char* check_cmd = NULL;
|
|
||||||
|
|
||||||
if (xy_on_windows) check_cmd = "composer --version >nul 2>nul";
|
|
||||||
else check_cmd = "composer --version 1>/dev/null 2>&1";
|
|
||||||
|
|
||||||
bool exist_b = does_the_program_exist (check_cmd, "composer");
|
|
||||||
|
|
||||||
if (!exist_b) {
|
|
||||||
xy_error ("chsrc: 未找到 composer 相关命令,请检查是否存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0;i<sizeof(pl_php_sources);i++) {
|
|
||||||
// 循环测速
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* source_name = pl_php_sources[selected].mirror->name;
|
|
||||||
const char* source_abbr = pl_php_sources[selected].mirror->abbr;
|
|
||||||
const char* source_url = pl_php_sources[selected].url;
|
|
||||||
|
|
||||||
xy_info (xy_2strjoin("chsrc: 选中镜像站:", source_abbr));
|
|
||||||
|
|
||||||
char* cmd = xy_2strjoin("composer config repo.packagist composer ", source_url);
|
|
||||||
system(cmd);
|
|
||||||
|
|
||||||
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方:", source_name));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Java 换源
|
* Java 换源
|
||||||
|
10
chsrc.h
10
chsrc.h
@ -356,18 +356,14 @@ dblary_maxidx(double* array, int size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* 函数签名 */
|
|
||||||
bool does_the_program_exist (char* check_cmd, char* progname);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define def_target_sources_n(t) const size_t t##_sources_n = xy_arylen(pl_ruby_sources)
|
#define def_target_sources_n(t) const size_t t##_sources_n = xy_arylen(pl_ruby_sources)
|
||||||
def_target_sources_n(pl_ruby); def_target_sources_n(pl_python); def_target_sources_n(pl_nodejs);
|
def_target_sources_n(pl_ruby); def_target_sources_n(pl_python); def_target_sources_n(pl_nodejs);
|
||||||
def_target_sources_n(pl_perl); def_target_sources_n(pl_php); def_target_sources_n(pl_go);
|
def_target_sources_n(pl_perl); def_target_sources_n(pl_php); def_target_sources_n(pl_go);
|
||||||
def_target_sources_n(pl_rust); def_target_sources_n(pl_java); def_target_sources_n(pl_r);
|
def_target_sources_n(pl_rust); def_target_sources_n(pl_java); def_target_sources_n(pl_r);
|
||||||
def_target_sources_n(pl_julia);
|
def_target_sources_n(pl_julia);
|
||||||
def_target_sources_n(os_ubuntu); def_target_sources_n(os_debian); def_target_sources_n(os_fedora);
|
|
||||||
def_target_sources_n(os_kali); def_target_sources_n(os_openbsd); def_target_sources_n(os_mysys2);
|
def_target_sources_n(os_ubuntu); def_target_sources_n(os_debian); def_target_sources_n(os_fedora);
|
||||||
|
def_target_sources_n(os_kali); def_target_sources_n(os_openbsd); def_target_sources_n(os_mysys2);
|
||||||
|
|
||||||
/* Target Info */
|
/* Target Info */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user