[Cin] Is one pre-built dynamic and static binary for user selection possible?
Terje J. Hanssen
terjejhanssen at gmail.com
Fri Sep 20 17:34:16 CEST 2024
Den 20.09.2024 16:33, skrev Andrew Randrianasulu:
>
>
> пт, 20 сент. 2024 г., 16:43 Terje J. Hanssen <terjejhanssen at gmail.com>:
>
>
>
> Den 20.09.2024 01:19, skrev Andrew Randrianasulu:
>>
>>
>> On Fri, Sep 20, 2024 at 1:35 AM Terje J. Hanssen
>> <terjejhanssen at gmail.com> wrote:
>>
>>
>>
>> Den 19.09.2024 19:19, skrev Andrew Randrianasulu:
>>>
>>>
>>> On Thu, Sep 19, 2024 at 7:52 PM Terje J. Hanssen via Cin
>>> <cin at lists.cinelerra-gg.org> wrote:
>>>
>>> If my understanding is correct, the standard pre-built
>>> CinGG packages are static binaries with all required
>>> thirdparty, ffmpeg and libs included(?)
>>>
>>> Would it be possible to combine static and dynamic in
>>> one pre-built so that users via setting could select
>>> what they want, ffmpeg and libs included or from the system?
>>> Or is two different pre-builts required?
>>>
>>>
>>> well, in general you can't link both statically (piece of
>>> library embedded into binary) and shared (piece of code
>>> loaded on demand or at launch). There might be some sort of
>>> thunks/shims/wrappers dynamically dispatching calls to
>>> external library if present (like firefox vs ffmpeg) but I
>>> am not programmist enough for making this happen even for
>>> most obvious vaapi libs.
>>>
>>> sorry.
>>
>> I had "a little hope" something could be done via a
>> configuration/startup file :)
>>
>> In addition to the last sections below (from 1.3.3 in the
>> manual):
>> "just include "–without-thirdparty" to your configure script,
>> "and auto means probe and use the system version"
>>
>>
>> the manual 1.3.8 Unbundled Builds
>> "There are some generic build scripts included in the
>> CINELERRA-GG GIT repository
>> for users who want to do unbundled builds with ffmpeg already
>> available on their
>> system. This has been tested on Arch, Ubuntu 18, FreeBSD,
>> Windows10 and Leap
>> 15 (rpm) at the time this was documented. The names of the
>> build scripts are:
>> arch.bld, bsd.bld, deb.bld, rpm.bld, and cygwin.bld. These
>> scripts are in
>> the blds subdirectory."
>>
>> Is there available a built-guide or possible to list the
>> detailed procedure steps doing this? ;)
>>
>>
>> well, step no. 1 - download source repo via git clone.
>> git clone git://git.cinelerra-gg.org/goodguy/cinelerra.git
>> <http://git.cinelerra-gg.org/goodguy/cinelerra.git> should do it
>> Step 2 - cd to directory where ./autogen.sh located.
>> 2a - set additional environment variables if you need so via
>> export command
>> 3) run ./autogen.sh
>> 4) run ./configure with all switches you need. (for first try
>> probably --with-single-user so build will be user-local, no need
>> for installing into system)
>> my current build uses "./configure --with-single-user
>> --with-git-ffmpeg=https://git.ffmpeg.org/ffmpeg.git" but
>> ffmpeg.git can be broken at any time by ffmpeg development process :(
>> 5) run make
>> 6) if doing single user build also run make install
>> 7) run it from same directory as bin/cin (you can "ls bin" just
>> to see if all files were build/installed)
>>
>> report errors here :)
>>
>
> Thanks, here we go:
>
> 1)
> # cd /home
>
> # git clone git://git.cinelerra-gg.org/goodguy/cinelerra.git
> <http://git.cinelerra-gg.org/goodguy/cinelerra.git>
> Cloning into 'cinelerra'...
> remote: Enumerating objects: 22646, done.
> remote: Counting objects: 100% (22646/22646), done.
> remote: Compressing objects: 100% (14288/14288), done.
> remote: Total 22646 (delta 11647), reused 17384 (delta 7999),
> pack-reused 0
> Receiving objects: 100% (22646/22646), 405.36 MiB | 16.00 MiB/s, done.
> Resolving deltas: 100% (11647/11647), done.
>
> 2)
> # cd /home/cinelerra/cinelerra-5.1/tools/makeappimagetool
>
> 2a) ?
>
> 3)
> # ./autogen.sh
> configure.ac:19 <http://configure.ac:19>: installing 'cfg/compile'
> configure.ac:89 <http://configure.ac:89>: installing
> 'cfg/config.guess'
> configure.ac:89 <http://configure.ac:89>: installing 'cfg/config.sub'
> configure.ac:12 <http://configure.ac:12>: installing 'cfg/install-sh'
> configure.ac:12 <http://configure.ac:12>: installing 'cfg/missing'
> Makefile.am: installing 'cfg/depcomp'
>
> 4)
> I didn't understand what to do with 4) "run ./configure with all
> switches you need" ?
>
> So I just started with your
>
> # ./configure --with-single-user
> --with-git-ffmpeg=https://git.ffmpeg.org/ffmpeg.git
> configure: WARNING: unrecognized options: --with-single-user,
> --with-git-ffmpeg
> configure: loading site script /usr/share/site/x86_64-pc-linux-gnu
> checking for a BSD-compatible install... /usr/bin/install -c
> checking whether sleep supports fractional seconds... yes
> checking filesystem timestamp resolution... 0.01
> checking whether build environment is sane... yes
> checking for a race-free mkdir -p... /usr/bin/mkdir -p
> checking for gawk... gawk
> checking whether make sets $(MAKE)... yes
> checking whether make supports nested variables... yes
> checking xargs -n works... yes
> checking for g++... g++
> checking whether the C++ compiler works... yes
> checking for C++ compiler default output file name... a.out
> checking for suffix of executables...
> checking whether we are cross compiling... no
> checking for suffix of object files... o
> checking whether the compiler supports GNU C++... yes
> checking whether g++ accepts -g... yes
> checking for g++ option to enable C++11 features... none needed
> checking whether make supports the include directive... yes (GNU
> style)
> checking dependency style of g++... gcc3
> checking for gcc... gcc
> checking whether the compiler supports GNU C... yes
> checking whether gcc accepts -g... yes
> checking for gcc option to enable C11 features... none needed
> checking whether gcc understands -c and -o together... yes
> checking dependency style of gcc... gcc3
> checking how to run the C preprocessor... gcc -E
> checking for stdio.h... yes
> checking for stdlib.h... yes
> checking for string.h... yes
> checking for inttypes.h... yes
> checking for stdint.h... yes
> checking for strings.h... yes
> checking for sys/stat.h... yes
> checking for sys/types.h... yes
> checking for unistd.h... yes
> checking for boost/filesystem.hpp... yes
> checking for boost/filesystem/path.hpp... yes
> checking for boost/regex.hpp... yes
> checking for libpng16/png.h... yes
> checking for zlib.h... yes
> checking for jpeglib.h... yes
> ./configure: line 5910: -O2: command not found
> checking for X... no
> checking for fcntl.h... yes
> checking for memory.h... yes
> checking for sys/time.h... yes
> checking for unistd.h... (cached) yes
> checking for _Bool... yes
> checking for stdbool.h that conforms to C99 or later... yes
> checking for inline... inline
> checking for int32_t... yes
> checking for int64_t... yes
> checking for size_t... yes
> checking for ssize_t... yes
> checking for uint16_t... yes
> checking for uint32_t... yes
> checking for uint64_t... yes
> checking for uint8_t... yes
> checking for ptrdiff_t... yes
> checking for pid_t... yes
> checking for vfork.h... no
> checking for sys/param.h... yes
> checking for fork... no
> checking for vfork... no
> checking for getpagesize... no
> checking build system type... x86_64-pc-linux-gnu
> checking host system type... x86_64-pc-linux-gnu
> checking for GNU libc compatible malloc... no
> checking for working mmap... no
> checking for dup2... no
> checking for floor... no
> checking for gettimeofday... no
> checking for memmove... no
> checking for memset... no
> checking for munmap... no
> checking for pow... no
> checking for realpath... no
> checking for select... no
> checking for sqrt... no
> checking for strcasecmp... no
> checking for strchr... no
> checking for strdup... no
> checking for strerror... no
> checking for strncasecmp... no
> checking for strrchr... no
> checking for strstr... no
> checking that generated files are newer than configure... done
> configure: creating ./config.status
> config.status: creating Makefile
> config.status: creating config.h
> config.status: config.h is unchanged
> config.status: executing depfiles commands
> configure: WARNING: unrecognized options: --with-single-user,
> --with-git-ffmpeg
>
>
> lack of vfork.h and sqrt.h and few others is concerning!
>
> you probably need to install more development files, my bulk solution
> was to drag gtk2-dev in and see how it drags X libs and other dev
> files into system as dependency
zypper in gtk2-devel
Loading repository data...
Reading installed packages...
Resolving package dependencies...
The following 35 NEW packages are going to be installed:
at-spi2-core-devel cairo-devel dbus-1-devel fontconfig-devel
freetype2-devel fribidi-devel gdk-pixbuf-devel glib2-devel
graphite2-devel gtk2-devel
harfbuzz-devel libXfixes-devel libXft-devel libXi-devel
libXrender-devel libXtst-devel libbrotli-devel libbz2-devel
libdatrie-devel libffi-devel
libgirepository-2_0-0 libharfbuzz-cairo0 libicu-devel libmount-devel
libpcre2-posix3 libpixman-1-0-devel libselinux-devel libsepol-devel
libthai-devel
pango-devel pcre2-devel typelib-1_0-GIRepository-3_0
typelib-1_0-GLibUnix-2_0 typelib-1_0-GdkPixdata-2_0 typelib-1_0-Gtk-2_0
But still lack of vfork.h and sqrt.h and more
>
>
>
> 5)
> # make
> make all-am
> make[1]: Entering directory
> '/home/cinelerra/cinelerra-5.1/tools/makeappimagetool'
> g++ -DHAVE_CONFIG_H -I. -g -O2 -DBOOST_NO_CXX11_SCOPED_ENUMS
> -Dcimg_display=0 -Dcimg_use_jpeg=1 -Dcimg_use_png=1 -MT appdir.o
> -MD -MP -MF .deps/appdir.Tpo -c -o appdir.o appdir.cpp
> appdir.cpp: In static member function ‘static bool
> linuxdeploy::core::appdir::AppDir::PrivateData::copyFile(const
> boost::filesystem::path&, boost::filesystem::path,
> boost::filesystem::perms, bool)’:
> appdir.cpp:164:57: error: ‘bf::copy_option’ has not been declared
> 164 | bf::copy_file(from, to,
> bf::copy_option::overwrite_if_exists);
> | ^~~~~~~~~~~
> make[1]: *** [Makefile:469: appdir.o] Error 1
> make[1]: Leaving directory
> '/home/cinelerra/cinelerra-5.1/tools/makeappimagetool'
> make: *** [Makefile:340: all] Error 2
>
>
> this, from short googling, looks like boost error?
>
> do you have boost 1.85 by any chance?
Yes, I have the following "boost" installed
S | Name | Type | Version | Arch |
Repository
---+------------------------------------+---------+------------+--------+----------------------
i | boost-devel | package | 1.85.0-1.1 | noarch
| openSUSE-Slowroll-Oss
i | boost-jam | package | 1.85.0-1.1 | noarch
| openSUSE-Slowroll-Oss
i | boost-license1_85_0 | package | 1.85.0-2.1 | noarch
| openSUSE-Slowroll-Oss
i | boost1_85_0-jam | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_headers1_85_0-devel | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_iostreams1_85_0 | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_iostreams1_85_0-x86-64-v3 | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_locale1_85_0 | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_locale1_85_0-x86-64-v3 | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_thread1_85_0 | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
i | libboost_thread1_85_0-x86-64-v3 | package | 1.85.0-2.1 | x86_64
| openSUSE-Slowroll-Oss
>
> I found similar looking issue with fixed there
>
> https://github.com/monero-project/monero/issues/9304
>
> but for now I thinkwe better to concentrate on running cingg's main
> configure, as opposed to makeappimagetool configure.
I tried 5) make again, but still got the similar errors ....
To clear up, because I'm a bit confused at the moment:
Are we trying to install Cingg "unbundled, dynamic linked, single-user"
to be able to use the system ffmpeg and libs?
If so, don't we need to edit the configure file then?
>
>
>
>
> 6)
> # make install
> g++ -DHAVE_CONFIG_H -I. -g -O2 -DBOOST_NO_CXX11_SCOPED_ENUMS
> -Dcimg_display=0 -Dcimg_use_jpeg=1 -Dcimg_use_png=1 -MT appdir.o
> -MD -MP -MF .deps/appdir.Tpo -c -o appdir.o appdir.cpp
> appdir.cpp: In static member function ‘static bool
> linuxdeploy::core::appdir::AppDir::PrivateData::copyFile(const
> boost::filesystem::path&, boost::filesystem::path,
> boost::filesystem::perms, bool)’:
> appdir.cpp:164:57: error: ‘bf::copy_option’ has not been declared
> 164 | bf::copy_file(from, to,
> bf::copy_option::overwrite_if_exists);
> | ^~~~~~~~~~~
> make: *** [Makefile:469: appdir.o] Error 1
>
>
>
>
>>
>>
>>>
>>> Experiences with the latter?
>>>
>>> ---------
>>> Refer to extracted sections from the CinGG manual
>>> Chapter 1 - Installation below:
>>>
>>> If you prefer to not have to take the time to build
>>> CINELERRA-GG Infinity yourself,
>>> there are pre-built dynamic or static binaries for
>>> various versions of Ubuntu, Mint,
>>> Suse, Fedora, Debian ........
>>>
>>> The pkgs directory contains the standard packaged
>>> application for various distros.
>>> This will install a dynamic system version for users who
>>> prefer to have the binaries
>>> in the system area
>>> ---------
>>>
>>> Notes about Building from Git in your Customized Environment
>>>
>>> Getting a build to work in a custom environment is not
>>> easy. If you have already installed libraries which are
>>> normally in the thirdparty build, getting them to be
>>> recognized means you have to install the devel version
>>> so the header files which match the library interfaces
>>> exist. If you want to build using only the thirdparty
>>> libraries installed in your system, just include
>>> "–without-thirdparty" to your configure script. For example:
>>>
>>> ./confgure --with-single-user --disable-static-build
>>> --without-thirdparty
>>>
>>> Below is the list of thirdparty builds, but this list
>>> may have changed over time.
>>>
>>> Table 1.1: List of thirdparty builds
>>>
>>> a52dec yes
>>> djbfft yes
>>> ffmpeg yes
>>> fftw auto
>>> flac auto
>>> giflib yes
>>> ilmbase auto
>>> lame auto
>>> libavc1394 auto
>>> libraw1394 auto
>>> libiec61883 auto
>>> libdv auto
>>> ..........
>>>
>>> The yes means force build and auto means probe and use
>>> the system version if the build operation is not static.
>>> To get your customized build to work, you need to change
>>> the probe options for the conflicting libraries from yes
>>> to auto, or even rework the configure.ac
>>> <http://configure.ac> script. There may be several
>>> libraries which need special treatment.
>>>
>>> An example of a problem you might encounter with your
>>> customized installation is with a52dec which has probes
>>> line (CHECK_LIB/CHECK_HEADERS) in configure.ac
>>> <http://configure.ac>, but djbfft does not. In this
>>> case, djbfft is only built because a52dec is built, so
>>> if your system has a52dec, set a52dec to auto and see if
>>> that problem is solved by retrying the build with:
>>>
>>> ./confgure --with-single-user -enable-a52dec=auto .
>>>
>>> With persistence, you can get results, but it may take
>>> several tries to stabilize the build. If you need help,
>>> email the log and config.log, which is usually
>>> sufficient to determine why a build failed.
>>>
>>> If you have already installed the libfdk_aac development
>>> package on your computer because you prefer this version
>>> over the default aac, you will have to do the following
>>> to get this alternative operational. The libfdk_aac
>>> library is not a part of CINELERRA-GG by default because
>>> it is not license free.
>>>
>>> export FFMPEG_EXTRA_CFG=" --enable-libfdk-aac
>>> --enable-nonfree"
>>> export EXTRA_LIBS=" -lfdk-aac"
>>> for f in `grep -lw aac cinelerra-5.1/ffmpeg/audio/*`; do
>>> sed -e 's/\<aac\>/libfdk_aac/' -i $f
>>> done
>>>
>>>
>>>
>>>
>>> --
>>> Cin mailing list
>>> Cin at lists.cinelerra-gg.org
>>> https://lists.cinelerra-gg.org/mailman/listinfo/cin
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20240920/9b90cae7/attachment-0001.htm>
More information about the Cin
mailing list