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

Andrew Randrianasulu randrianasulu at gmail.com
Fri Sep 20 16:17:02 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
>

sorry, yo need to cd to /home/cinelerra/cinelerra-5.1/


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


but you discovered build error in makeappimagetool!




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


usually, if something errors out at make make install will still try to
build failed component. But in our case error is in sourcecode so it fails
again. You probably  can skip make install in future if make fails with
error.




>
>
>
>
>>
>>
>>
>>>
>>> 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/9d6e1a21/attachment-0001.htm>


More information about the Cin mailing list