I have build some library by mu build system (using make/gcc) and OBS. Problem is, on the same distribution, entities installed by make, sudo make install worked, but not from installed packages, except giving path to library by LD_PRELOAD environment variable.
include ../../tao-build-config
fch:=$(call substr,$(objdir),1,1)
ifneq ( $(fch), '/')
objdir:=../../$(objdir)
endif
targets!=( for a in *.c; do echo "$(objdir)Modules/GTK+-4/$$a" | sed -e 's/\.c /\.o /g' | sed -e 's/\.c$$/\.o/g'; done; )
tao-module: $(targets)
gcc $(CFLAGS) -Wl,-z,noexecstack -g -shared -Wl,-soname,tao-gtk-4.so.1 -o tao-gtk-4.so.1.0 `pkg-config --cflags gtk4 --libs gtk4` `pkg-config --cflags cairo --libs cairo` `pkg-config --cflags sdl2 --libs sdl2` `pkg-config --cflags SDL2_image --libs SDL2_image` $(objdir)debug.o $(objdir)/Modules/GTK+-4/*.o $(objdir)Modules/common/data_ctr_common.o $(objdir)Modules/common/api_listing.o
cp tao-gtk-4.so.1.0 $(objdir)Modules
$(objdir)Modules/GTK+-4/%.o: %.c
@echo Compiling $< into $@
gcc $(CFLAGS) -Wl,-z,noexecstack -g -fPIC `pkg-config --cflags gtk4 --libs gtk4` `pkg-config --cflags cairo --libs cairo` `pkg-config --cflags sdl2 --libs sdl2` `pkg-config --cflags SDL2_image --libs SDL2_image` -c $< -o $@
clean:
rm $(objdir)Modules/GTK+-4/*.o
rm $(objdir)Modules/*.so*
../../tao-build-config:
make -C ../.. configure
Above is Modules/GTK±4/Makefile content.
Below is ./Makefile content:
CFLAGS?=
TAO_LIB=libgreattao.so.2.0
PROGPATH?=Demos/główny.o
PROGPARAMS?=
INSTALLPATH?="/usr/local/"
DESIGNPATHNORMAL=$(INSTALLPATH)"/share/tao-design/"
DESIGNPATHTEST="./tao-design/"
LIBSELL_LINK=-lsell
a!=uname -m
lib64!=[ ${a} == "x86_64" ] && echo 64 || echo
libnotify?=false
objdir?=
name_of_config:="tao-build-config"
content :=$(file < ${name_of_config})
include tao-build-config
ifndef objdir
objdir:=./
else
objdir:=$(objdir)/
endif
ifeq ($(libnotify),true)
ADDFLAGS=-DWITHLIBNOTIFY -lnotify
endif
targets!=( for a in *.c; do echo "$(objdir)$$a" | sed -e 's/\.c /\.o /g' | sed -e 's/\.c$$/\.o/g'; done; for a in template-processing/*.c; do echo "$(objdir)$$a"| sed -e 's/\.c /\.o /g' | sed -e 's/\.c$$/\.o/g'; done; for a in strings-processing/*.c; do echo "$(objdir)$$a"| sed -e 's/\.c /\.o /g' | sed -e 's/\.c$$/\.o/g'; done; for a in frame/*.c; do echo $(objdir)$$a | sed -e 's/\.c /\.o /g' | sed -e 's/\.c$$/\.o/g'; done )
$(objdir)frame/%.o: frame/%.c frame/%.h
gcc $(CFLAGS) $(ADDFLAGS) -fvisibility=hidden -o $@ -ggdb -O0 -fPIC -c $< -ldl -DINSTALLPATH=\"${INSTALLPATH}\" -lpthread -lreadconfig `pkg-config --cflags sdl2 --libs sdl2``pkg-config --cflags SDL2_image --libs SDL2_image` ;
$(objdir)template-processing/%.o: template-processing/%.c template-processing/%.h
gcc $(CFLAGS) $(ADDFLAGS) -fvisibility=hidden -o $@ -ggdb -O0 -fPIC -c $< -ldl -DINSTALLPATH=\"${INSTALLPATH}\" -lpthread -lreadconfig `pkg-config --cflags sdl2 --libs sdl2``pkg-config --cflags SDL2_image --libs SDL2_image`;
$(objdir)strings-processing/%.o: strings-processing/%.c string-proceessing/%.h
gcc $(CFLAGS) $(ADDFLAGS) -fvisibility=hidden -o $@ -ggdb -O0 -fPIC -c $< -ldl -DINSTALLPATH=\"${INSTALLPATH}\" -lpthread -lreadconfig `pkg-config --cflags sdl2 --libs sdl2``pkg-config --cflags SDL2_image --libs SDL2_image`;
$(objdir)%.o: %.c
gcc $(CFLAGS) $(ADDFLAGS) -DDESIGNPATH="\"$(DESIGNPATH)\"" -fvisibility=hidden -o $@ -ggdb -O0 -fPIC -c $< -ldl -DINSTALLPATH=\"${INSTALLPATH}\" -lpthread -lreadconfig `pkg-config --cflags sdl2 --libs sdl2``pkg-config --cflags SDL2_image --libs SDL2_image`
normal: DESIGNPATH=${DESIGNPATHNORMAL}
normal:
echo Normal Compilation
normal: necessary $(objdir)${TAO_LIB}
show_design_path:
echo DESIGNPATH IS ${DESIGNPATH}
necessary:
make -C Modules/common
tao-build-config configure:
@echo -e "CFLAGS=$(CFLAGS)\nPROGPATH=$(PROGPATH)\nPROGPARAMS=$(PROGPARAMS)\nINSTALLPATH=$(INSTALLPATH)\nDESIGNOPATHNORMAL=$(DESIGNPATHNORMAL)\nDESIGNPATHTEST=$(DESIGNPATHTEST)\nobjdir=$(objdir)" > ${name_of_config}
mkdir -p $(objdir)frame
mkdir -p $(objdir)template-processing
mkdir -p $(objdir)strings-processing
mkdir -p $(objdir)Modules
mkdir -p $(objdir)Modules/common
for a in Modules/*; do \
if [[ -d "$$a" ]]; then \
mkdir -p $(objdir)"$${a}"; \
fi; \
done
$(objdir)$(TAO_LIB): show_design_path $(objdir)tao.o $(objdir)multilisted.o $(objdir)debug.o $(targets)
gcc $(CFLAGS) -fPIC -Wl,--format=binary -Wl,tao2xsltTrans -Wl,--format=default -Wl,-z,noexecstack -O0 -ggdb -shared -Wl,-soname,libgreattao.so -o libgreattao.so.2.0 $(objdir)*.o $(objdir)template-processing/*.o $(objdir)strings-processing/*.o $(objdir)frame/*.o -ldl $(LIBSELL_LINK) $(objdir)Modules/common/data_ctr_common.o $(objdir)Modules/common/timers.o -lpthread -lreadconfig `pkg-config --cflags sdl2 --libs sdl2` `pkg-config --cflags SDL2_image --libs SDL2_image` `pkg-config --cflags libxslt --libs libxslt` `pkg-config --cflags libexslt --libs libexslt` -o $@
ln -fs libgreattao.so.2.0 $(objdir)libgreattao.so.2
ln -fs libgreattao.so.2 $(objdir)libgreattao.so
$(objdir)tao.o: *.c common/debug.c
gcc $(CFLAGS) -fvisibility=hidden -ggdb -O0 -fPIC -c common/debug.c
$(objdir)multilisted.o:
gcc $(CFLAGS) -ggdb -c -fPIC common/multi_listed.c -o $(objdir)multilisted.o
$(objdir)debug.o:
gcc $(CFLAGS) -ggdb -c -fPIC common/debug.c -o $(objdir)debug.o
clean:
rm $(objdir)/Modules/common/*.o
rm $(objdir)/*.o
rm $(objdir)/libgreattao.so*
depends:
@echo Missing libraries needed to compile engine of libgreattao
@pkg-config --cflags SDL2_image --libs SDL2_image > /dev/null
@pkg-config --cflags openssl --libs openssl > /dev/null
@echo Missing libraries needed to compile Gtk+2.0 backend of libgreattao
@pkg-config --cflags gtk+-2.0 --libs gtk+-2.0 > /dev/null
@echo Missing libraties needed to compile Qt backend of libgreattao
@pkg-config --cflags QtGui --libs QtGui > /dev/null
prepare-for-tests:
mkdir -p $(objdir)/mWidgets_modules
cp $(objdir)/Modules/tao-*.so.1.0 $(objdir)/mWidgets_modules
ln -fs $(objdir)/tao-gtk.so.1.0 $(objdir)/mWidgets_modules/tao-gtk.so
ln -fs $(objdir)/tao-Qt5.so.1.0 $(objdir)/mWidgets_modules/tao-Qt5.so
test-int1:
echo Performing test - maybe with compilation
test: DESIGNPATH=${DESIGNPATHTEST}
test: test-int1 prepare-for-tests $(objdir)$(TAO_LIB)
LD_LIBRARY_PATH="${objdir}":"${LD_LIBRARY_PATH}" "${PROGPATH}" ${PROGPARAMS}
debug: prepare-for-tests
LD_LIBRARY_PATH="${objdir}}":"${LD_LIBRARY_PATH}" gdb --args "${PROGPATH}" ${PROGPARAMS}
install:
mkdir -p ${INSTALLPATH}/share/tao-design
cp -r ./tao-design/* ${INSTALLPATH}/share/tao-design
cp -r tao-design ${INSTALLPATH}/share
mkdir -p ${INSTALLPATH}/lib${lib64}/mWidgets_modules
cp $(objdir)/Modules/tao-*.so.1.0 -t ${INSTALLPATH}/lib${lib64}/mWidgets_modules
ln -fs ./tao-Qt5.so.1.0 ${INSTALLPATH}/lib${lib64}/mWidgets_modules/tao-Qt5.so
ln -fs ./tao-gtk.so.1.0 ${INSTALLPATH}/lib${lib64}/mWidgets_modules/tao-gtk.so.1
ln -fs ./tao-gtk.so.1 ${INSTALLPATH}/lib${lib64}/mWidgets_modules/tao-gtk.so
cp $(objdir)/libgreattao.so* ${INSTALLPATH}/lib${lib64}
mkdir -p ${INSTALLPATH}/include/libgreattao
cp Includes/tao.h ${INSTALLPATH}/include/libgreattao
cp Includes/config.h ${INSTALLPATH}/include/libgreattao
cp Includes/network.h ${INSTALLPATH}/include/libgreattao
cp Includes/log.h ${INSTALLPATH}/include/libgreattao
cp Includes/loop.h ${INSTALLPATH}/include/libgreattao
all:
make
make -C Demos
make -C Modules
make test
And tao-build-config content:
CFLAGS=
PROGPATH=Demos/główny.o
PROGPARAMS=
INSTALLPATH=/usr/local/
DESIGNOPATHNORMAL=/usr/local/share/tao-design/
DESIGNPATHTEST=./tao-design/
objdir=./build///////////////////
So I make:
make
make -C Modules/GTK+-4
sudo make install
I know, there is a lot of code/information, but if somebody take a look. Especially, I think maybe it is related to pkg-config, but I build packages for Tumbleweed and build by my build system on Tumbleweed.
And spec file:
#
# spec file for package libsell
#
# Copyright (c) 2022 Sławomir Lach <slawek@lach.art.pl>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: libgreattao
Version: 2.85.9
Release: 0.0.1
Summary: This package providces core of GUI generating library
License: GPL-3.0-or-later
BuildRequires: make gcc SDL2_image-devel libxslt-devel libreadconfig-devel libsell-devel
Requires: libgreattao-module
URL: https://sourceforge.net/projects/libgreattao
Source0: https://sourceforge.net/projects/libgreattao/files/Sources/libgreattao-%{version}.tar.gz
%description
Libgreattao-core is a core of library to dynamically generate UI. This helps developers to not create applications, which differs only in UI and focus on implementing of functionality.
%package devel
Summary: Development Package for %{name}
Requires: %{name} = %{version}
%description devel
This package providces core of GUI generating library
This package contains the header file.
%package module-gtk+-4
Summary: Module GTK+ for libgreattao
Requires: %{name}
BuildRequires: gtk4-devel
Provides: libgreattao-module
%description module-gtk+-4
This package providces module of GUI generating library
This package contains the GTK+-4 module
%package module-console
Summary: Console Module for libgreattao
Requires: %{name}
Provides: libgreattao-module
%description module-console
This package providces module of GUI generating library
This package contains the console module
%prep
%autosetup -n libgreattao-%{version}
%build
cd Modules/common
%make_build CFLAGS="%{optflags}"
cd ../..
%make_build CFLAGS="%{optflags}" INSTALLPATH=/usr
cd Modules/GTK+-4
%make_build CFLAGS="%{optflags}"
cd ../console
%make_build CFLAGS="%{optflags}"
%install
mkdir -p %{buildroot}/%{_libdir}
mkdir -p %{buildroot}/%{_includedir}/libgreattao
mkdir -p %{buildroot}/%{_libdir}/mWidgets_modules
mkdir -p %{buildroot}/usr/share/
cp -r tao-design %{buildroot}/usr/share/
install -m0755 libgreattao.so.2.0 %{buildroot}/%{_libdir}/libgreattao.so.2.0
install -m0644 Includes/config.h %{buildroot}/%{_includedir}/libgreattao/config.h
install -m0644 Includes/loop.h %{buildroot}/%{_includedir}/libgreattao/loop.h
install -m0644 Includes/log.h %{buildroot}/%{_includedir}/libgreattao/log.h
install -m0644 Includes/network.h %{buildroot}/%{_includedir}/libgreattao/network.h
install -m0644 Includes/tao.h %{buildroot}/%{_includedir}/libgreattao/tao.h
install -m0755 Modules/tao-gtk-4.so.1.0 %{buildroot}/%{_libdir}/mWidgets_modules/tao-gtk-4.so.1.0
install -m0755 Modules/tao-console.so.1.0 %{buildroot}/%{_libdir}/mWidgets_modules/tao-console.so.1.0
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%license LICENSE
%{_libdir}/libgreattao.so.2.0
%dir %{_libdir}/mWidgets_modules
/usr/share/tao-design
%files devel
%{_includedir}/libgreattao
%files module-gtk+-4
/%{_libdir}/mWidgets_modules/tao-gtk-4.so.1.0
%files module-console
/%{_libdir}/mWidgets_modules/tao-console.so.1.0
%changelog