Author: scotte
Date: 2006-06-28 16:38:41 -0400 (Wed, 28 Jun 2006)
New Revision: 62130

Added:
   trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionOptionsPanel.cs
   trunk/monodevelop/Extras/MonoDevelop.Autotools/templates/package.pc.template
Modified:
   trunk/monodevelop/Extras/MonoDevelop.Autotools/ChangeLog
   trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.am
   trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.cs
   
trunk/monodevelop/Extras/MonoDevelop.Autotools/MonoDevelop.Autotools.addin.xml
   trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionDeployer.cs
Log:
2006-06-28  Scott Ellington  <[EMAIL PROTECTED]> 

        * Makefile.cs: can append values to variables
        * SolutionDeployer.cs: implement pkgconfig stuff
        * MonoDevelop.Autotools.addin.xml: add option panel and store pref
        * templates/package.pc.template: template for pc file
        * Makefile.am: add new files
        * SolutionOptionsPanel.cs: new option panel


Modified: trunk/monodevelop/Extras/MonoDevelop.Autotools/ChangeLog
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Autotools/ChangeLog    2006-06-28 
20:07:25 UTC (rev 62129)
+++ trunk/monodevelop/Extras/MonoDevelop.Autotools/ChangeLog    2006-06-28 
20:38:41 UTC (rev 62130)
@@ -1,3 +1,12 @@
+2006-06-28  Scott Ellington  <[EMAIL PROTECTED]> 
+
+       * Makefile.cs: can append values to variables
+       * SolutionDeployer.cs: implement pkgconfig stuff
+       * MonoDevelop.Autotools.addin.xml: add option panel and store pref
+       * templates/package.pc.template: template for pc file
+       * Makefile.am: add new files
+       * SolutionOptionsPanel.cs: new option panel
+
 2006-06-28  Lluis Sanchez Gual  <[EMAIL PROTECTED]>
 
        * TarballTargetEditorWidget.cs: Added null check. Fix the build for

Modified: trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.am
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.am  2006-06-28 
20:07:25 UTC (rev 62129)
+++ trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.am  2006-06-28 
20:38:41 UTC (rev 62130)
@@ -24,6 +24,7 @@
        Set.cs                          \
        SimpleProjectMakefileHandler.cs \
        SolutionDeployer.cs     \
+       SolutionOptionsPanel.cs \
        SolutionMakefileHandler.cs      \
        TarballTargetEditorWidget.cs \
        TemplateEngine.cs
@@ -35,7 +36,8 @@
        templates/Makefile.include      \
        templates/autogen.sh.template   \
        templates/configure.ac.template \
-       templates/exe.wrapper.in.template
+       templates/exe.wrapper.in.template \
+       templates/package.pc.template
 
 DATA_FILE_BUILD = $(addprefix $(ADDIN_BUILD)/, $(DATA_FILES))
 

Modified: trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.cs
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.cs  2006-06-28 
20:07:25 UTC (rev 62129)
+++ trunk/monodevelop/Extras/MonoDevelop.Autotools/Makefile.cs  2006-06-28 
20:38:41 UTC (rev 62130)
@@ -45,6 +45,11 @@
                {
                        vars [key] = val;
                }
+
+               public void AppendToVariable ( string key, string val )
+               {
+                       vars [key] += " " + val;
+               }
                
                public void Append (string txt)
                {

Modified: 
trunk/monodevelop/Extras/MonoDevelop.Autotools/MonoDevelop.Autotools.addin.xml
===================================================================
--- 
trunk/monodevelop/Extras/MonoDevelop.Autotools/MonoDevelop.Autotools.addin.xml  
    2006-06-28 20:07:25 UTC (rev 62129)
+++ 
trunk/monodevelop/Extras/MonoDevelop.Autotools/MonoDevelop.Autotools.addin.xml  
    2006-06-28 20:38:41 UTC (rev 62130)
@@ -54,4 +54,15 @@
        <Extension path = "/SharpDevelop/Workbench/SerializableClasses">
                <DataType class = "MonoDevelop.Autotools.TarballDeployTarget" />
        </Extension>
+
+       <Extension path = 
"/SharpDevelop/Workbench/CombineOptions/GeneralOptions">
+               <DialogPanel id= "AutoTools" _label = "Autotools"
+                       class = "MonoDevelop.AutoTools.SolutionOptionsPanel" />
+       </Extension>
+
+       <Extension path = 
"/SharpDevelop/Workbench/Serialization/ExtendedProperties">
+               <ItemProperty class = "MonoDevelop.Projects.Combine"
+                       name = "MakePkgConfig" type = "System.Boolean" />
+       </Extension>
+       
 </AddIn>

Modified: trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionDeployer.cs
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionDeployer.cs  
2006-06-28 20:07:25 UTC (rev 62129)
+++ trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionDeployer.cs  
2006-06-28 20:38:41 UTC (rev 62130)
@@ -26,6 +26,7 @@
 using MonoDevelop.Core;
 using MonoDevelop.Core.Execution;
 using MonoDevelop.Core.ProgressMonitoring;
+using MonoDevelop.Projects.Serialization;
 
 using Mono.Unix.Native;
 
@@ -37,6 +38,8 @@
                string solution_name;
                string solution_version;
 
+               bool pkgconfig = false;
+               
                AutotoolsContext context;
 
                public bool HasGeneratedFiles ( Combine combine )
@@ -76,11 +79,17 @@
                                solution_name = combine.Name;
                                solution_version = 
AutotoolsContext.EscapeStringForAutoconf (combine.Version);
 
+                               // check if we need to create pkgconfig file
+                               object en_obj =  ((IExtendedDataItem) 
combine).ExtendedProperties ["MakePkgConfig"];
+                               if (en_obj== null) pkgconfig = false;
+                               else pkgconfig = (bool) en_obj;
+                               
                                Makefile makefile = handler.Deploy ( context, 
combine, monitor );
                                string path = solution_dir + "/Makefile";
                                context.AddAutoconfFile ( path );
 
                                CreateAutoGenDotSH ( monitor );
+                               CreatePkgConfigFile ( combine, monitor, 
makefile, context );
                                CreateConfigureDotAC ( combine, defaultConf, 
monitor );
                                CreateMakefileInclude ( monitor );
 
@@ -208,9 +217,9 @@
                        }
                        string vals = sb.ToString ();
 
