[pacman-dev] [PATCH v4] Add makepkg-template

Allan McRae allan at archlinux.org
Mon May 6 18:37:07 EDT 2013


On 07/05/13 04:45, Florian Pritz wrote:
> On 06.05.2013 06:50, Allan McRae wrote:
>>> +# Help line for buildscript filename
>>> +AC_ARG_WITH(template-dir,
>>> +	AS_HELP_STRING([--with-template-dir=name], [set the template dir used by makepkg-template]),
>>> +	[TEMPLATE_DIR=$withval], [TEMPLATE_DIR=/usr/share/makepkg-template])
>>> +
>>
>> Do we want that to be --with-makepkg-template-dir?  I am always worried
>> about too generic configure names and future conflicts.
> 
> Fixed in latest patch.
> 
>>> +Template files can contain any code allowed in a PKGBUILD. You can think of
>>> +them like external files included with "." or "source", but they will be
>>> +inlined into the PKGBUILD by 'makepkg-template' so you do not depend on the
>>> +template file if you wish to build the package.
>>
>> template file when building the package
>>
> 
> Fixed.
> 
>>> +
>>> +Markers are bash comments in the form of:
>>> +
>>> +	# template start; key=value; key2=value2; ...
>>> +
>>> +and
>>> +
>>> +	# template end;
>>> +
>>> +Currently used keys are: name (mandatory) and version. Values are limited to
>>> +alphanumerics, "@", "+", ".", "-" and "_".
>>
>> That is a limit for the values for the name.   Version is quite
>> differently limited.
> 
> Right, versions are limited to "0-9."
> 
> Changed it to:
>> Currently used keys are: name (mandatory) and version. Template names are limited to
>> alphanumerics, "@", "+", ".", "-" and "_". Versions are limited to numbers and ".".
> 
> 
>>
>>> +For initial creation there is a one line shortcut which doesn't need an end:
>>
>> short-cut  (needs a hyphen I think)
> 
> I guess both should be valid. Changed to short-cut anyway.
> 
>> does not  (abbreviations are bad for understandability, especially for
>> non-native speakers)
> 
> Interesting to hear. I always liked abbreviations more.
> 
>> need an end statement/comment/marker?
> 
> marker. Fixed.
> 
>>
>>> +
>>> +	# template input; key=value;
>>> +
>>> +If you use this 'makepkg-template' will replace it with start and end markers
>>
>> Using this short-cut will result in 'makepkg-template' replacing it with...
>>
>>> +and the template code on the first run.
>>> +
>>> +Template files should be stored in one directory and filenames should be
>>> +"$template_name-$version.template" with a symlink "$template_name.template"
>>> +pointing to the most recent template.
>>> +
>> No new paragraph
>>
>>> +If the version is not set in the marker, 'makepkg-template' will automatically
>>> +use the most recent version of the template, otherwise the specified version
>>> +will be used.
>>> +
>>
>> No new paragraph
> 
> All above fixed.
> 
>>> +This allows for easier verification of untrused PKGBUILDs if the template is
>>
>> trusted
>>
> 
> That duplication of "trusted" is not intentional, right?
> 

I was pointing out that "untrused" is a typo...

