On Tue, May 12, 2009 at 10:13 PM, Ryan Schmidt <[email protected]>wrote:
> > 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. > > > The following is working: # A function to set or reset python variables (defaults to version 2.6) proc setPython { {major 2} {minor 6} } { 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} } # Initialize the global variables for python26 setPython # This proc is called from within pyXY variants like this: #setPython X Y variant py25 conflicts py26 requires shared description {python 2.5 wrapper} { # Note that python25 is NOT installed as a framework (May 2009) setPython 2 5 depends_lib-append \ port:${pyport} 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 { setPython 2 5 # 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 # Reset the RPATH for all the python .so files set buildBinPath ${build.dir}/bin set vtkLibPath ${prefix}/lib/${distname} set vtkSitePackage ${destroot}/${prefix}/lib/${python}/site-packages/vtk foreach f [glob ${vtkSitePackage}/*.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}" } } } } } Regards, Darren
_______________________________________________ macports-dev mailing list [email protected] http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev
