On Fri, 3 May 2024 22:29:00 +0200 Phil Otken <phil.ot...@gmail.com> said:
> After a rebuild of the OS, I compiled EFL successfully. Rather than run the > > sudo ninja -C build install > > command, I'd like to package it in an RPM. I can see where all the > libraries are, so creating the *efl.rpm* appears straightforward. OTOH, to > compile e, terminology, etc., I believe I also need to create > *efl-devel.rpm* as well. > > I believe all the header files, *.h need to go into the rpm; the question I > have is, are there any other files I need to include in the devel package? Well EFL (and e) etc. stick to a very standard set of installation locations. in fact they are pretty religious about adhering to the prefix given. so first to make a "standard" package you should provide --prefix=/usr when configuring efl and e with meson. This is what all standard packages do on every distro. they may also do a few other things like --sysconfdir=/etc but that's normally about it. this above has nothing to do with efl or e - it's just standard stuff. you might want to check the meson_options.txt. also i'm the arch linux maintainer for efl and e and others so you might want to look what the arch packages do options-wise as a guide to what is probably the right thing to do. https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=efl-git https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=enlightenment-git there are others like rage, ecrire etc. - these build from git latest so stay as up to date as possible, and these are the latest stable releases: https://gitlab.archlinux.org/archlinux/packaging/packages/efl/-/blob/main/PKGBUILD?ref_type=heads https://gitlab.archlinux.org/archlinux/packaging/packages/enlightenment/-/blob/main/PKGBUILD?ref_type=heads now arch linux differs to rh/fedora/debian/ubuntu/suse etc. in that arch does NOT split out to -dev/-devel packages. generally arch does not split packages. you install something - it comes with all the headers and what not. it's a policy thing. now what goes into a dev/devel package? you got it right that .h files nee d to go - also for eina .x files. in fact just put everything in /usr/include/* that the package installs (the way most package build tools work is they use a DESTDIR to install into like /tmp/mypackage and then this dir ONLY holds things the package installed. thus you can blindly package up entire directories knowing nothing from the host fs will be in there). so go for /usr/include/* rather than .h files specifically. you will ALSO want to package /usr/lib/pkgconfig/* (always *.pc files in there). beware that it might be policy that pkgconfig is in /usr/lib64/pkgconfig or maybe its in /usr/lib/x86_64-linux-gnu/pkgconfig - i.e. some architecture triplet string parent enforced by your distro - so check this. *.pc files are used by pkgconfig to figure out how to compile against some library - they are used in conjunction with the *.h files for development. now something else policy-wise on your style of distro. *.so files in /usr/lib (or lib64 or lib/archstring) belong in dev/devel packages. this is different to the *.so.xx.yy.zz versioned files. so files that are libxxx.so are symlinks pointing to the latest major version and are used only for compiling. they are not needed for regular user "runtime use". so e.g. libevas.so needs to go into the dev(el) pkg. libevas.so. 1.27.0, libevas.so.1 go into the regular package. be aware that efl and e also have modules that are loaded at runtime to isolate extensions/features into their own binary shared libs. you will find these in /usr/lib/xxx/ e.g. /usr/lib/evas and a module .so file may be buried deep down a tree like /usr/lib/evas/modules/engines/gl_x11/v-1.27/module.so - these files in these lib dirs for efl are not for development. they are runtime. efl handles versioning them for you (as you can see above). same for enlightenment e.g. /usr/lib/enlightenment/modules/clock/linux-gnu-x86_64-0.26.0/module.so - but e also includes an arch triple because e also allows modules to load from ~/.e/e/modules (users can install their own without root access). as a home dir can be shared between different os's and arch's (nfs, rsync etc.) e also handles the arch triple. but all these modules belong in the core pkg and not the dev(el) packages. another thing to note - one reason for modules is to allow packages to split out dependencies. efl really would LIKE to build with all things enabled, but then allow packages to e.g. split out the heif image loader as that pulls in libheif as a dependency for a fairly rarely seen image format. so you could split out /usr/lib/evas/modules/image_loaders/heif (and everything below it) into a special efl-image-load-format-heif package. there are also image savers and engines. you could drop gl support as a dependency by splitting out all the gl engines in evas and ecore_evas into a efl-render-gl support package. you COULD also build efl twice and build 2 sets of gl support packages - build once with the default egl/gles and another time with glx. glx will not work with wayland but it works around some nvidia driver performance bugs that it has in egl/gles. no other drivers suffer from this thus i'm pretty much unmotivated to try have efl handle this for you (nvidia's binary blobs and what not). efl could actually in theory split out x11 and wayland support too into such split out packages if elementary moved its wl and x11 support into modules too, but due to this you can't effectively do that. you cans plit out other things too like the sample background set enlightenment comes in. i'd not recommend splitting out enlightenment modules as they don't pull in hard dependencies (like libraries). any deps are soft (eg bluez5 module needs bluez5 to work - but it'll soft fail and give you a ? gadget icon if it can't talk to bluez ... ). e and efl are actually very very very very packager friendly. they are built to follow standards as you'd expect and be easily able to be split up if you know what efl, e etc. do and what the modules, tools and dependencies do/mean. the work of splitting has already been done for you in the install of efl - you can take advantage of it in packaging where sensible. of course excessively splitting package-wise comes with problems. you may find functionality degrades if someone forgets to install and optional dep and they may not be smart/experienced enough to realize why that heif image doesn't load (they forgot to install the heif loader package). you might want to make convenience packages like efl-devel-all (if you end up splitting ever lib into its own package - i don't recommend splitting efl itself - while it is technically possible to have e.g. eina separate from emile and separate from evas and set up all the dependencies .. it's almost pointless as efl in all of its real use cases goes all the way up to the higher level libs like elementary which end up pulling in everything below it). i've even mulled merging efl into a single libefl.so for everything. any "optionalizing" of things would be handled by efl itself with modules ... in fact over time i now prefer the idea of just directly dlopening the dependency (like libheif) and doing my own symbol resolving as it means efl can build with all support and then at runtime find the dependencies and support itself. i hope that helps shed some light on this :) > -- > Thanks, > - Phil > > Phil Otken > Overlogix, Inc. <https://overlogix.com/> > also d.b.a. > Practical Software and Database Engineering, Inc. > c: +41 79 376 08 96 > e-mail: phil.ot...@gmail.com > Online Professional Profile: http://www.linkedin.com/in/potken/ > > _______________________________________________ > enlightenment-users mailing list > enlightenment-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-users > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- Carsten Haitzler - ras...@rasterman.com _______________________________________________ enlightenment-users mailing list enlightenment-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-users