[newbies] brlcad uninstallable TCL dependencies and packaged /usr/bin/tclsh which shouldn't be there

Константин Яблочкин yakonstb на yandex.ru
Ср Ноя 23 16:35:42 MSK 2016


Сейчас не ставятся зависимости. Указал:
PreReq: tcl, tcl-dnotebook, tcl-dom, tcl-dp, tcl-gpg, tcl-img, tcl-incrtcl, tcl-iwidgets, tcl-ldap, tcl-memchan, tcl-readline, tcl-snack, tcl-soap, tcl-syslog, tcl-tdom, tcl-thread, tcl-tile, tcl-tix, tcl-tktable, tcl-tktray, tcl-tkXwin, tcl-tls, tcl-togl, tcl-trf, tcl-udp, tcl-vfs, tcl-xml, tcl-xmpp, tcl-xslt, tcl-zlib, tcllib, tk

Пишет:
<quote>
[root at host-221 ~]# apt-get install brlcad
Reading Package Lists... Done
Building Dependency Tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.

Since you only requested a single operation it is extremely likely that
the package is simply not installable and a bug report against
that package should be filed.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
  brlcad: PreDepends: tcl-dom but it is not installable
          PreDepends: tcl-xml but it is not installable
          Depends: tcl(ArcherCore) but it is not installable
          Depends: tcl(DbPage) but it is not installable
          Depends: tcl(ExamplePage) but it is not installable
          Depends: tcl(FbPage) but it is not installable
          Depends: tcl(FeedbackDialog) but it is not installable
          Depends: tcl(FullColorPage) but it is not installable
          Depends: tcl(GeometryBrowser) but it is not installable
          Depends: tcl(GhostPage) but it is not installable
          Depends: tcl(GraphEditor) but it is not installable
          Depends: tcl(HelpPage) but it is not installable
          Depends: tcl(HighlightedPage) but it is not installable
          Depends: tcl(LinePage) but it is not installable
          Depends: tcl(ManBrowser) but it is not installable
          Depends: tcl(PictureTypeA) but it is not installable
          Depends: tcl(PictureTypeB) but it is not installable
          Depends: tcl(PictureTypeC) but it is not installable
          Depends: tcl(PictureTypeD) but it is not installable
          Depends: tcl(PictureTypeE) but it is not installable
          Depends: tcl(PictureTypeF) but it is not installable
          Depends: tcl(Tkhtml) but it is not installable
          Depends: tcl(Wizard) but it is not installable
          Depends: tcl(hv3) but it is not installable
          Depends: tcl(ttk::theme::default) but it is not installable
E: Broken packages
[root at host-221 ~]# 
</quote>

Если сделать rpm -iv --nodeps, пишет, что с пакетом идут файлы и конфликтуют:
[root at host-221 ~]# rpm -iv --nodeps brlcad-7.26.0-alt2.3.x86_64.rpm 
Preparing packages for installation...
file /usr/bin/tclsh from install of brlcad-7.26.0-alt2.3 conflicts with file from package tcl-8.5.9-alt2
file /usr/bin/wish from install of brlcad-7.26.0-alt2.3 conflicts with file from package tk-8.5.9-alt3
[root at host-221 ~]# 

Хотя, я делал в спеке удаление %buildroot/usr/bin после установки пакета.

И пока не удаётся сделать, чтобы cmake видел qt5 и libbullet. Далее спек
=====СПЕК======
Name: brlcad
Version: 7.26.0
# patch 2 altrelease 3
Release: alt2.3

Summary: BRL-CAD is a powerful open source cross-platform solid modeling system that includes interactive geometry editing, high-performance ray-tracing for rendering and geometric analysis, a system performance analysis benchmark suite, geometry libraries for application developers, and more than 30 years of active development.

License: LGPL
Group: Engineering
Url: https://brlcad.org/

Packager: Konstantin Yablochkin <yakonstb at altlinux.org>
PreReq: tcl, tcl-dnotebook, tcl-dom, tcl-dp, tcl-gpg, tcl-img, tcl-incrtcl, tcl-iwidgets, tcl-ldap, tcl-memchan, tcl-readline, tcl-snack, tcl-soap, tcl-syslog, tcl-tdom, tcl-thread, tcl-tile, tcl-tix, tcl-tktable, tcl-tktray, tcl-tkXwin, tcl-tls, tcl-togl, tcl-trf, tcl-udp, tcl-vfs, tcl-xml, tcl-xmpp, tcl-xslt, tcl-zlib, tcllib, tk
BuildPreReq: cmake, rpm-macros-cmake, gcc5-c++, tcl-devel, tk, tklib, tcl-incrtcl-devel, tcl-incrtk-devel, tcl-togl-devel, tcl-trf-devel, tcl-blt-devel, tcl-iwidgets, tcl-img, tcl-dom-devel, libGL-devel, libX11-devel, libuuid-devel, libsocket-devel, libGLES-devel, libGLU-devel, libGLUT-devel, libGLee-devel, libGLw-devel, libQGLViewer-qt5-devel, qt5-gstreamer1-devel, libqtermwidget-qt5-devel, qt5-3d-devel, qt5-base-devel, qt5-connectivity-devel, qt5-declarative-devel, qt5-location-devel, qt5-multimedia-devel, qt5-phonon-devel, qt5-quick1-devel, qt5-quickcontrols2-devel, qt5-script-devel, qt5-sensors-devel, qt5-serialbus-devel, qt5-serialport-devel, qt5-speech-devel, qt5-svg-devel, qt5-tools-devel, qt5-wayland-devel, qt5-webchannel-devel, qt5-webengine-devel, qt5-webkit-devel, qt5-websockets-devel, qt5-x11extras-devel, qt5-xmlpatterns-devel, zlib-devel, bzlib-devel, lzlib-devel, libpng-devel, libpnglite-devel, libpng++-devel, libpcre-devel, libpcre2-devel, libpcrecpp-devel, libexpat-devel, libbullet3-devel
#BuildPreReq: cmake, rpm-macros-cmake, gcc5-c++, tcl-devel, tk, tklib, tcl-incrtcl-devel, tcl-incrtk-devel, tcl-togl-devel, tcl-trf-devel, tcl-blt-devel, tcl-iwidgets, tcl-img, tcl-dom-devel, libbullet-devel, libGL-devel, libX11-devel, libqt4-devel, libuuid-devel, libsocket-devel, libGLES-devel, libGLU-devel, libGLUT-devel, libGLee-devel, libGLw-devel
Source: brlcad-7.26.0.tar
Patch0: %name-rel-7-26-0-2.patch

%description
BRL-CAD is a powerful cross-platform Open Source combinatorial
Constructive Solid Geometry (CSG) solid modeling system that
includes interactive 3D solid geometry editing, high-performance
ray-tracing support for rendering and geometric analysis,
network-distributed framebuffer support, image and signal-processing
tools, path-tracing and photon mapping support for realistic image
synthesis, a system performance analysis benchmark suite, an
embedded scripting interface, and libraries for robust
high-performance geometric representation and analysis.

%prep
%setup
%patch0 -p0

%build

# tcl scripts start with #!/bin/sh. Replacing with #!/usr/bin/tclsh
export excl_mark='!'
mkdir tcl-origin
for i in `find -iname "*.tcl"` src/tclscripts/rtwizard/rtwizard ; do
  if test "x${i}" = "x*" ; then
    break
  fi
  j=`basename "${i}"`
  cp $i tcl-origin/
  sed -e "s/^#${excl_mark}\/bin\/sh$/#${excl_mark}\/usr\/bin\/tclsh/g" tcl-origin/${j} > ${i}
done


