[Scons-users] tagging files (RPM packaging)

Werner Reisberger wr at pure.ch
Sun Jan 2 05:52:10 EST 2022


On 2022-01-01 23:00, Bill Deegan wrote:
> Can you try:
> 
>       Tag('file2.txt', 'DOC')

This gives me: AttributeError: 'SConsEnvironment' object has no 
attribute 'Tag':
Calling
         env.Tag('file2.txt', 'DOC')
gives: AttributeError: 'str' object has no attribute 'Tag':

Please find below an example of a basic SConstruct file which should 
make the behaviour more clear. I am working on Redhat 7 and Centos 8 
with python 3.6.8 and SCons v4.3.0.

The test directory looks like

bin/  etc/  man/  SConstruct

../bin:     ./etc:     ./man:
a.sh       c.conf     m.txt


Running scons with the below SConstruct produces a rpm with all three 
files. The bin/a.sh has the right file attributes when installed. I 
don't replicate the full directory structure but for the sake of 
demonstrating the tagging behaviour this should be sufficient.

I could open a github project for this but I would rather offer to 
extend the existing tagging test
(https://github.com/SCons/scons/blob/master/test/packaging/rpm/tagging.py) 
which will give the opportunity to dive a bit into the python code :)

Basically I would like to use SCons to build a couple of RPM's which are 
currently build by make. It's mostly precompiled stuff.

--Werner

#################################################################################################
env = Environment(tools=["default", "packaging"])
mma = File([ "bin/a.sh", "etc/c.conf", "man/m.txt" ])
env.Install("/var/tmp/tagtest", mma)
# following tagging works
env.Tag(mma[0], UNIX_ATTR='(755, root, adm)')
env.Tag(mma[1], CONFIG=' ') # adds an extra space between attribute and 
filename
env.Tag(mma[2], DOC=' ')
# should work according to docs but does not
# env.Tag("bin/a.sh", UNIX_ATTR='0o755')
# env.Tag("etc/c.conf", CONFIG)
# env.Tag("man/m.txt", DOC)
env.Package(
     NAME='tagtest',
     VERSION='1.0.0',
     PACKAGEVERSION=0,
     LICENSE="gpl",
     PACKAGETYPE="rpm",
     SUMMARY="Check tags",
     DESCRIPTION="test basics",
     X_RPM_GROUP="build/tools",
)
###################################################################################################
> On Sat, Jan 1, 2022 at 1:57 PM Bill Deegan <bill at baddogconsulting.com>
> wrote:
> 
>> Also:
>> Which version of Python?
>> 
>> Which version of SCons?
>> Which OS and version are you running?
>> 
>> Thanks,
>> Bill
>> 
>> On Sat, Jan 1, 2022 at 1:55 PM Bill Deegan
>> <bill at baddogconsulting.com> wrote:
>> 
>> Werner,
>> 
>> Can you make a sample github repo with all the attributes you're
>> trying to use, and an example rpmspec file?
>> 
>> That should provide enough information to make sure we fix the issue
>> you're running into.
>> 
>> Thanks,
>> Bill
>> SCons Project Co-Manager
>> 
>> On Sat, Jan 1, 2022 at 9:45 AM Mats Wichmann <mats at wichmann.us>
>> wrote:
>> On 1/1/22 07:16, Werner Reisberger wrote:
>>> The RPM packages I am trying to build with SCons require certain
>> tags
>>> but most of the tags does not work out of the box.
>>> 
>>> E.g. The SCons man page proposes the following call to tag a file
>> with
>>> the DOC attribute:
>>> 
>>>     # marks file2.txt to be a documentation file
>>>     Tag('file2.txt', DOC)
>>> 
>>> This does not work. I have to say
>>> 
>>>     Tag('file2.txt', DOC=' ')
>>> 
>>> That's because the tag is defined as
>>> 
>>>     'PACKAGING_DOC'              : '%%doc %s',
>>> 
>>> but DOC attributes in RPM spec files have the format
>>> 
>>>      %doc file_name
>>> 
>>> It's different with the UNIX_ATTR tag where file mode and
>> owner/group
>>> have to be appended like
>>> 
>>>      %attr(644, root, adm) /etc/yp.conf
>>> 
>>> The tag command for UNIX_ATTR in the SCons man page also doesn't
>> work:
>>> 
>>>      # makes sure the built library will be installed with
>> 644 file
>>> access mode
>>>      Tag(Library('lib.c'), UNIX_ATTR="0o644")
>>> 
>>> You need to follow the RPM specification
>>> 
>> 
> (http://ftp.rpm.org/max-rpm/s1-rpm-anywhere-specifying-file-attributes.html
>> [1])
>>> 
>>> 
>>> However the tagging test script on GitHub does it right.
>>> 
>>> Like the DOC attribute the following tag definitions need to be
>> fixed:
>>> 
>>>         'PACKAGING_CONFIG'           : '%%config
>> %s',            # =>
>>> '%%config'
>>>         'PACKAGING_CONFIG_NOREPLACE' :
>> '%%config(noreplace) %s', # =>
>>> '%%config(noreplace)'
>>>         'PACKAGING_UNIX_ATTR'        : '%%attr
>> %s',              # =>
>>> '%%attr(%s)'
>>>         'PACKAGING_LANG_'            :
>> '%%lang(%s) %s',          # =>
>>> '%%lang(%s)'
>>>         'PACKAGING_X_RPM_VERIFY'     : '%%verify
>> %s',            # =>
>>> '%%verify (%s)' ?
>>>         'PACKAGING_X_RPM_DIR'        : '%%dir
>> %s',               # =>
>>> '%%dir'
>>>         'PACKAGING_X_RPM_DOCDIR'     : '%%docdir
>> %s',            # =>
>>> '%%docdir'
>>>         'PACKAGING_X_RPM_GHOST'      : '%%ghost %s',
>> }           # =>
>>> '%%ghost'
>>> 
>>> Unfortunately my python knowledge is rather basic but let me know
>> how I
>>> can help.
>> 
>> Looks like this code hasn't been touched in a very long time
>> (except for
>> some fiddling of docstrings and newer Python syntax, it's largely
>> unchanged since 2007) .  One wonders if it's actually being used -
>> you
>> may be a trailblazer here! Not sure if the actual problem is the
>> tag
>> specifications or the tag "compiler" in the code, we should be able
>> to
>> figure it out though.  Help could be as simple as providing a
>> minimal
>> SConscript that shows the problem.
>> 
>>> 
>>> Happy 2022 and keep on going with your great work!
>>> 
>> 
>> Thanks!
>> 
>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users [2]
> 
> 
> Links:
> ------
> [1] 
> http://ftp.rpm.org/max-rpm/s1-rpm-anywhere-specifying-file-attributes.html
> [2] https://pairlist4.pair.net/mailman/listinfo/scons-users
> 
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users


More information about the Scons-users mailing list