Создание rsync из исходного кода git

Чтобы найти предыдущий месяц, выполните следующие действия:

date -d "-1 months" +%Y/%-m/%-d

Это даст вам :2018/2/22, пока есть 2018/3/22.

date -d "-1 days" +%Y/%-m/%-d

Дам вам:2018/3/21

Вы можете добавить или вычесть сколько угодно месяцев или дней. Если вычесть достаточное количество месяцев, получится прошлый год.

0
20.12.2020, 08:11
1 ответ

Файлconfigure.inrsync1.7.0 (древняя версияrsync)была написана 23 -25 лет назад для какой-то более старой версии autoconf, которую я не могу точно определить. Если вы попытаетесь использовать более свежие версии автоинструментов GNU, у вас возникнут проблемы с правильным созданием configureи config.h.

Чтобы правильно собрать скрипт configureи заголовок config.hс помощью более современных автоинструментов GNU, вам потребуется вручную исправить файл configure.in. К счастью, это довольно просто, и ниже я приведу краткий пример, показывающий, что именно нужно сделать :

.
diff --git a/configure.in b/configure.in
index 2d48d001..3905ec5f 100644
--- a/configure.in
+++ b/configure.in
@@ -8,7 +8,7 @@ AC_PROG_INSTALL
 AC_SUBST(SHELL)

 AC_CHECK_PROG(HAVE_REMSH, remsh, 1, 0)
-AC_DEFINE_UNQUOTED(HAVE_REMSH, $HAVE_REMSH)
+AC_DEFINE_UNQUOTED(HAVE_REMSH, $HAVE_REMSH,[dummy])

 AC_HEADER_DIRENT
 AC_HEADER_TIME
@@ -34,7 +34,7 @@ AC_CHECK_TYPE(ino_t,unsigned)

 echo $ac_n "checking for errno in errno.h... $ac_c"
 AC_TRY_COMPILE([#include <errno.h>],[int i = errno],
-echo yes; AC_DEFINE(HAVE_ERRNO_DECL),
+echo yes; AC_DEFINE(HAVE_ERRNO_DECL,[1],[dummy]),
 echo no)

 AC_FUNC_MEMCMP
@@ -49,20 +49,20 @@ AC_CHECK_FUNCS(memmove getopt_long lchown setlinebuf)
 echo $ac_n "checking for working fnmatch... $ac_c"
 AC_TRY_RUN([#include <fnmatch.h>
 main() { exit(fnmatch("*.o", "x.o", 0) == 0? 0: 1); }],
-echo yes;AC_DEFINE(HAVE_FNMATCH),
+echo yes;AC_DEFINE(HAVE_FNMATCH,[1],[dummy]),
 echo no)

 echo $ac_n "checking for long long... $ac_c"
 AC_TRY_RUN([#include <stdio.h>
 main() { long long x = 1000000000000; char b[20]; sprintf(b,"%lld", x); exit(strcmp("1000000000000", b) == 0? 0: 1); }],
-echo yes;AC_DEFINE(HAVE_LONGLONG),
+echo yes;AC_DEFINE(HAVE_LONGLONG,[1],[dummy]),
 echo no)

 echo $ac_n "checking for utimbuf... $ac_c"
 AC_TRY_COMPILE([#include <sys/types.h>
 #include <utime.h>],
 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; return utime("foo.c",&tbuf);],
-echo yes;AC_DEFINE(HAVE_UTIMBUF),
+echo yes;AC_DEFINE(HAVE_UTIMBUF,[1],[dummy]),
 echo no)

 AC_OUTPUT(Makefile lib/dummy)

Короче говоря, файл configure.inиспользует AC_DEFINEи AC_DEFINE_UNQUOTEDс неправильным количеством аргументов. Добавление фиктивных аргументов исправляет этот файл, и autoconf2.69 (и automake1.16 )смогут создать правильный сценарий configureи файл заголовка config.hпри запуске autoreconf(, как вы показали. в вопросе ). Очевидно, это было исправлено в 2001 году .

Заголовок proto.hгенерируется запуском make proto.

Затем код компилируется в моей системе OpenBSD 6.8 с помощью компилятора Clang 10.0.1.

$./rsync --version
rsync version 1.7.0  protocol version 17

Обратите внимание, что использовать эту древнюю версию rsyncне рекомендуется, так как она, вероятно, содержит множество ошибок и проблем с безопасностью, исправленных в более поздних версиях.

2
18.03.2021, 22:41

Теги

Похожие вопросы