# manually written configure script. Also can enable things one by one. Or manually call cmake.
# can't go to /usr, it uses it's own libraries which would go into /usr/lib and potentially cause conflict (read next)
./configure --prefix=/usr/libexec/brlcad --enable-all
########cmake . -DBRLCAD_BUNDLED_LIBS=ON -DBRLCAD_ROOT_OVERRIDE=1
#########(ok, we are doing this with /usr, giving cmake override flag ()
# if --prefix=/usr, cmake will tell this:
#
#  }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
#
#  It is STRONGLY recommended that you DO NOT install BRL-CAD into /usr as
#  BRL-CAD provides several libraries that may conflict with other libraries
#  (e.g.  librt, libbu, libbn) on certain system configurations.
#
#  Since our libraries predate all those that we're known to conflict with and
#  are at the very core of our geometry services and project heritage, we have
#  no plans to change the names of our libraries at this time.
#
#  INSTALLING INTO /usr CAN MAKE A SYSTEM COMPLETELY UNUSABLE.  If you choose
#  to continue installing into /usr, you do so entirely at your own risk.  You
#  have been warned.
#
#  }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
#Call Stack (most recent call first):
#  CMakeLists.txt:204 (message)
#
#
#Pausing 15 seconds...
#CMake Error at CMakeLists.txt:154 (_message):
#  If you wish to proceed using /usr as your prefix, define
#  BRLCAD_ROOT_OVERRIDE=1 for CMake
%make_build

%install
%makeinstall_std

# it will install /usr/bin/wish, /usr/bin/tcltk, which it shouldn't. Remove
rm %buildroot/usr/bin -rfv

# create wrappers for binaries. Wrappers go into /usr/bin
mkdir -p %buildroot/usr/bin
pushd %buildroot/usr/libexec/brlcad/bin
for i in * ; do
  if test "x${i}" = "x*" ; then
    break
  fi
  case "${i}" in
    # copy .py files
    *.py) cp "${i}" %buildroot/usr/bin/
      ;;
    # and create wrappers for others
    *)
      excl_mark='!'
      echo -en "#${excl_mark}/bin/bash\n/usr/libexec/brlcad/bin/${i} \"\$@\"\n" > %buildroot/usr/bin/${i}
      chmod +x %buildroot/usr/bin/${i}
      ;;
  esac
done
popd
####### we are installing into /usr, so no wrappers are needed. the trick is to move libs into libs/brlcad. And point executables there, which is already done by patch1 which modifies cmake files
#####pushd %buildroot/usr
#####mkdir -p brlcadkj
#####mv lib brlcad/
#####mkdir libexec
#####mv brlcad libexec/
#####popd

# change "#!/bin/sh" to "#!/usr/bin/wish" in listed files
mkdir wish-origin
for i in %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/browse %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/hello %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/ixset %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/rmt %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/rolodex %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/square %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/tcolor %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/timer %buildroot/usr/libexec/brlcad/lib/tk8.5/demos/widget ; do
  j=`basename "${i}"`
  cp ${i} wish-origin/
  excl_mark='!'
  sed -e "s/^#${excl_mark}\/bin\/sh$/#${excl_mark}\/usr\/bin\/wish/g" wish-origin/${j} > ${i}
done


# binaries won't pass test with default mode. They have /usr/libexec/brlcad/lib in RPATH
RPM_VERIFY_ELF_METHOD="relaxed"



%find_lang %name


%files -f %name.lang
%doc AUTHORS ChangeLog NEWS BUGS CHANGES COPYING HACKING INSTALL README TODO
/usr/libexec/brlcad
/usr/bin/*

%changelog
* Sun Nov 20 2016 Konstantin Yabochkin <yakonstb at altlinux.org> 7.26.0-alt2.3
- initial build


=====КОНЕЦ=====

Чтобы воспроизвести, надо скачать tar и patch из upstream, переименоват патч (приписать к нему "brlcad-" в начало), сделать такой .gear-rules:
tar: brlcad
copy: *.patch

папку из upstream-tarball переименовать в brlcad (убрать версию из имени) и положить рядом с .gear, куда и patch и спек. (имя спека brlcad.spec)

https://yadi точка sk слэш d слэш YfACle_0zJb3M    <---- тут соотв. SRPM


Подробная информация о списке рассылки devel-newbies