[pacman-dev] libmakepkg layout - Was: [PATCH v2 0/4] Splitting up makepkg into libmakepkg

Ashley Whetter ashley at awhetter.co.uk
Sat Sep 7 06:34:18 EDT 2013

On 2013-09-07 07:40, Allan McRae wrote:
> On 06/09/13 08:13, ashley at awhetter.co.uk wrote:
>> From: Ashley Whetter <ashley at awhetter.co.uk>
>> This time around I've split up amekpkg as per Allan's recommendation, 
>> and put
>> each function into it's own file.
>> There's a file at the base of each libmakepkg directory that imports 
>> that part
>> of the library. (eg libmakepkg/download.sh imports 
>> libmakepkg/download/*.sh).
>> Instead creating a file that imports every part of the library, I've 
>> instead put
>> the for loop straight into makepkg.sh.in.
>> Each libmakepkg file has it's own inclusion guard.
>> Each libmakepkg copyright notice was deduced from the full set, 
>> dependent on
>> what years git blame said that each line of a function had been 
>> written in.
>> I feel like the scripts Makefile is getting a bit cluttered.
>> Even the number of .sh.in files is getting a bit big. This could be 
>> reduced
>> by not using LIBRARY in every libmakepkg file and using relative 
>> imports instead,
>> but this seems like even less of a good idea.
>> I'm not really sure if/how we want to get rid of this issue.
> OK - definitely too much splitting...

I mentioned this on IRC while I was doing it and I totally agree.

> I wanted the download_foo functions to be in individual files are they
> are fairly substantial functions.   But thinks like the message
> functions that are four lines do not need split.
> So lets work on a layout before we go further.   Here is a start:
> https://wiki.archlinux.org/index.php/User:Allan/Makepkg_Split
> Allan

I disagree with util/source.sh going into util. The source array is part 
of a PKGBUILD so I think it might be worth having a separate 
libmakepkg/pkgbuild folder, and putting source.sh and pkgbuild.sh in it.

I definitely agree with grouping the download and extract functions 
together. It makes more sense, and adding a new VCS target will mean 
creating only one new file.

To move out the extraction functions we'll also need to address 
extract_sources calling the check_build_status function. I originally 
grouped check_build_status into a makepkg specific part of the library. 
We could put check_build_status into libmakepkg/makepkg.sh (or is this 
what libmakepkg/packaging.sh is for?). I don't think makepkg.sh should 
go into the util folder because it's not a "generally useful" function, 
but specific to the functionality of makepkg.
Also to quote something I said in my original grouping proposal 
"extract_sources to check_build_status is the only dependency between 
'sources' and 'makepkg'. I feel like it's worth getting rid of this 
dependency somehow?".

check_build_status also depends on get_full_version. "I think 
get_full_version is a PKGBUILD specific function, but run_function (in 
utils) depends on it to create the log file. Maybe logging stuff could 
be split into another [part of the] library?".
check_build_status also depends on install_package. I originally put 
install_package in makepkg.sh/packaging.sh because although it was 
calling pacman, it was generating the location of the generated package 
file (something which is specific to makepkg) to pass onto pacman. So I 
didn't think it made sense to put it into dependencies.sh unless we 
passed it a list of package files to install.
install_package depends on run_pacman. I still think it makes sense to 
put this into libmakepkg/util/dependencies.sh.

Minor side note: Are we calling util "utils" or "util"? I keep writing 
utils then correcting myself, but it should be plural as it's a set of 


More information about the pacman-dev mailing list