-                       makefile.SetVariable ( "DLL_REFERENCES", vals );
-                       makefile.SetVariable ( "EXTRA_DIST", 
"$(DLL_REFERENCES)" );
-                       makefile.SetVariable ( "pkglib_DATA", 
"$(DLL_REFERENCES)" );
+                       makefile.AppendToVariable ( "DLL_REFERENCES", vals );
+                       makefile.AppendToVariable ( "EXTRA_DIST", 
"$(DLL_REFERENCES)" );
+                       makefile.AppendToVariable ( "pkglib_DATA", 
"$(DLL_REFERENCES)" );
                }
 
                void CreateAutoGenDotSH (IProgressMonitor monitor)
@@ -255,16 +264,19 @@
                                config_options.AppendFormat ( "         
{0}=yes, {0}=no)\n", ac_var );
                                config_options.AppendFormat ( 
"AM_CONDITIONAL({0}, test x${1} = xyes)\n", ac_var.ToUpper(), ac_var );
                                config_options.AppendFormat ( "if test 
\"x${0}\" = \"xyes\" ; then\n", ac_var );
+                               if ( pkgconfig ) config_options.AppendFormat ( 
"        {0}_CONFIG_LIBS='{1}'\n",
+                                               name.ToUpper(), GetAllLibs ( 
combine, config.Name ) );
                                config_options.Append ( "       
CONFIG_REQUESTED=\"yes\"\nfi\n" );
+                               if ( pkgconfig ) config_options.AppendFormat ( 
"AC_SUBST({0}_CONFIG_LIBS)\n", name.ToUpper() );
                        }
                        config_options.Append ( "if test -z 
\"$CONFIG_REQUESTED\" ; then\n" );
-                       config_options.AppendFormat ( "AM_CONDITIONAL({0}, 
true)\nfi\n", "ENABLE_"
+                       if ( pkgconfig ) config_options.AppendFormat ( "        
{0}_CONFIG_LIBS='{1}'\n",
+                                               defaultConf.ToUpper (), 
GetAllLibs ( combine, defaultConf ) );
+                       config_options.AppendFormat ( " AM_CONDITIONAL({0}, 
true)\nfi\n", "ENABLE_"
                                        + defaultConf.ToUpper()  );
 
-
                        templateEngine.Variables ["CONFIG_OPTIONS"] = 
config_options.ToString();
 
-
                        // build compiler checks
                        StringBuilder compiler_checks = new StringBuilder();
                        foreach (string compiler in context.GetCommandChecks () 
) 
@@ -312,6 +324,24 @@
                        writer.Close();
                }
 
+               string GetAllLibs ( Combine combine, string config )
+               {
+                       StringBuilder sb = new StringBuilder ();
+                       foreach ( CombineEntry ce in 
combine.GetAllBuildableEntries ( config ) )
+                       {
+                               Project p = ce as Project;
+                               if ( p == null ) continue;
+
+                               DotNetProjectConfiguration dnpc = 
p.Configurations [config] as DotNetProjectConfiguration;
+                               if ( dnpc == null ) continue;
+
+                               if ( dnpc.CompileTarget != 
CompileTarget.Library ) continue;
+                               
+                               sb.Append ( " -r:${pkglibdir}/" +  
Path.GetFileName ( dnpc.CompiledOutputName ) );
+                       }
+                       return sb.ToString ();
+               }
+               
                void CreateMakefileInclude (IProgressMonitor monitor)
                {
                        monitor.Log.WriteLine ( GettextCatalog.GetString 
("Creating Makefile.include") );
@@ -328,6 +358,48 @@
                        reader.Close();
                        writer.Close();
                }
+
+               void CreatePkgConfigFile ( Combine combine, IProgressMonitor 
monitor, Makefile mfile, AutotoolsContext context )
+               {
+                       if ( !pkgconfig ) return;
+
+                       monitor.Log.WriteLine ( GettextCatalog.GetString 
("Creating pkg-config file") );
+
+                       TemplateEngine templateEngine = new TemplateEngine();   
                
+
+                       templateEngine.Variables["NAME"] = solution_name;
+                       templateEngine.Variables["DESCRIPTION"] = 
combine.Description;
+                       templateEngine.Variables["VERSION"] = solution_version;
+                       
+                       StringBuilder pkgs = new StringBuilder ();
+                       foreach ( string pkg in context.GetRequiredPackages () )
+                               pkgs.AppendFormat ( "{0} ", pkg );
+                       templateEngine.Variables ["REQUIRES_PKGS"] = 
pkgs.ToString ();
+
+                       StringBuilder libs = new StringBuilder ();
+                       foreach ( IConfiguration config in 
combine.Configurations )
+                               libs.AppendFormat ( "@{0}_CONFIG_LIBS@ ", 
config.Name.ToUpper() );
+                       templateEngine.Variables ["LIBS"] = libs.ToString ();
+                       
+                       string fileName = solution_name.ToLower() + ".pc";
+                       string path = String.Format ( "{0}/{1}.in", 
solution_dir, fileName );
+
+                       StreamWriter writer = new StreamWriter( path );
+
+                       Stream stream = context.GetTemplateStream 
("package.pc.template");
+                       StreamReader reader = new StreamReader(stream);
+
+                       templateEngine.Process(reader, writer);
+
+                       reader.Close();
+                       writer.Close();
+                       
+                       context.AddAutoconfFile ( fileName );
+                       mfile.AppendToVariable ( "EXTRA_DIST", fileName + ".in" 
);
+                       mfile.SetVariable ( "pkgconfigdir", 
"$(libdir)/pkgconfig" );
+                       mfile.AppendToVariable ( "pkgconfig_DATA", fileName );
+                       mfile.AppendToVariable ( "DISTCLEANFILES", fileName );
+               }
        }
 }
 

Added: trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionOptionsPanel.cs
===================================================================
--- trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionOptionsPanel.cs      
2006-06-28 20:07:25 UTC (rev 62129)
+++ trunk/monodevelop/Extras/MonoDevelop.Autotools/SolutionOptionsPanel.cs      
2006-06-28 20:38:41 UTC (rev 62130)
@@ -0,0 +1,73 @@
+/*
+Copyright (c) 2006 Scott Ellington
+
+Permission is hereby granted, free of charge, to any person 
+obtaining a copy of this software and associated documentation 
+files (the "Software"), to deal in the Software without 
+restriction, including without limitation the rights to use, 
+copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the 
+Software is furnished to do so, subject to the following 
+conditions:
+
+The above copyright notice and this permission notice shall be 
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
+OTHER DEALINGS IN THE SOFTWARE. 
+*/
+
+using System;
+using Gtk;
+
+using MonoDevelop.Core;
+using MonoDevelop.Core.Gui.Dialogs;
+using MonoDevelop.Projects;
+using MonoDevelop.Projects.Serialization;
+using MonoDevelop.Ide.Gui;
+
+namespace MonoDevelop.AutoTools
+{
+       public class SolutionOptionsPanel : AbstractOptionPanel
+       {
+               CheckButton MakePkgConfigButton = new CheckButton();
+               
+               IExtendedDataItem item;
+               
+               public override void LoadPanelContents()
+               {
+                       VBox vbox = new VBox();
+                       this.Add(vbox);
+                       
+                       item = (IExtendedDataItem) 
IdeApp.ProjectOperations.CurrentOpenCombine;
+
+                       object en_obj =  item.ExtendedProperties 
["MakePkgConfig"];
+
+                       bool enabled = false;
+                       if (en_obj== null) 
+                       {
+                               item.ExtendedProperties["MakePkgConfig"] = 
false;
+                       }
+                       else enabled = (bool) en_obj;
+                       
+                       MakePkgConfigButton.Label = GettextCatalog.GetString 
("Create 'pkg-config' file");
+                       MakePkgConfigButton.Active = enabled;
+       
+                       vbox.PackStart (MakePkgConfigButton, false, false, 0);
+               }
+               
+               public override bool StorePanelContents()
+               {
+                       item.ExtendedProperties["MakePkgConfig"] = 
MakePkgConfigButton.Active;
+                       
+                       return true;
+               }
+       }
+
+}

Added: 
trunk/monodevelop/Extras/MonoDevelop.Autotools/templates/package.pc.template
===================================================================
--- 
trunk/monodevelop/Extras/MonoDevelop.Autotools/templates/package.pc.template    
    2006-06-28 20:07:25 UTC (rev 62129)
+++ 
trunk/monodevelop/Extras/MonoDevelop.Autotools/templates/package.pc.template    
    2006-06-28 20:38:41 UTC (rev 62130)
@@ -0,0 +1,10 @@
[EMAIL PROTECTED]@
+exec_prefix=${prefix}
[EMAIL PROTECTED]@/@PACKAGE@
+
+Name: %%NAME%%
+Description: %%DESCRIPTION%%
+Version: %%VERSION%%
+
+Requires: %%REQUIRES_PKGS%%
+Libs: %%LIBS%%

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to