Daklu Posted December 18, 2010 Report Share Posted December 18, 2010 I have a few foundational reuse packages (such as a messaging library) that I use in almost all of my code, including when I'm writing other reuse code. These higher level packages will use the messaging library internally, but it is not exposed to clients. To avoid cross-linking my packages and potential version conflicts I want to include dependent packages as members of my new package's library. What I'd like is a pre-build script I could use in VIPM that would copy my reuse libraries from vi.lib to the project's directory, include them as private members of the project's library, and relink all the project source code to the new, private copies of the reuse code. Relinking needs to update the sub vis called as well as inheritance chains. So... as scripting ignorant as I am I have no idea how big a task this will be to implement or exactly what scripting nodes I should be looking at. The algorithm is mostly pretty straightforward: 1. Traverse the source code dependency trees. When I find a vi (or class) that depends on a reuse library, add the vi ref to a 'depends on' list and the reused vi ref to a 'depended on' list. 2. Iterate through the 'depended on' list, getting references to each unique top-level lvlib. 3. Copy the library's entire directory to the project directory.** 4. Add the reuse library copies to the current package's library. 5. Iterate through the 'depends on' list, replacing all instances of reuse library code with instances of the private copy. (**This might not work. I think it depends on when exactly VIPM calls the build script during the build process. I posted a question about it on JKI's forums.) Any tips or ideas on the easiest way to do this? Quote Link to comment
Black Pearl Posted December 18, 2010 Report Share Posted December 18, 2010 Ideas: * Just use the OpenG builder to create a source distribution. * Inside the OpenG builder there is a method used to relinke the vi's. * The OpenG builder prebuild script allows you to change the build specs before the actual build process, so you can add the additional files to the build spec. I guess that VIPM isn't doing it different. Felix Quote Link to comment
jgcode Posted December 18, 2010 Report Share Posted December 18, 2010 I have a few foundational reuse packages (such as a messaging library) that I use in almost all of my code, including when I'm writing other reuse code. These higher level packages will use the messaging library internally, but it is not exposed to clients. To avoid cross-linking my packages and potential version conflicts I want to include dependent packages as members of my new package's library. What I'd like is a pre-build script I could use in VIPM that would copy my reuse libraries from vi.lib to the project's directory, include them as private members of the project's library, and relink all the project source code to the new, private copies of the reuse code. Relinking needs to update the sub vis called as well as inheritance chains. So... as scripting ignorant as I am I have no idea how big a task this will be to implement or exactly what scripting nodes I should be looking at. The algorithm is mostly pretty straightforward: 1. Traverse the source code dependency trees. When I find a vi (or class) that depends on a reuse library, add the vi ref to a 'depends on' list and the reused vi ref to a 'depended on' list. 2. Iterate through the 'depended on' list, getting references to each unique top-level lvlib. 3. Copy the library's entire directory to the project directory.** 4. Add the reuse library copies to the current package's library. 5. Iterate through the 'depends on' list, replacing all instances of reuse library code with instances of the private copy. (**This might not work. I think it depends on when exactly VIPM calls the build script during the build process. I posted a question about it on JKI's forums.) Any tips or ideas on the easiest way to do this? [Cross-posted to JKI] I have posted this before I think but here is how I do it: Start with a LabVIEW Project Create a top level Project Library that is used to namespace my distribution Add a virtual folder to the LabVIEW Project called support Add all the reuse VIs that will be made private to it, normally done by dragging and dropping from the dependencies item in the LabVIEW Project NI Builder assign the support folder to a Project Library during the build process Run my build script that adds the support Project Library to top level Project Library Then makes the support Project Library a private member of its parent (top level Project Library) Now all the VIs in the support folder are private to the distribution and namespaced so they won't collide with the actual reuse VIs under <LabVIEW> Currently this workflow is for NI Builder + OGPB, but I am wanting to move it to VIPM 2010. I think it shouldn't be an issue, all I have to do is handle adding the support VIs to a Project Library as part of a script - all the rest I already have code for. But I am interested in anyones else's thoughts Quote Link to comment
Black Pearl Posted December 18, 2010 Report Share Posted December 18, 2010 * Inside the OpenG builder there is a method used to relinke the vi's. No. It's just saving the vi's with a new name. Must have been somewhere else I've seen this, propably it was the OpenG commander. Felix Quote Link to comment
Daklu Posted December 19, 2010 Author Report Share Posted December 19, 2010 I have posted this before I think but here is how I do it: Responded on JKI's thread, since that seems more appropriate for that aspect of the discussion. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.