fileutils-4.0.33 - cp: ... are the same file (jeszcze raz)

Jakub Bogusz qboosh w prioris.mini.pw.edu.pl
Pon, 25 Gru 2000, 21:38:25 CET


Ten cp ma ciekawy "feature": jeżeli zostanie wywołany z parametrem -r
lub -R, natomiast bez -L, plik źródłowy jest symlinkiem (nieważne do
czego), plik docelowy istnieje i nie jest symlinkiem - zgłasza błąd
typu:

cp: `libcrypto.so' and `/tmp/openssl-0.9.6-root-comp/usr/lib/libcrypto.so' are the same file

Opcja -f nie ma tu znaczenia. To, czy zawartość pliku źródłowego (tzn.
pliku wskazywanego przez symlink) oraz pliku docelowego się różni -
także nie ma znaczenia.
"Feature" ten wynika to z nieobsłużenia takiej sytuacji w funkcji
same_file_ok() (plik copy.c w źródłach fileutils).


Przez to nie budują się pakiety openssl i postgresql.
W tym pierwszym przypadku:

+ install libRSAglue.a libcrypto.a libssl.a /tmp/openssl-0.9.6-root-comp/usr/lib
+ install libcrypto.so.0.9.6 libssl.so.0.9.6 /tmp/openssl-0.9.6-root-comp/usr/lib
+ cp -df libcrypto.so libssl.so /tmp/openssl-0.9.6-root-comp/usr/lib
cp: `libcrypto.so' and `/tmp/openssl-0.9.6-root-comp/usr/lib/libcrypto.so' are the same file
cp: `libssl.so' and `/tmp/openssl-0.9.6-root-comp/usr/lib/libssl.so' are the same file
Bad exit status from /var/tmp/rpm-tmp.63121 (%install)

W tym drugim:

+ cd src/include
+ cp -rf * $RPM_BUILD_ROOT%{_includedir}/pgsql
cp: `os.h' and `/tmp/postgresql-7.0.3-root-comp/usr/include/pgsql/os.h' are the same file


Workaround to:
* w przypadku openssl - dopisanie linii przed feralnym cp:

+rm -f   $RPM_BUILD_ROOT%{_libdir}/{libcrypto.so,libssl.so}
 cp -df  lib*.so         $RPM_BUILD_ROOT%{_libdir}


* w przypadku postgresql - dodanie -L do opcji cp (w tym przypadku
  nawet uprości to speca - parę następnych linii można wyciąć):

 ( cd src/include
-  cp -rf * $RPM_BUILD_ROOT%{_includedir}/pgsql
+  cp -Lrf * $RPM_BUILD_ROOT%{_includedir}/pgsql
 )
 
-# replace symlinks to header fiels by files
-rm -f $RPM_BUILD_ROOT%{_includedir}/pgsql/dynloader.h
-rm -f $RPM_BUILD_ROOT%{_includedir}/pgsql/os.h
-
-install src/backend/port/dynloader/linux.h $RPM_BUILD_ROOT%{_includedir}/pgsql/dynloader.h
-install src/include/port/linux.h $RPM_BUILD_ROOT%{_includedir}/pgsql/os.h


W drugim przypadku workaround ma sens; w pierwszym nie powinien być
konieczny - uważam to za błąd w fileutils...


-- 
Jakub Bogusz
http://prioris.mini.pw.edu.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl