3

I have a build support script for building my packages. Now I want to automatically set the Version in my spec files. I use the macro %{auto_version} for that. In my script I want to invoke rpmbuild -D 'auto_version 1.1' packet.spec for example.

#!/bin/bash
version=$(version.sh)
#snip
define="'auto_version ${version}'"

build_spec () {
    spec=$1
    define=$2
    #snip
    build_output=$(rpmbuild -D "$define" $spec)
    # snip
}

build_spec $build_spec "$define"

However this generates the error error: Macro % has illegal name (%define)

I've tried different escaping, quoting and making define an array, handled with ${define[@]}.

  • version.sh correctly outputs a version number e.g. 0.1 – sahisb May 15 '17 at 16:02
  • 4
    Basically copied from my answer to your previous, now-deleted question: pretty sure you really want define="auto_version ${version}" without the single quotes (though not familiar with RPM; but requiring literal quotes in the value would be very weird indeed). – tripleee May 15 '17 at 18:02
0

As @tripleee right points, the reason of error: Macro % has illegal name (%define) is extra quotes in -D|--define directives like:

-D "\"_gpg_name $gpgname\""

the right version is:

-D "_gpg_name $gpgname"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.