On May 12, 2009, at 18:39, Darren Weber wrote:

On Tue, May 12, 2009 at 3:52 PM, Darren Weber wrote:

Can we create a proc within a Portfile?

Yes, you can. You can see the not-quite-finished minivmac v3 portfile in my users directory in the repository for an example port that defines a few procedures of its own (e.g. to mount a disk image).

http://trac.macports.org/browser/users/ryandesign/minivmac/Portfile#L255


I'm currently using this in several places for the vtk-devel port (to set different python version variables):

    set pyver        2.6
    set python       python${pyver}
    set pyport       [join [lrange [split ${python} .] 0 1] ""]
set pyframe ${prefix}/Library/Frameworks/Python.framework/ Versions/${pyver}


Can we create a global proc in a Portfile?  Something like this:

proc setPython { major minor } {
    global pyver python pyport pyframe
    set pyver        ${major}.${minor}
    set python       python${pyver}
    set pyport       python${major}${minor}
set pyframe ${prefix}/Library/Frameworks/Python.framework/ Versions/${pyver}
}


I've tried something that is not working (it doesn't crash, but it's not effective), i.e.:


# Set some default python variables
set pyver        2.6
set python       python${pyver}
set pyport       [join [lrange [split ${python} .] 0 1] ""]
set pyframe      Library/Frameworks/Python.framework/Versions/${pyver}
global pyver python pyport pyframe

# A function to reset the python variables
proc setPython { major minor } {
    global pyver python pyport pyframe
    set pyver        ${major}.${minor}
    set python       python${pyver}
    set pyport       python${major}${minor}
set pyframe Library/Frameworks/Python.framework/Versions/$ {pyver}
}

variant py25 conflicts py26 requires shared description {python 2.5 wrapper} {
    pre-configure {
        setPython 2 5
    }

Here you are calling your setPython proc at pre-configure time.

    #set pyver        2.5
    #set python       python${pyver}
    #set pyport       [join [lrange [split ${python} .] 0 1] ""]
#set pyframe ${prefix}/Library/Frameworks/Python.framework/ Versions/${pyver}
    depends_lib-append \
        port:${pyport}

Here you are expecting the pyport variable to have been defined way before pre-configure time.

As long as the proc only sets variables, you can call it directly, outside of the pre-configure phase, and that might work. (I haven't tried, or completely evaluated the rest of your code.)

    configure.args-delete \
        -DVTK_WRAP_PYTHON:BOOL=OFF
    configure.args-append \
        -DVTK_WRAP_PYTHON:BOOL=ON \
        -DVTK_NO_PYTHON_THREADS:BOOL=OFF \
        -DPYTHON_INCLUDE_PATH:FILEPATH=${prefix}/include/${python} \
        -DPYTHON_LIBRARY:FILEPATH=${prefix}/lib/lib${python}.dylib \
-DPYTHON_DEBUG_LIBRARY:FILEPATH=${prefix}/lib/lib$ {python}.dylib \
        -DPYTHON_EXECUTABLE:FILEPATH=${prefix}/bin/${python} \
-DVTK_PYTHON_SETUP_ARGS:STRING='--prefix=${prefix} --root=$ {destroot}'
        # The VTK_PYTHON_SETUP_ARGS *MUST* be in single quotes
    post-destroot {
# Redefine all the python variables in this clause (they are not carried
        # through from the definitions above in the variant).
        #set pyver        2.5
        #set python       python${pyver}
        #set pyport       [join [lrange [split ${python} .] 0 1] ""]
#set pyframe ${prefix}/Library/Frameworks/ Python.framework/Versions/${pyver} # Reset the name of the vtkpython binary (create a symlink to the # version specific installation, in case other apps look for vtkpython) move ${destroot}${prefix}/bin/vtkpython ${destroot}$ {prefix}/bin/vtk-${branch}-${pyport} ln -f -s ${destroot}${prefix}/bin/vtk-${branch}-${pyport} $ {destroot}${prefix}/bin/vtkpython # Is it possible to change the python site-package name and have it all work OK?
        # from:  /opt/local/lib/python2.6/site-packages/vtk
        # to:    /opt/local/lib/python2.6/site-packages/vtk-5.4
        # Reset the RPATH for all the python .so files
        set buildBinPath ${build.dir}/bin
        set vtkLibPath ${prefix}/lib/${distname}
set vtkPythonPackage ${destroot}${prefix}/lib/${python}/ site-packages/vtk
        foreach f [glob ${vtkPythonPackage}/*.so] {
            foreach dep [exec otool -L ${f}] {
                if [string match "*libvtk*.dylib" ${dep}] {
set newdep [strsed ${dep} #${buildBinPath}#$ {vtkLibPath}#] system "install_name_tool -change ${dep} $ {newdep} ${f}"
                }
            }
        }
    }
}


What is wrong here? Does it require global declarations in the variant?

I'm not sure.


_______________________________________________
macports-dev mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev

Reply via email to