>>> +trusted. You verify the non-template code and then use a command similar to
>>> +this:
>>> +
>>> +	diff -u <(makepkg-template -o -) PKGBUILD
>>> +
>>> +Template files may also contain markers leading to nested templates in the
>>> +resulting PKGBUILD. If you use markers in a template, please set the version
>>> +you used/tested with in the start/input marker so other people can properly
>>> +recreate from templates.
>>> +
>>> +Options
>>> +-------
>>> +
>>> +*-p, \--input* <buildscript>::
>>> +	Read the package script `buildscript` instead of the `PKGBUILD` default.
>>> +
>>> +*-o, \--output* <buildscript>::
>>> +	Write the updated file to `buildscript` instead of overwriting the input file.
>>> +
>>> +*-n, \--newest*::
>>> +	Always use the newest available template file.
>>> +
>>> +*\--template-dir* <dir>::
>>> +	Change the dir where we are looking for template files.
>>> +
>>> +Example PKGBUILD
>>> +----------------
>>> +
>>> +	pkgname=perl-config-simple
>>> +	pkgver=4.58
>>> +	pkgrel=1
>>> +	pkgdesc="simple configuration file class"
>>> +	arch=(any)
>>> +	license=(PerlArtistic GPL)
>>> +	depends=('perl')
>>> +	source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
>>> +	md5sums=(f014aec54f0a1e2e880d317180fce502)
>>> +	_distname="Config-Simple"
>>> +
>>> +	# template start; name=perl-module; version=1.0;
>>> +	options=(!emptydirs)
>>
>> options+=
>>
> 
> Fixed.
> 
>>> +	_distdir="${_distname}-${pkgver}"
>>> +	url="https://metacpan.org/release/${_distname}"
>>> +
>>> +	build() {
>>> +		export PERL_MM_USE_DEFAULT=1 PERL5LIB=""                 \
>>> +		  PERL_AUTOINSTALL=--skipdeps                            \
>>> +		  PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'"     \
>>> +		  PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \
>>
>> Do you really require $pkgdir to be used during build...  Not a great
>> practise given who know what it is set to in split-packages  (well, I
>> know...  but the point stands!)
>>
> 
> I just copied all that from an automatically generated PKGBUILD by
> genpkg (script from Justin to create perl packages). I've cleaned it up
> now and also did everything Eric posted.
> 
>>> +		  MODULEBUILDRC=/dev/null
>>> +
>>> +		cd "$srcdir/$_distdir"
>>> +		/usr/bin/perl Makefile.PL
>>
>> Why full path?
>>
>>> +		make
>>> +	}
>>> +
>>> +	check() {
>>> +		export PERL_MM_USE_DEFAULT=1 PERL5LIB=""
>>> +		cd "$srcdir/$_distdir"
>>> +		make test
>>> +	}
>>> +
>>> +	package() {
>>> +		cd "$srcdir/$_distdir"
>>> +		make DESTDIR="$pkgdir" install
>>> +		find "$pkgdir" -name .packlist -o -name perllocal.pod -delete
>>> +	}
>>> +	# template end;
>>> +
>>> +
>>> +
>>> +See Also
>>> +--------
>>> +linkman:makepkg[8], linkman:PKGBUILD[5]
>>> +
>>> +include::footer.txt[]
>>> diff --git a/scripts/.gitignore b/scripts/.gitignore
>>> index 9e403bf..26e088b 100644
>>> --- a/scripts/.gitignore
>>> +++ b/scripts/.gitignore
>>> @@ -1,4 +1,5 @@
>>>  makepkg
>>> +makepkg-template
>>>  pacman-db-upgrade
>>>  pacman-key
>>>  pacman-optimize
>>> diff --git a/scripts/Makefile.am b/scripts/Makefile.am
>>> index 784b180..1f3bae2 100644
>>> --- a/scripts/Makefile.am
>>> +++ b/scripts/Makefile.am
>>> @@ -5,6 +5,7 @@ SUBDIRS = po
>>>  
>>>  bin_SCRIPTS = \
>>>  	$(OURSCRIPTS) \
>>> +	makepkg-template \
>>>  	repo-remove \
>>>  	repo-elephant
>>>  
>>> @@ -18,6 +19,7 @@ OURSCRIPTS = \
>>>  
>>>  EXTRA_DIST = \
>>>  	makepkg.sh.in \
>>> +	makepkg-template.pl.in \
>>>  	pacman-db-upgrade.sh.in \
>>>  	pacman-key.sh.in \
>>>  	pacman-optimize.sh.in \
>>> @@ -54,6 +56,7 @@ edit = sed \
>>>  	-e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \
>>>  	-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
>>>  	-e 's|@BUILDSCRIPT[@]|$(BUILDSCRIPT)|g' \
>>> +	-e 's|@TEMPLATE_DIR[@]|$(TEMPLATE_DIR)|g' \
>>>  	-e 's|@DEBUGSUFFIX[@]|$(DEBUGSUFFIX)|g' \
>>>  	-e "s|@INODECMD[@]|$(INODECMD)|g" \
>>>  	-e 's|@SIZECMD[@]|$(SIZECMD)|g' \
>>> @@ -76,6 +79,14 @@ makepkg: \
>>>  	$(srcdir)/makepkg.sh.in \
>>>  	$(srcdir)/library/parseopts.sh
>>>  
>>> +makepkg-template: \
>>> +	$(srcdir)/makepkg-template.pl.in \
>>> +	Makefile
>>> +
>>> +	$(AM_V_at)$(RM) -f makepkg-template
>>> +	$(AM_V_GEN)$(edit) $< > $@
>>> +	$(AM_V_at)chmod +x,a-w $@
>>> +
>>>  pacman-db-upgrade: \
>>>  	$(srcdir)/pacman-db-upgrade.sh.in \
>>>  	$(srcdir)/library/output_format.sh
>>> diff --git a/scripts/makepkg-template.pl.in b/scripts/makepkg-template.pl.in
>>> new file mode 100755
>>
>> I can comment on the perl.  Just a query if this is written in a certain
>> version of perl?  Or would it be quite compatible with an older perl 5.x
>> release?   In not we should add an autoconf check.
> 
> We should be compatible with >=5.10.1 according to the manpage for
> given/when. I've added a check to configure.
> 
> 
> 
> 
> 



More information about the pacman-dev mailing list