[virt-tools-list] [PATCH-v5.5 3/5] make wrapper executables work

Cole Robinson crobinso at redhat.com
Wed Apr 10 22:32:29 UTC 2013


On 04/09/2013 03:19 PM, Gene Czarcinski wrote:
> 1. Add virtcli to data_files[]
> 
> 2. Add code to wrapper created in my_build() to determine
> the directory the wrapper script is located and then
> execute the python program which is located relative
> to that directory.  For real system installs, this
> directory will be "/usr/bin".
> 
> 3. Update virt-manager.spec for the virtcli directory.
> .
> Signed-off-by: Gene Czarcinski <gene at czarc.net>
> ---
>  setup.py          | 18 ++++++++++++++++--
>  virt-manager.spec |  1 +
>  2 files changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/setup.py b/setup.py
> index e98561e..6186316 100644
> --- a/setup.py
> +++ b/setup.py
> @@ -81,10 +81,23 @@ class my_build(build_extra):
>              os.mkdir("build")
>  
>          for app in cmds:
> -            sharepath = os.path.join(cliconfig.asset_dir, app)
> +            sharepath = os.path.join("../share/virt-manager", app)
>  
>              wrapper = "#!/bin/sh\n\n"
> -            wrapper += "exec \"%s\" \"$@\"" % (sharepath)
> +            wrapper += """
> +SOURCE=\"${BASH_SOURCE[0]}\"
> +# resolve $SOURCE until the file is no longer a symlink
> +while [ -h \"$SOURCE\" ]; do
> +  DIR=\"$( cd -P \"$( dirname \"$SOURCE\" )\" && pwd )\"
> +  SOURCE=\"$(readlink \"$SOURCE\")\"
> +     # if $SOURCE was a relative symlink, we need to resolve it
> +     # relative to the path where the symlink file was located
> +  [[ $SOURCE != /* ]] && SOURCE=\"$DIR/$SOURCE\"
> +done
> +DIR=\"$( cd -P \"$( dirname \"$SOURCE\" )\" && pwd )\"
> +
> +"""
> +            wrapper += "exec \"$DIR/%s\" \"$@\"" % (sharepath)
> 

I don't like this shell bit here: even if it's simple, shell maintenance is a
total pain.

What I did here is add a --prefix switch to configure: this makes it work
similar to an autotools project. install will warn if it is passed an explicit
--prefix which doesn't match the one that configure has. We could probably
find a way to have 'install' re-run configure but I'll see if anyone cares first.

I pushed the other bits as a standalone commit:

https://git.fedorahosted.org/cgit/virt-manager.git/commit/?id=2a7a634df0547ca0a7c9c3440c9049c7ecabab1e

Thanks,
Cole

>              newpath = os.path.abspath(os.path.join("build", app))
>              print "Generating %s" % newpath
> @@ -407,6 +420,7 @@ setup(
>  
>          ("share/virt-manager/virtManager", glob.glob("virtManager/*.py")),
>  
> +        ("share/virt-manager/virtcli", glob.glob("virtcli/*.py")),
>          ("share/virt-manager/virtinst", glob.glob("virtinst/*.py")),
>          ("share/virt-manager/virtconv", glob.glob("virtconv/*.py")),
>          ("share/virt-manager/virtconv/parsers",
> diff --git a/virt-manager.spec b/virt-manager.spec
> index 7a36545..841172c 100644
> --- a/virt-manager.spec
> +++ b/virt-manager.spec
> @@ -277,6 +277,7 @@ update-desktop-database -q %{_datadir}/applications
>  %{_mandir}/man1/%{name}.1*
>  
>  %{_datadir}/%{name}/ui/*.ui
> +%{_datadir}/%{name}/virtcli/*
>  %{_datadir}/%{name}/%{name}
>  
>  %{_datadir}/%{name}/icons
> 




More information about the virt-tools-list mailing list