[Cin] Is one pre-built dynamic and static binary for user selection possible?

Andrew Randrianasulu randrianasulu at gmail.com
Fri Sep 20 16:33:07 CEST 2024


пт, 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  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
> 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: installing 'cfg/compile'
> configure.ac:89: installing 'cfg/config.guess'
> configure.ac:89: installing 'cfg/config.sub'
> configure.ac:12: installing 'cfg/install-sh'
> 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



> 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?

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.




> 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 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, 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/ef66c34b/attachment-0001.htm>


More information about the Cin mailing list