[packages/kicad] - up to 20120119 (from FC)

arekm arekm at pld-linux.org
Sun Oct 21 18:13:02 CEST 2012


commit 74131d8463d7b89927c5ccf6f427c4d7022c5260
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Sun Oct 21 18:12:55 2012 +0200

    - up to 20120119 (from FC)

 ....12-boost-polygon-declare-gtlsort-earlier.patch |  11 +
 kicad-2011.07.12-fix-linking.patch                 |  10 +
 kicad-2012.01.19-cvpcb-preview.rev3303.patch       | 152 +++++
 kicad-2012.01.19-fix-bom-in-python.patch           |  17 +
 kicad-2012.01.19-fix-linking.patch                 |  11 +
 kicad-2012.01.19-fix-plotting-scale.patch          |  11 +
 ...012.01.19-move-up-junction-button.rev3371.patch |  21 +
 kicad-2012.01.19-pcb-calculation.rev3328.patch     |  11 +
 ...1.19-ps-plotting-width-correction.rev3342.patch | 740 +++++++++++++++++++++
 kicad-2012.01.19-real-version.patch                |  14 +
 kicad-2012.01.19-thermal-relief.rev3281.patch      |  13 +
 kicad-2012.01.19-undo-redo-auto.rev3297.patch      | 177 +++++
 kicad-bug-921553.patch                             |  76 +++
 kicad.desktop                                      |   9 -
 kicad.spec                                         | 202 +++++-
 pcbnew.desktop                                     |  11 +
 16 files changed, 1451 insertions(+), 35 deletions(-)
---
diff --git a/kicad.spec b/kicad.spec
index 8bea65f..bca21de 100644
--- a/kicad.spec
+++ b/kicad.spec
@@ -1,20 +1,46 @@
-%define	libver 1.0
-%define	docver 1.1
+# TODO:
+# - fix mimelnk installation
+#
+%define	ver	2012.01.19
+%define	verlong	%(echo %{ver} | tr -d .)
 Summary:	KiCad - is a GPL'd suite of programs for EDA
 Summary(pl.UTF-8):	KiCad - zestaw programów na licencji GPL zaliczany do kategorii EDA
 Name:		kicad
-Version:	20111228
-Release:	0.2
+Version:	%{verlong}
+Release:	0.1
 License:	GPL v2+
 Group:		X11/Applications
-Source0:	http://iut-tice.ujf-grenoble.fr/cao/%{name}_sources-2011-12-28-BZR3254-stable.zip
-# Source0-md5:	ac274cc60651e53d158773d4b0ae0788
-Source1:	http://downloads.sourceforge.net/kicad/%{name}-library-%{libver}.tar.bz2
-# Source1-md5:	9c91940aa5f5563bb86c52ff07e8f99a
-Source2:	http://downloads.sourceforge.net/kicad/%{name}-doc-%{docver}.tar.bz2
-# Source2-md5:	fcfbc94f675a19db51370e97b88803b1
-Source3:	%{name}.desktop
-URL:		http://kicad.sourceforge.net/
+
+# Source files created from upstream's bazaar repository
+# bzr export -r 3256 kicad-2012.01.19
+# bzr export -r 114 kicad-libraries-2012.01.19
+# bzr export -r 309 kicad-doc-2012.01.19
+
+Source0:	%{name}-%{ver}.tar.bz2
+Source1:	%{name}-doc-%{ver}.tar.bz2
+Source2:	%{name}-libraries-%{ver}.tar.bz2
+
+Source4:	%{name}-2010.05.09.x-kicad-pcbnew.desktop
+Source5:	pcbnew.desktop
+Source6:	%{name}-icons.tar.bz2
+Source7:	Epcos-MKT-1.0.tar.bz2
+
+Patch10:	%{name}-%{ver}-real-version.patch
+Patch11:	%{name}-2011.07.12-fix-linking.patch
+Patch12:	%{name}-2011.07.12-boost-polygon-declare-gtlsort-earlier.patch
+Patch13:	%{name}-%{ver}-fix-linking.patch
+Patch14:	%{name}-%{ver}-fix-bom-in-python.patch
+Patch15:	%{name}-bug-921553.patch
+
+Patch20:	%{name}-%{ver}-fix-plotting-scale.patch
+Patch21:	%{name}-%{ver}-move-up-junction-button.rev3371.patch
+Patch22:	%{name}-%{ver}-thermal-relief.rev3281.patch
+Patch23:	%{name}-%{ver}-undo-redo-auto.rev3297.patch
+Patch24:	%{name}-%{ver}-cvpcb-preview.rev3303.patch
+Patch25:	%{name}-%{ver}-pcb-calculation.rev3328.patch
+Patch26:	%{name}-%{ver}-ps-plotting-width-correction.rev3342.patch
+
+URL:		http://www.kicad-pcb.org/
 BuildRequires:	boost-devel
 BuildRequires:	cmake >= 2.6.4
 BuildRequires:	rpmbuild(macros) >= 1.600
@@ -45,13 +71,51 @@ programów:
 - gerbview - przeglądarka plików Gerber (dokumentów dla fotoplotera).
 
 %prep
-%setup -q  -n stable
+%setup -q -n %{name}-%{ver} -a 1 -a 2 -a 6 -a 7
+
+%patch10 -p0 -b .real-version
+%patch11 -p0 -b .fix-linking1
+%patch12 -p0 -b .gcc-4.7
+%patch13 -p0 -b .fix-linking2
+%patch14 -p1 -b .fix-bom-in-python
+%patch15 -p1 -b .fix-build
+
+%patch20 -p0 -b .fix-plotting-scale
+%patch21 -p0 -b .junction-button
+%patch22 -p0 -b .thermal-relief
+%patch23 -p1 -b .undo-redo
+%patch24 -p1 -b .cvpcb-preview
+%patch25 -p0 -b .pcb-calculation
+%patch26 -p1 -b .width-correction
+
+#kicad-doc.noarch: W: file-not-utf8 %{_docdir}/kicad/AUTHORS.txt
+iconv -f iso8859-1 -t utf-8 AUTHORS.txt > AUTHORS.conv && mv -f AUTHORS.conv AUTHORS.txt
 
 %if "%{_lib}" != "lib"
 	%{__sed} -i -e "s at lib/@%{_lib}/@g" CMakeLists.txt
 %endif
 
 %build
+# Add Epcos library
+cd Epcos-MKT-1.0
+cp -pR library ../%{name}-libraries-%{version}/
+cp -pR modules ../%{name}-libraries-%{version}/
+cd ..
+
+#
+# Symbols libraries
+#
+cd %{name}-libraries-%{ver}
+install -d build
+cd build
+%cmake \
+	-DKICAD_STABLE_VERSION=ON \
+	..
+
+%{__make} \
+	VERBOSE=1
+cd ../..
+
 install -d build
 cd build
 %cmake \
@@ -75,32 +139,118 @@ rm -rf $RPM_BUILD_ROOT
 	DESTDIR=$RPM_BUILD_ROOT \
 	PREFIX=$RPM_BUILD_ROOT%{_prefix}
 
-install -d $RPM_BUILD_ROOT%{_desktopdir}
-cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_desktopdir}/%{name}.desktop
-
-#for loc in $RPM_BUILD_ROOT%{_localedir}/*; do
-#	install -d $loc/LC_MESSAGES
-#	mv $loc/*.mo $loc/LC_MESSAGES
-#done
+%{__make} -C %{name}-libraries-%{ver}/build install \
+	KICAD_INTERNAT=$RPM_BUILD_ROOT%{_localedir} \
+	KICAD_PLUGINS=$RPM_BUILD_ROOT%{_libdir}/%{name}/plugins \
+	KICAD_DATA=$RPM_BUILD_ROOT%{_datadir}/%{name} \
+	KICAD_DOCS=$RPM_BUILD_ROOT%{_datadir}/%{name}/help \
+	DESTDIR=$RPM_BUILD_ROOT \
+	PREFIX=$RPM_BUILD_ROOT%{_prefix}
 
-for loc in $RPM_BUILD_ROOT%{_datadir}/%{name}/help/*; do
-	rm -rf $loc/docs_src
+# install localization
+cd %{name}-doc-%{ver}/internat
+for dir in bg ca cs de es fr hu it ko nl pl pt ru sl sv zh_CN
+do
+  install -m 644 -D ${dir}/%{name}.mo $RPM_BUILD_ROOT%{_localedir}/${dir}/LC_MESSAGES/%{name}.mo
 done
+cd ../..
+
+# install template
+install -d $RPM_BUILD_ROOT%{_datadir}/%{name}/template
+install template/%{name}.pro $RPM_BUILD_ROOT%{_datadir}/%{name}/template
+
+# install new mime type
+install -pm 644 %{SOURCE4} $RPM_BUILD_ROOT%{_datadir}/mimelnk/application/x-%{name}-pcbnew.desktop
+
+# install mimetype and application icons
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/32x32/mimetypes/application-x-kicad-eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/mimetypes/application-x-kicad-eeschema.png
+install -D -p %{name}-icons/resources/linux/mime/icons/hicolor/32x32/apps/eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/eeschema.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/24x24/mimetypes/application-x-kicad-eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/24x24/mimetypes/application-x-kicad-eeschema.png
+install -D -p %{name}-icons/resources/linux/mime/icons/hicolor/24x24/apps/eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/24x24/apps/eeschema.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/22x22/mimetypes/application-x-kicad-eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/22x22/mimetypes/application-x-kicad-eeschema.png
+install -D -p %{name}-icons/resources/linux/mime/icons/hicolor/22x22/apps/eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/22x22/apps/eeschema.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/16x16/mimetypes/application-x-kicad-eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/mimetypes/application-x-kicad-eeschema.png
+install -D -p %{name}-icons/resources/linux/mime/icons/hicolor/16x16/apps/eeschema.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/eeschema.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/32x32/mimetypes/application-x-kicad-pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/mimetypes/application-x-kicad-pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/32x32/apps/pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/24x24/mimetypes/application-x-kicad-pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/24x24/mimetypes/application-x-kicad-pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/24x24/apps/pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/24x24/apps/pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/22x22/mimetypes/application-x-kicad-pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/22x22/mimetypes/application-x-kicad-pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/22x22/apps/pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/22x22/apps/pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/16x16/mimetypes/application-x-kicad-pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/mimetypes/application-x-kicad-pcbnew.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/16x16/apps/pcbnew.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/pcbnew.png
+
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/32x32/apps/kicad.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/kicad.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/24x24/apps/kicad.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/24x24/apps/kicad.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/22x22/apps/kicad.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/22x22/apps/kicad.png
+install -pm 644 %{name}-icons/resources/linux/mime/icons/hicolor/16x16/apps/kicad.png \
+	$RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/kicad.png
+
+# Preparing for documentation pull-ups
+%{__rm} -f  %{name}-doc-%{ver}/doc/help/CMakeLists.txt
+%{__rm} -f  %{name}-doc-%{ver}/doc/help/makefile
+%{__rm} -f  %{name}-doc-%{ver}/doc/tutorials/CMakeLists.txt
+
+%{__cp} -pr %{name}-doc-%{ver}/doc/* $RPM_BUILD_ROOT%{_docdir}/%{name}
+%{__cp} -pr AUTHORS.txt CHANGELOG* $RPM_BUILD_ROOT%{_docdir}/%{name}
+
+%find_lang %{name}
+
+%post
+%update_mime_database
+%update_desktop_database_post
+%update_icon_cache hicolor
+%update_icon_cache scalable
 
-#%%find_lang %{name}
+%postun
+%update_mime_database
+%update_desktop_database_postun
+%update_icon_cache hicolor
+%update_icon_cache scalable
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
-#%%files -f %{name}.lang
-%files
+%files -f %{name}.lang
 %defattr(644,root,root,755)
 %doc AUTHORS.txt CHANGELOG.txt Documentation
+%attr(755,root,root) %{_bindir}/bitmap2component
 %attr(755,root,root) %{_bindir}/cvpcb
 %attr(755,root,root) %{_bindir}/eeschema
+%attr(755,root,root) %{_bindir}/freeroute.jnlp
 %attr(755,root,root) %{_bindir}/gerbview
+%attr(755,root,root) %{_bindir}/kicad
+%attr(755,root,root) %{_bindir}/pcb_calculator
+%attr(755,root,root) %{_bindir}/pcbnew
 %dir %{_libdir}/%{name}
 %dir %{_libdir}/%{name}/plugins
-#%%attr(755,root,root) %{_libdir}/%{name}/plugins/netlist_form_pads-pcb
+%{_libdir}/%{name}/plugins/netlist_form_pads-pcb.xsl
 %{_datadir}/%{name}
+%{_docdir}/%{name}
+%{_desktopdir}/eeschema.desktop
 %{_desktopdir}/%{name}.desktop
+%{_iconsdir}/hicolor/*x*/*/*.png
+%{_iconsdir}/hicolor/scalable/*/*.svg
+%{_datadir}/mime/packages/kicad.xml
+#%{_datadir}/mimelnk/application/x-kicad-pcbnew.desktop
+#%{_datadir}/mimelnk/application/x-kicad-project.desktop
+#%{_datadir}/mimelnk/application/x-kicad-schematic.desktop
diff --git a/kicad-2011.07.12-boost-polygon-declare-gtlsort-earlier.patch b/kicad-2011.07.12-boost-polygon-declare-gtlsort-earlier.patch
new file mode 100644
index 0000000..cc9595e
--- /dev/null
+++ b/kicad-2011.07.12-boost-polygon-declare-gtlsort-earlier.patch
@@ -0,0 +1,11 @@
+--- include/boost/polygon/polygon.hpp.orig	2011-07-12 19:16:41.000000000 +0200
++++ include/boost/polygon/polygon.hpp	2012-01-25 19:34:06.000000000 +0100
+@@ -24,6 +24,8 @@
+ #include "transform.hpp"
+ #include "detail/transform_detail.hpp"
+ 
++#include "detail/polygon_sort_adaptor.hpp"
++
+ //interval
+ #include "interval_data.hpp"
+ #include "interval_traits.hpp"
diff --git a/kicad-2011.07.12-fix-linking.patch b/kicad-2011.07.12-fix-linking.patch
new file mode 100644
index 0000000..85ad839
--- /dev/null
+++ b/kicad-2011.07.12-fix-linking.patch
@@ -0,0 +1,10 @@
+--- common/CMakeLists.txt.orig	2011-06-17 18:15:55.000000000 +0200
++++ common/CMakeLists.txt	2011-07-12 19:26:20.000000000 +0200
+@@ -67,6 +67,7 @@
+     wxwineda.cpp
+     xnode.cpp
+     zoom.cpp
++    ../pcbnew/class_drc_item.cpp
+ )
+ 
+ add_library(common ${COMMON_SRCS})
diff --git a/kicad-2012.01.19-cvpcb-preview.rev3303.patch b/kicad-2012.01.19-cvpcb-preview.rev3303.patch
new file mode 100644
index 0000000..e674a66
--- /dev/null
+++ b/kicad-2012.01.19-cvpcb-preview.rev3303.patch
@@ -0,0 +1,152 @@
+diff -ru kicad-2012.01.19-3.rev3256/cvpcb/cvframe.cpp kicad-2012.01.19-4.rev3256/cvpcb/cvframe.cpp
+--- kicad-2012.01.19-3.rev3256/cvpcb/cvframe.cpp	2012-01-22 17:23:37.000000000 +0100
++++ kicad-2012.01.19-4.rev3256/cvpcb/cvframe.cpp	2012-01-27 17:41:38.000000000 +0100
+@@ -525,6 +525,25 @@
+     }
+ 
+     m_FootprintList->SetFootprintFilteredList( &m_components[ selection ], m_footprints );
++
++    // Preview of the already assigned footprint.
++    // Find the footprint that was already choosen for this component and select it.
++    wxString module = *(&m_components[ selection ].m_Module);
++
++    for( int ii = 0; ii < m_FootprintList->GetCount(); ii++ )
++    {
++        wxString footprintName;
++        wxString msg = (*m_FootprintList->m_ActiveFootprintList)[ii];
++        msg.Trim( true );
++        msg.Trim( false );
++        footprintName = msg.AfterFirst( wxChar( ' ' ) );
++
++        if( module.Cmp( footprintName ) == 0 )
++            m_FootprintList->SetSelection( ii, true );
++        else
++            m_FootprintList->SetSelection( ii, false );
++    }
++
+     SendMessageToEESCHEMA();
+     DisplayStatus();
+ }
+@@ -660,13 +679,13 @@
+ 
+     selection = m_ListCmp->GetSelection();
+ 
+-	if ( selection < 0 )
+-		selection = 0;
++    if ( selection < 0 )
++        selection = 0;
+ 
+     if( &m_components[ selection ] == NULL )
+-    	return;
++        return;
+ 
+-	Component = &m_components[ selection ];
++    Component = &m_components[ selection ];
+ 
+     sprintf( cmd, "$PART: \"%s\"", TO_UTF8( Component->m_Reference ) );
+ 
+diff -ru kicad-2012.01.19-3.rev3256/pcbnew/basepcbframe.cpp kicad-2012.01.19-4.rev3256/pcbnew/basepcbframe.cpp
+--- kicad-2012.01.19-3.rev3256/pcbnew/basepcbframe.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-4.rev3256/pcbnew/basepcbframe.cpp	2012-01-27 17:44:46.000000000 +0100
+@@ -390,6 +390,8 @@
+     guide.SetIgnoreModulesOnCmp( ! m_Pcb->IsElementVisible( MOD_FR_VISIBLE ) );
+     guide.SetIgnorePadsOnBack( ! m_Pcb->IsElementVisible( PAD_BK_VISIBLE ) );
+     guide.SetIgnorePadsOnFront( ! m_Pcb->IsElementVisible( PAD_FR_VISIBLE ) );
++    guide.SetIgnoreModulesVals( ! m_Pcb->IsElementVisible( MOD_VALUES_VISIBLE ) );
++    guide.SetIgnoreModulesRefs( ! m_Pcb->IsElementVisible( MOD_REFERENCES_VISIBLE ) );
+ 
+     return guide;
+ }
+diff -ru kicad-2012.01.19-3.rev3256/pcbnew/collectors.cpp kicad-2012.01.19-4.rev3256/pcbnew/collectors.cpp
+--- kicad-2012.01.19-3.rev3256/pcbnew/collectors.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-4.rev3256/pcbnew/collectors.cpp	2012-01-27 17:45:33.000000000 +0100
+@@ -280,6 +280,12 @@
+ 
+             if( m_Guide->IgnoreMTextsOnCmp() && module->GetLayer()==LAYER_N_FRONT )
+                 goto exit;
++
++            if( m_Guide->IgnoreModulesVals() && item == module->m_Value )
++                goto exit;
++
++            if( m_Guide->IgnoreModulesRefs() && item == module->m_Reference )
++                goto exit;
+         }
+         break;
+ 
+diff -ru kicad-2012.01.19-3.rev3256/pcbnew/collectors.h kicad-2012.01.19-4.rev3256/pcbnew/collectors.h
+--- kicad-2012.01.19-3.rev3256/pcbnew/collectors.h	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-4.rev3256/pcbnew/collectors.h	2012-01-27 17:47:12.000000000 +0100
+@@ -176,6 +176,18 @@
+     }
+ 
+     /**
++     * Function IgnoreModulesVals
++     * @return bool - true if should ignore modules values.
++     */
++    virtual     bool IgnoreModulesVals() const = 0;
++
++    /**
++     * Function IgnoreModulesRefs
++     * @return bool - true if should ignore module references.
++     */
++    virtual     bool IgnoreModulesRefs() const = 0;
++
++    /**
+      * Function UseHitTesting
+      * @return bool - true if Inspect() should use BOARD_ITEM::HitTest()
+      *             or false if Inspect() should use BOARD_ITEM::BoundsTest().
+@@ -383,6 +395,8 @@
+     bool    m_IgnoreModulesOnCmp;
+     bool    m_IgnorePadsOnFront;
+     bool    m_IgnorePadsOnBack;
++    bool    m_IgnoreModulesVals;
++    bool    m_IgnoreModulesRefs;
+ 
+ public:
+ 
+@@ -419,6 +433,9 @@
+ 
+         m_IgnorePadsOnFront         = false;
+         m_IgnorePadsOnBack          = false;
++
++        m_IgnoreModulesVals         = false;
++        m_IgnoreModulesRefs         = false;
+     }
+ 
+ 
+@@ -550,6 +567,20 @@
+      */
+     bool IgnorePadsOnFront() const { return m_IgnorePadsOnFront; }
+     void SetIgnorePadsOnFront(bool ignore) { m_IgnorePadsOnFront = ignore; }
++
++    /**
++     * Function IgnoreModulesVals
++     * @return bool - true if should ignore modules values.
++     */
++    bool IgnoreModulesVals() const { return m_IgnoreModulesVals; }
++    void SetIgnoreModulesVals(bool ignore) { m_IgnoreModulesVals = ignore; }
++
++    /**
++     * Function IgnoreModulesRefs
++     * @return bool - true if should ignore modules references.
++     */
++    bool IgnoreModulesRefs() const { return m_IgnoreModulesRefs; }
++    void SetIgnoreModulesRefs(bool ignore) { m_IgnoreModulesRefs = ignore; }
+ };
+ 
+ 
+diff -ru kicad-2012.01.19-3.rev3256/TODO.txt kicad-2012.01.19-4.rev3256/TODO.txt
+--- kicad-2012.01.19-3.rev3256/TODO.txt	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-4.rev3256/TODO.txt	2012-01-27 17:39:15.000000000 +0100
+@@ -26,11 +26,6 @@
+   but is now in scripts/python/ky temporarily.
+ 
+ 
+-CvPCB
+------
+-* Preview of the already assigned footprint.
+-
+-
+ EESchema
+ --------
+ * Drag and drop between two EESchema windows.
diff --git a/kicad-2012.01.19-fix-bom-in-python.patch b/kicad-2012.01.19-fix-bom-in-python.patch
new file mode 100644
index 0000000..f9657be
--- /dev/null
+++ b/kicad-2012.01.19-fix-bom-in-python.patch
@@ -0,0 +1,17 @@
+diff -r -u old/scripts/bom-in-python/ky/ky.py new/scripts/bom-in-python/ky/ky.py
+--- old/scripts/bom-in-python/ky/ky.py	2012-01-21 19:01:36.000000000 +0100
++++ new/scripts/bom-in-python/ky/ky.py	2012-01-21 21:43:23.464126596 +0100
+@@ -298,11 +298,11 @@
+             self.libparts.append(part(self._curr_element))
+ 
+         # If this element is a net, add it to the nets list
+-        if self._curr_element.name = "net"
++        if self._curr_element.name == "net":
+             self.nets.append(self._curr_element)
+         
+         # If this element is a library, add it to the libraries list
+-        if self._curr_element.name = "library"
++        if self._curr_element.name == "library":
+             self.libraries.append(self._curr_element)
+                 
+         return self._curr_element        
diff --git a/kicad-2012.01.19-fix-linking.patch b/kicad-2012.01.19-fix-linking.patch
new file mode 100644
index 0000000..b16301c
--- /dev/null
+++ b/kicad-2012.01.19-fix-linking.patch
@@ -0,0 +1,11 @@
+--- pcb_calculator/CMakeLists.txt.orig	2012-01-22 17:23:40.000000000 +0100
++++ pcb_calculator/CMakeLists.txt	2012-01-23 20:52:58.000000000 +0100
+@@ -62,7 +62,7 @@
+         ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
+ endif(APPLE)
+ 
+-target_link_libraries( pcb_calculator common polygon bitmaps
++target_link_libraries( pcb_calculator common polygon kbool bitmaps
+                         ${wxWidgets_LIBRARIES}
+                         )
+ 
diff --git a/kicad-2012.01.19-fix-plotting-scale.patch b/kicad-2012.01.19-fix-plotting-scale.patch
new file mode 100644
index 0000000..3b8c319
--- /dev/null
+++ b/kicad-2012.01.19-fix-plotting-scale.patch
@@ -0,0 +1,11 @@
+--- pcbnew/plotps.cpp.orig	2012-01-22 17:23:38.000000000 +0100
++++ pcbnew/plotps.cpp	2012-01-23 22:00:58.000000000 +0100
+@@ -100,7 +100,7 @@
+     PS_PLOTTER* plotter = new PS_PLOTTER();
+     plotter->set_paper_size( SheetPS );
+     plotter->set_scale_adjust( g_PcbPlotOptions.m_FineScaleAdjustX,
+-                               g_PcbPlotOptions.m_FineScaleAdjustX );
++                               g_PcbPlotOptions.m_FineScaleAdjustY );
+     plotter->set_viewport( offset, scale, g_PcbPlotOptions.m_PlotMirror );
+     plotter->set_default_line_width( g_PcbPlotOptions.m_PlotLineWidth );
+     plotter->set_creator( wxT( "PCBNEW-PS" ) );
diff --git a/kicad-2012.01.19-move-up-junction-button.rev3371.patch b/kicad-2012.01.19-move-up-junction-button.rev3371.patch
new file mode 100644
index 0000000..295a2da
--- /dev/null
+++ b/kicad-2012.01.19-move-up-junction-button.rev3371.patch
@@ -0,0 +1,21 @@
+--- eeschema/tool_sch.cpp~	2012-01-26 23:08:12.000000000 +0100
++++ eeschema/tool_sch.cpp	2012-01-26 23:08:12.000000000 +0100
+@@ -187,15 +187,15 @@
+     m_VToolBar->AddTool( ID_NOCONN_BUTT, wxEmptyString, KiBitmap( noconn_xpm ),
+                          HELP_PLACE_NC_FLAG, wxITEM_CHECK );
+ 
++    m_VToolBar->AddTool( ID_JUNCTION_BUTT, wxEmptyString, KiBitmap( add_junction_xpm ),
++                         HELP_PLACE_JUNCTION, wxITEM_CHECK );
++
+     m_VToolBar->AddTool( ID_LABEL_BUTT, wxEmptyString, KiBitmap( add_line_label_xpm ),
+                          HELP_PLACE_NETLABEL, wxITEM_CHECK );
+ 
+     m_VToolBar->AddTool( ID_GLABEL_BUTT, wxEmptyString, KiBitmap( add_glabel_xpm ),
+                          HELP_PLACE_GLOBALLABEL, wxITEM_CHECK );
+ 
+-    m_VToolBar->AddTool( ID_JUNCTION_BUTT, wxEmptyString, KiBitmap( add_junction_xpm ),
+-                         HELP_PLACE_JUNCTION, wxITEM_CHECK );
+-
+     m_VToolBar->AddTool( ID_HIERLABEL_BUTT, wxEmptyString, KiBitmap( add_hierarchical_label_xpm ),
+                          HELP_PLACE_HIER_LABEL, wxITEM_CHECK );
+ 
diff --git a/kicad-2012.01.19-pcb-calculation.rev3328.patch b/kicad-2012.01.19-pcb-calculation.rev3328.patch
new file mode 100644
index 0000000..f2e9dde
--- /dev/null
+++ b/kicad-2012.01.19-pcb-calculation.rev3328.patch
@@ -0,0 +1,11 @@
+--- pcbnew/class_board.cpp.orig	2012-01-22 17:23:38.000000000 +0100
++++ pcbnew/class_board.cpp	2012-01-27 18:49:34.000000000 +0100
+@@ -1684,8 +1684,6 @@
+     int idxmax = aPadList.size()-1;
+ 
+     int delta = aPadList.size();
+-    if( delta & 1 && delta > 1 )
+-        delta += 1;
+ 
+     int idx = 0;        // Starting index is the beginning of list
+     while( delta )
diff --git a/kicad-2012.01.19-ps-plotting-width-correction.rev3342.patch b/kicad-2012.01.19-ps-plotting-width-correction.rev3342.patch
new file mode 100644
index 0000000..f832b7e
--- /dev/null
+++ b/kicad-2012.01.19-ps-plotting-width-correction.rev3342.patch
@@ -0,0 +1,740 @@
+diff -ru kicad-2012.01.19-4.rev3256/common/common_plotPS_functions.cpp kicad-2012.01.19-5.rev3256/common/common_plotPS_functions.cpp
+--- kicad-2012.01.19-4.rev3256/common/common_plotPS_functions.cpp	2012-01-22 17:23:37.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/common/common_plotPS_functions.cpp	2012-01-27 20:21:51.000000000 +0100
+@@ -489,16 +489,18 @@
+ void PS_PLOTTER::flash_pad_circle( wxPoint pos, int diametre,
+                                    GRTraceMode modetrace )
+ {
++    int current_line_width;
+     wxASSERT( output_file );
+ 
+     set_current_line_width( -1 );
+-    if( current_pen_width >= diametre )
+-        set_current_line_width( diametre );
++    current_line_width = get_current_line_width();
++    if( current_line_width > diametre )
++        current_line_width = diametre;
+ 
+     if( modetrace == FILLED )
+-        circle( pos, diametre - current_pen_width, FILLED_SHAPE );
++        circle( pos, diametre - current_pen_width, FILLED_SHAPE, current_line_width );
+     else
+-        circle( pos, diametre - current_pen_width, NO_FILL );
++        circle( pos, diametre - current_pen_width, NO_FILL, current_line_width );
+ 
+     set_current_line_width( -1 );
+ }
+diff -ru kicad-2012.01.19-4.rev3256/include/plot_common.h kicad-2012.01.19-5.rev3256/include/plot_common.h
+--- kicad-2012.01.19-4.rev3256/include/plot_common.h	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/include/plot_common.h	2012-01-27 20:59:30.000000000 +0100
+@@ -77,6 +77,20 @@
+     virtual void set_color( int color )  = 0;
+     virtual void set_dash( bool dashed ) = 0;
+ 
++    virtual int get_current_line_width()
++    {
++        return current_pen_width;
++    }
++
++    virtual void set_plot_width_adj( double width )
++    {
++    }
++
++    virtual double get_plot_width_adj()
++    {
++        return 0.;
++    }
++
+     virtual void set_creator( const wxString& _creator )
+     {
+         creator = _creator;
+@@ -350,6 +364,16 @@
+         plot_scale_adjX = scaleX;
+         plot_scale_adjY = scaleY;
+     }
++ 
++    virtual void set_plot_width_adj( double width )
++    {
++        plot_width_adj = width;
++    }
++    
++    virtual double get_plot_width_adj()
++    {
++        return plot_width_adj;
++    }
+ 
+ 
+     virtual void set_viewport( wxPoint aOffset, double aScale, bool aMirror );
+@@ -393,6 +417,7 @@
+ 
+ protected:
+     double plot_scale_adjX, plot_scale_adjY;
++    double plot_width_adj;
+ };
+ 
+ /* Class to handle a D_CODE when plotting a board : */
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/class_board.cpp kicad-2012.01.19-5.rev3256/pcbnew/class_board.cpp
+--- kicad-2012.01.19-4.rev3256/pcbnew/class_board.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/class_board.cpp	2012-01-27 20:25:02.000000000 +0100
+@@ -278,6 +278,21 @@
+ }
+ 
+ 
++int BOARD::GetSmallestClearanceValue()
++{
++    int clearance = m_NetClasses.GetDefault()->GetClearance();
++
++    //Read list of Net Classes
++    for( NETCLASSES::const_iterator nc = m_NetClasses.begin(); nc != m_NetClasses.end(); nc++ )
++    {
++        NETCLASS* netclass = nc->second;
++        clearance = MIN( clearance, netclass->GetClearance() );
++    }
++
++    return clearance;
++}
++
++
+ int BOARD::GetCurrentMicroViaSize()
+ {
+     NETCLASS* netclass = m_NetClasses.Find( m_CurrentNetClassName );
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/class_board.h kicad-2012.01.19-5.rev3256/pcbnew/class_board.h
+--- kicad-2012.01.19-4.rev3256/pcbnew/class_board.h	2012-01-22 17:23:39.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/class_board.h	2012-01-27 20:26:22.000000000 +0100
+@@ -761,6 +761,12 @@
+     int GetBiggestClearanceValue();
+ 
+     /**
++     * Function GetSmallestClearanceValue
++     * @return the smallest clearance value found in NetClasses list
++     */
++    int GetSmallestClearanceValue();
++
++    /**
+      * Function GetCurrentTrackWidth
+      * @return the current track width, according to the selected options
+      * ( using the default netclass value or a preset value )
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/dialogs/dialog_plot_base.cpp kicad-2012.01.19-5.rev3256/pcbnew/dialogs/dialog_plot_base.cpp
+--- kicad-2012.01.19-4.rev3256/pcbnew/dialogs/dialog_plot_base.cpp	2012-01-22 17:23:35.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/dialogs/dialog_plot_base.cpp	2012-01-27 20:31:44.000000000 +0100
+@@ -179,7 +179,6 @@
+ 	m_GerberOptionsSizer->Add( m_excludeEdgeLayerOpt, 0, wxTOP|wxRIGHT|wxLEFT, 2 );
+ 	
+ 	m_subtractMaskFromSilk = new wxCheckBox( this, wxID_ANY, _("Subtract soldermask from silkscreen"), wxDefaultPosition, wxDefaultSize, 0 );
+-	m_subtractMaskFromSilk->SetValue(true); 
+ 	m_subtractMaskFromSilk->SetToolTip( _("Remove silkscreen from areas without soldermask") );
+ 	
+ 	m_GerberOptionsSizer->Add( m_subtractMaskFromSilk, 0, wxTOP|wxRIGHT|wxLEFT, 2 );
+@@ -268,6 +267,20 @@
+ 	
+ 	bSizer17->Add( bSizer19, 1, wxEXPAND, 5 );
+ 	
++	wxBoxSizer* bSizer191;
++	bSizer191 = new wxBoxSizer( wxVERTICAL );
++	
++	m_textPSFineAdjustWidth = new wxStaticText( this, wxID_ANY, _("Width correction"), wxDefaultPosition, wxDefaultSize, 0 );
++	m_textPSFineAdjustWidth->Wrap( -1 );
++	bSizer191->Add( m_textPSFineAdjustWidth, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
++	
++	m_PSFineAdjustWidthOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
++	m_PSFineAdjustWidthOpt->SetToolTip( _("Set global width correction for exact width postscript output.\nThese width correction is intended to compensate tracks width and also pads and vias size errors.\nThe reasonable width correction value must be in a range of [-(MinTrackWidth-1), +(MinClearanceValue-1)] in decimils.") );
++	
++	bSizer191->Add( m_PSFineAdjustWidthOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
++	
++	bSizer17->Add( bSizer191, 1, wxEXPAND, 5 );
++	
+ 	m_PSOptionsSizer->Add( bSizer17, 1, wxEXPAND, 5 );
+ 	
+ 	m_plotPSNegativeOpt = new wxCheckBox( this, wxID_ANY, _("Negative plot"), wxDefaultPosition, wxDefaultSize, 0 );
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/dialogs/dialog_plot_base.fbp kicad-2012.01.19-5.rev3256/pcbnew/dialogs/dialog_plot_base.fbp
+--- kicad-2012.01.19-4.rev3256/pcbnew/dialogs/dialog_plot_base.fbp	2012-01-22 17:23:35.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/dialogs/dialog_plot_base.fbp	2012-01-27 20:42:20.000000000 +0100
+@@ -3416,6 +3416,189 @@
+                                                                 </object>
+                                                             </object>
+                                                         </object>
++                                                        <object class="sizeritem" expanded="1">
++                                                            <property name="border">5</property>
++                                                            <property name="flag">wxEXPAND</property>
++                                                            <property name="proportion">1</property>
++                                                            <object class="wxBoxSizer" expanded="1">
++                                                                <property name="minimum_size"></property>
++                                                                <property name="name">bSizer191</property>
++                                                                <property name="orient">wxVERTICAL</property>
++                                                                <property name="permission">none</property>
++                                                                <object class="sizeritem" expanded="1">
++                                                                    <property name="border">5</property>
++                                                                    <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
++                                                                    <property name="proportion">0</property>
++                                                                    <object class="wxStaticText" expanded="1">
++                                                                        <property name="BottomDockable">1</property>
++                                                                        <property name="LeftDockable">1</property>
++                                                                        <property name="RightDockable">1</property>
++                                                                        <property name="TopDockable">1</property>
++                                                                        <property name="aui_name"></property>
++                                                                        <property name="bg"></property>
++                                                                        <property name="caption"></property>
++                                                                        <property name="caption_visible">1</property>
++                                                                        <property name="center_pane">0</property>
++                                                                        <property name="close_button">1</property>
++                                                                        <property name="context_help"></property>
++                                                                        <property name="context_menu">1</property>
++                                                                        <property name="default_pane">0</property>
++                                                                        <property name="dock">Dock</property>
++                                                                        <property name="dock_fixed">0</property>
++                                                                        <property name="docking">Left</property>
++                                                                        <property name="enabled">1</property>
++                                                                        <property name="fg"></property>
++                                                                        <property name="floatable">1</property>
++                                                                        <property name="font"></property>
++                                                                        <property name="gripper">0</property>
++                                                                        <property name="hidden">0</property>
++                                                                        <property name="id">wxID_ANY</property>
++                                                                        <property name="label">Width correction</property>
++                                                                        <property name="layer"></property>
++                                                                        <property name="maximize_button">0</property>
++                                                                        <property name="maximum_size"></property>
++                                                                        <property name="minimize_button">0</property>
++                                                                        <property name="minimum_size"></property>
++                                                                        <property name="moveable">1</property>
++                                                                        <property name="name">m_textPSFineAdjustWidth</property>
++                                                                        <property name="pane_border">1</property>
++                                                                        <property name="pane_position"></property>
++                                                                        <property name="pane_size"></property>
++                                                                        <property name="permission">protected</property>
++                                                                        <property name="pin_button">1</property>
++                                                                        <property name="pos"></property>
++                                                                        <property name="position"></property>
++                                                                        <property name="resize">Resizable</property>
++                                                                        <property name="row"></property>
++                                                                        <property name="show">1</property>
++                                                                        <property name="size"></property>
++                                                                        <property name="style"></property>
++                                                                        <property name="subclass"></property>
++                                                                        <property name="toolbar_pane">0</property>
++                                                                        <property name="tooltip"></property>
++                                                                        <property name="validator_data_type"></property>
++                                                                        <property name="validator_style">wxFILTER_NONE</property>
++                                                                        <property name="validator_type">wxDefaultValidator</property>
++                                                                        <property name="validator_variable"></property>
++                                                                        <property name="window_extra_style"></property>
++                                                                        <property name="window_name"></property>
++                                                                        <property name="window_style"></property>
++                                                                        <property name="wrap">-1</property>
++                                                                        <event name="OnChar"></event>
++                                                                        <event name="OnEnterWindow"></event>
++                                                                        <event name="OnEraseBackground"></event>
++                                                                        <event name="OnKeyDown"></event>
++                                                                        <event name="OnKeyUp"></event>
++                                                                        <event name="OnKillFocus"></event>
++                                                                        <event name="OnLeaveWindow"></event>
++                                                                        <event name="OnLeftDClick"></event>
++                                                                        <event name="OnLeftDown"></event>
++                                                                        <event name="OnLeftUp"></event>
++                                                                        <event name="OnMiddleDClick"></event>
++                                                                        <event name="OnMiddleDown"></event>
++                                                                        <event name="OnMiddleUp"></event>
++                                                                        <event name="OnMotion"></event>
++                                                                        <event name="OnMouseEvents"></event>
++                                                                        <event name="OnMouseWheel"></event>
++                                                                        <event name="OnPaint"></event>
++                                                                        <event name="OnRightDClick"></event>
++                                                                        <event name="OnRightDown"></event>
++                                                                        <event name="OnRightUp"></event>
++                                                                        <event name="OnSetFocus"></event>
++                                                                        <event name="OnSize"></event>
++                                                                        <event name="OnUpdateUI"></event>
++                                                                    </object>
++                                                                </object>
++                                                                <object class="sizeritem" expanded="1">
++                                                                    <property name="border">5</property>
++                                                                    <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
++                                                                    <property name="proportion">0</property>
++                                                                    <object class="wxTextCtrl" expanded="1">
++                                                                        <property name="BottomDockable">1</property>
++                                                                        <property name="LeftDockable">1</property>
++                                                                        <property name="RightDockable">1</property>
++                                                                        <property name="TopDockable">1</property>
++                                                                        <property name="aui_name"></property>
++                                                                        <property name="bg"></property>
++                                                                        <property name="caption"></property>
++                                                                        <property name="caption_visible">1</property>
++                                                                        <property name="center_pane">0</property>
++                                                                        <property name="close_button">1</property>
++                                                                        <property name="context_help"></property>
++                                                                        <property name="context_menu">1</property>
++                                                                        <property name="default_pane">0</property>
++                                                                        <property name="dock">Dock</property>
++                                                                        <property name="dock_fixed">0</property>
++                                                                        <property name="docking">Left</property>
++                                                                        <property name="enabled">1</property>
++                                                                        <property name="fg"></property>
++                                                                        <property name="floatable">1</property>
++                                                                        <property name="font"></property>
++                                                                        <property name="gripper">0</property>
++                                                                        <property name="hidden">0</property>
++                                                                        <property name="id">wxID_ANY</property>
++                                                                        <property name="layer"></property>
++                                                                        <property name="maximize_button">0</property>
++                                                                        <property name="maximum_size"></property>
++                                                                        <property name="maxlength">0</property>
++                                                                        <property name="minimize_button">0</property>
++                                                                        <property name="minimum_size"></property>
++                                                                        <property name="moveable">1</property>
++                                                                        <property name="name">m_PSFineAdjustWidthOpt</property>
++                                                                        <property name="pane_border">1</property>
++                                                                        <property name="pane_position"></property>
++                                                                        <property name="pane_size"></property>
++                                                                        <property name="permission">protected</property>
++                                                                        <property name="pin_button">1</property>
++                                                                        <property name="pos"></property>
++                                                                        <property name="position"></property>
++                                                                        <property name="resize">Resizable</property>
++                                                                        <property name="row"></property>
++                                                                        <property name="show">1</property>
++                                                                        <property name="size"></property>
++                                                                        <property name="style"></property>
++                                                                        <property name="subclass"></property>
++                                                                        <property name="toolbar_pane">0</property>
++                                                                        <property name="tooltip">Set global width correction for exact width postscript output.&#x0A;These width correction is intended to compensate tracks width and also pads and vias size errors.&#x0A;The reasonable width correction value must be in a range of [-(MinTrackWidth-1), +(MinClearanceValue-1)] in decimils.</property>
++                                                                        <property name="validator_data_type"></property>
++                                                                        <property name="validator_style">wxFILTER_NONE</property>
++                                                                        <property name="validator_type">wxDefaultValidator</property>
++                                                                        <property name="validator_variable"></property>
++                                                                        <property name="value"></property>
++                                                                        <property name="window_extra_style"></property>
++                                                                        <property name="window_name"></property>
++                                                                        <property name="window_style"></property>
++                                                                        <event name="OnChar"></event>
++                                                                        <event name="OnEnterWindow"></event>
++                                                                        <event name="OnEraseBackground"></event>
++                                                                        <event name="OnKeyDown"></event>
++                                                                        <event name="OnKeyUp"></event>
++                                                                        <event name="OnKillFocus"></event>
++                                                                        <event name="OnLeaveWindow"></event>
++                                                                        <event name="OnLeftDClick"></event>
++                                                                        <event name="OnLeftDown"></event>
++                                                                        <event name="OnLeftUp"></event>
++                                                                        <event name="OnMiddleDClick"></event>
++                                                                        <event name="OnMiddleDown"></event>
++                                                                        <event name="OnMiddleUp"></event>
++                                                                        <event name="OnMotion"></event>
++                                                                        <event name="OnMouseEvents"></event>
++                                                                        <event name="OnMouseWheel"></event>
++                                                                        <event name="OnPaint"></event>
++                                                                        <event name="OnRightDClick"></event>
++                                                                        <event name="OnRightDown"></event>
++                                                                        <event name="OnRightUp"></event>
++                                                                        <event name="OnSetFocus"></event>
++                                                                        <event name="OnSize"></event>
++                                                                        <event name="OnText"></event>
++                                                                        <event name="OnTextEnter"></event>
++                                                                        <event name="OnTextMaxLen"></event>
++                                                                        <event name="OnTextURL"></event>
++                                                                        <event name="OnUpdateUI"></event>
++                                                                    </object>
++                                                                </object>
++                                                            </object>
++                                                        </object>
+                                                     </object>
+                                                 </object>
+                                                 <object class="sizeritem" expanded="0">
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/dialogs/dialog_plot_base.h kicad-2012.01.19-5.rev3256/pcbnew/dialogs/dialog_plot_base.h
+--- kicad-2012.01.19-4.rev3256/pcbnew/dialogs/dialog_plot_base.h	2012-01-22 17:23:35.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/dialogs/dialog_plot_base.h	2012-01-27 20:43:04.000000000 +0100
+@@ -85,6 +85,8 @@
+ 		wxTextCtrl* m_fineAdjustXscaleOpt;
+ 		wxStaticText* m_staticText8;
+ 		wxTextCtrl* m_fineAdjustYscaleOpt;
++		wxStaticText* m_textPSFineAdjustWidth;
++		wxTextCtrl* m_PSFineAdjustWidthOpt;
+ 		wxCheckBox* m_plotPSNegativeOpt;
+ 		wxCheckBox* m_forcePSA4OutputOpt;
+ 		wxTextCtrl* m_messagesBox;
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/pcbplot.cpp kicad-2012.01.19-5.rev3256/pcbnew/pcbplot.cpp
+--- kicad-2012.01.19-4.rev3256/pcbnew/pcbplot.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/pcbplot.cpp	2012-01-28 15:27:08.000000000 +0100
+@@ -24,6 +24,7 @@
+ /* Keywords to r/w options in m_Config */
+ #define CONFIG_XFINESCALE_ADJ    wxT( "PlotXFineScaleAdj" )
+ #define CONFIG_YFINESCALE_ADJ    wxT( "PlotYFineScaleAdj" )
++#define CONFIG_PS_FINEWIDTH_ADJ  wxT( "PSPlotFineWidthAdj" )
+ 
+ // Define min and max reasonable values for print scale
+ #define MIN_SCALE 0.01
+@@ -59,10 +60,13 @@
+ private:
+     PCB_EDIT_FRAME*  m_Parent;
+     wxConfig*        m_Config;
+-    std::vector<int> layerList;         // List to hold CheckListBox layer numbers
++    std::vector<int> layerList;               // List to hold CheckListBox layer numbers
+     double           m_XScaleAdjust;
+     double           m_YScaleAdjust;
+-    static wxPoint   prevPosition;      // Dialog position & size
++    double           m_PSWidthAdjust;         // Global width correction for exact width postscript output.
++    double           m_WidthAdjustMinValue;   // Global width correction
++    double           m_WidthAdjustMaxValue;   // margins.
++    static wxPoint   prevPosition;            // Dialog position & size
+     static wxSize    prevSize;
+ 
+ public:
+@@ -114,6 +118,12 @@
+ 
+     m_Config->Read( CONFIG_XFINESCALE_ADJ, &m_XScaleAdjust );
+     m_Config->Read( CONFIG_YFINESCALE_ADJ, &m_YScaleAdjust );
++    m_Config->Read( CONFIG_PS_FINEWIDTH_ADJ, &m_PSWidthAdjust);
++    
++    // The reasonable width correction value must be in a range of
++    // [-(MinTrackWidth-1), +(MinClearanceValue-1)] decimils.
++    m_WidthAdjustMinValue = -(board->GetBoardDesignSettings()->m_TrackMinWidth - 1);
++    m_WidthAdjustMaxValue = board->GetSmallestClearanceValue() - 1;
+ 
+     m_plotFormatOpt->SetSelection( g_PcbPlotOptions.GetPlotFormat() );
+ 
+@@ -135,6 +145,12 @@
+     msg = ReturnStringFromValue( g_UserUnit, g_PcbPlotOptions.GetPlotLineWidth(),
+                                  PCB_INTERNAL_UNIT );
+     m_linesWidth->AppendText( msg );
++    
++    // Set units for PS global width correction.
++    AddUnitSymbol( *m_textPSFineAdjustWidth, g_UserUnit );
++    
++    // Set units for PS global width correction.
++    AddUnitSymbol( *m_textPSFineAdjustWidth, g_UserUnit );
+ 
+     m_useAuxOriginCheckBox->SetValue( g_PcbPlotOptions.GetUseAuxOrigin() );
+ 
+@@ -148,6 +164,13 @@
+ 
+     msg.Printf( wxT( "%f" ), m_YScaleAdjust );
+     m_fineAdjustYscaleOpt->AppendText( msg );
++    
++    // Test for a reasonable PS width correction value. Set to 0 if problem.
++    if( m_PSWidthAdjust < m_WidthAdjustMinValue || m_PSWidthAdjust > m_WidthAdjustMaxValue )
++        m_PSWidthAdjust = 0.;
++
++    msg.Printf( wxT( "%f" ), To_User_Unit( g_UserUnit, m_PSWidthAdjust, PCB_INTERNAL_UNIT ) );
++    m_PSFineAdjustWidthOpt->AppendText( msg );
+ 
+     m_plotPSNegativeOpt->SetValue( g_PcbPlotOptions.m_PlotPSNegative );
+     m_forcePSA4OutputOpt->SetValue( g_PcbPlotOptions.GetPsA4Output() );
+@@ -282,16 +305,16 @@
+ 
+     wxFileName dirName = wxFileName::DirName( dirDialog.GetPath() );
+ 
+-    wxMessageDialog dialog( this, wxT( "Use a relative path? "),
+-                            wxT( "Plot Output Directory" ),
++    wxMessageDialog dialog( this, _( "Use a relative path? "),
++                            _( "Plot Output Directory" ),
+                             wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT );
+ 
+     if( dialog.ShowModal() == wxID_YES ) {
+         wxString boardFilePath = ( (wxFileName) m_Parent->GetScreen()->GetFileName()).GetPath();
+ 
+         if( !dirName.MakeRelativeTo( boardFilePath ) )
+-            wxMessageBox( wxT( "Cannot make path relative (target volume different from board file volume)!" ),
+-                          wxT( "Plot Output Directory" ), wxICON_ERROR );
++            wxMessageBox( _( "Cannot make path relative (target volume different from board file volume)!" ),
++                          _( "Plot Output Directory" ), wxOK | wxICON_ERROR );
+     }
+ 
+     m_outputDirectoryName->SetValue( dirName.GetFullPath() );
+@@ -319,6 +342,7 @@
+         m_scaleOpt->Enable( true );
+         m_fineAdjustXscaleOpt->Enable( true );
+         m_fineAdjustYscaleOpt->Enable( true );
++        m_PSFineAdjustWidthOpt->Enable( true );
+         m_plotPSNegativeOpt->Enable( true );
+         m_PlotOptionsSizer->Hide( m_GerberOptionsSizer );
+         m_PlotOptionsSizer->Hide( m_HPGLOptionsSizer );
+@@ -345,6 +369,7 @@
+         m_scaleOpt->Enable( false );
+         m_fineAdjustXscaleOpt->Enable( false );
+         m_fineAdjustYscaleOpt->Enable( false );
++        m_PSFineAdjustWidthOpt->Enable( false );
+         m_plotPSNegativeOpt->SetValue( false );
+         m_plotPSNegativeOpt->Enable( false );
+         m_PlotOptionsSizer->Show( m_GerberOptionsSizer );
+@@ -370,6 +395,7 @@
+         m_scaleOpt->Enable( true );
+         m_fineAdjustXscaleOpt->Enable( false );
+         m_fineAdjustYscaleOpt->Enable( false );
++        m_PSFineAdjustWidthOpt->Enable( false );
+         m_plotPSNegativeOpt->SetValue( false );
+         m_plotPSNegativeOpt->Enable( false );
+         m_PlotOptionsSizer->Hide( m_GerberOptionsSizer );
+@@ -397,6 +423,7 @@
+         m_scaleOpt->SetSelection( 1 );
+         m_fineAdjustXscaleOpt->Enable( false );
+         m_fineAdjustYscaleOpt->Enable( false );
++        m_PSFineAdjustWidthOpt->Enable( false );
+         m_plotPSNegativeOpt->SetValue( false );
+         m_plotPSNegativeOpt->Enable( false );
+         m_PlotOptionsSizer->Hide( m_GerberOptionsSizer );
+@@ -447,7 +474,7 @@
+     {
+         msg = ReturnStringFromValue( g_UserUnit, tempOptions.GetHpglPenDiameter(), UNITS_MILS );
+         m_HPGLPenSizeOpt->SetValue( msg );
+-        msg.Printf( wxT( "HPGL pen size constrained!\n" ) );
++        msg.Printf( _( "HPGL pen size constrained!\n" ) );
+         m_messagesBox->AppendText( msg );
+     }
+ 
+@@ -459,7 +486,7 @@
+     {
+         msg = ReturnStringFromValue( UNSCALED_UNITS, tempOptions.GetHpglPenSpeed(), 1 );
+         m_HPGLPenSpeedOpt->SetValue( msg );
+-        msg.Printf( wxT( "HPGL pen speed constrained!\n" ) );
++        msg.Printf( _( "HPGL pen speed constrained!\n" ) );
+         m_messagesBox->AppendText( msg );
+     }
+ 
+@@ -471,7 +498,7 @@
+     {
+         msg = ReturnStringFromValue( g_UserUnit, tempOptions.GetHpglPenOverlay(), UNITS_MILS );
+         m_HPGLPenOverlayOpt->SetValue( msg );
+-        msg.Printf( wxT( "HPGL pen overlay constrained!\n" ) );
++        msg.Printf( _( "HPGL pen overlay constrained!\n" ) );
+         m_messagesBox->AppendText( msg );
+     }
+ 
+@@ -484,7 +511,7 @@
+         msg = ReturnStringFromValue( g_UserUnit, tempOptions.GetPlotLineWidth(),
+                                      PCB_INTERNAL_UNIT );
+         m_linesWidth->SetValue( msg );
+-        msg.Printf( wxT( "Default linewidth constrained!\n" ) );
++        msg.Printf( _( "Default linewidth constrained!\n" ) );
+         m_messagesBox->AppendText( msg );
+     }
+ 
+@@ -497,7 +524,7 @@
+     {
+         msg.Printf( wxT( "%f" ), m_XScaleAdjust );
+         m_fineAdjustXscaleOpt->SetValue( msg );
+-        msg.Printf( wxT( "X scale constrained!\n" ) );
++        msg.Printf( _( "X scale constrained!\n" ) );
+         m_messagesBox->AppendText( msg );
+     }
+ 
+@@ -511,10 +538,28 @@
+     {
+         msg.Printf( wxT( "%f" ), m_YScaleAdjust );
+         m_fineAdjustYscaleOpt->SetValue( msg );
+-        msg.Printf( wxT( "Y scale constrained!\n" ) );
++        msg.Printf( _( "Y scale constrained!\n" ) );
++        m_messagesBox->AppendText( msg );
++    }
++    
++    // PS Width correction
++    msg = m_PSFineAdjustWidthOpt->GetValue();
++    tmpDouble = ReturnValueFromString( g_UserUnit, msg, PCB_INTERNAL_UNIT );
++
++    if( !setDouble( &m_PSWidthAdjust, tmpDouble, m_WidthAdjustMinValue, m_WidthAdjustMaxValue ) )
++    {
++        msg = ReturnStringFromValue( g_UserUnit, m_PSWidthAdjust, PCB_INTERNAL_UNIT );
++        m_PSFineAdjustWidthOpt->SetValue( msg );
++        msg.Printf( _( "Width correction constrained!\nThe reasonable width correction value must be in a range of [%+f; %+f]" ),
++                    To_User_Unit( g_UserUnit, m_WidthAdjustMinValue, PCB_INTERNAL_UNIT ),
++                    To_User_Unit( g_UserUnit, m_WidthAdjustMaxValue, PCB_INTERNAL_UNIT ) );
++        msg += ( g_UserUnit == INCHES )? _(" (\")") : _(" (mm)");
++        msg += _( " for current design rules!\n" );
+         m_messagesBox->AppendText( msg );
+     }
+ 
++    m_Config->Write( CONFIG_PS_FINEWIDTH_ADJ, m_PSWidthAdjust );
++
+     m_Config->Write( CONFIG_YFINESCALE_ADJ, m_YScaleAdjust );
+ 
+     tempOptions.SetUseGerberExtensions( m_useGerberExtensions->GetValue() );
+@@ -565,10 +610,10 @@
+     if( !outputDir.MakeAbsolute( boardFilePath ) )
+     {
+         wxString msg;
+-        msg.Printf( wxT( " Cannot make %s absolute with respect to %s!" ),
++        msg.Printf( _( " Cannot make %s absolute with respect to %s!" ),
+                     GetChars( outputDir.GetPath() ),
+                     GetChars( boardFilePath ) );
+-        wxMessageBox( msg, wxT( "Plot" ), wxICON_ERROR );
++        wxMessageBox( msg, _( "Plot" ), wxOK | wxICON_ERROR );
+         return;
+     }
+ 
+@@ -577,12 +622,13 @@
+         if( wxMkdir( outputDir.GetPath() ) )
+         {
+             wxString msg;
+-            msg.Printf( wxT( "Directory %s created.\n" ), GetChars( outputDir.GetPath() ) );
++            msg.Printf( _( "Directory %s created.\n" ), GetChars( outputDir.GetPath() ) );
+             m_messagesBox->AppendText( msg );
+         }
+         else
+         {
+-            wxMessageBox( wxT( "Cannot create output directory!" ), wxT( "Plot" ), wxICON_ERROR );
++            wxMessageBox( _( "Cannot create output directory!" ),
++                               _( "Plot" ), wxOK | wxICON_ERROR );
+             return;
+         }
+     }
+@@ -623,6 +669,9 @@
+     if( m_fineAdjustYscaleOpt->IsEnabled() && m_YScaleAdjust != 0.0 )
+         g_PcbPlotOptions.m_FineScaleAdjustY = m_YScaleAdjust;
+ 
++    if( m_PSFineAdjustWidthOpt->IsEnabled() )
++        g_PcbPlotOptions.m_FineWidthAdjust = m_PSWidthAdjust;
++
+     switch( g_PcbPlotOptions.GetPlotFormat() )
+     {
+     case PLOT_FORMAT_POST:
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/pcb_plot_params.cpp kicad-2012.01.19-5.rev3256/pcbnew/pcb_plot_params.cpp
+--- kicad-2012.01.19-4.rev3256/pcbnew/pcb_plot_params.cpp	2012-01-22 17:23:42.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/pcb_plot_params.cpp	2012-01-27 20:44:50.000000000 +0100
+@@ -102,6 +102,7 @@
+     scaleSelection         = 1;
+     m_FineScaleAdjustX     = 1.0;
+     m_FineScaleAdjustY     = 1.0;
++    m_FineWidthAdjust      = 0.;
+     outputDirectory        = wxT( "" );
+ }
+ 
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/pcb_plot_params.h kicad-2012.01.19-5.rev3256/pcbnew/pcb_plot_params.h
+--- kicad-2012.01.19-4.rev3256/pcbnew/pcb_plot_params.h	2012-01-22 17:23:42.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/pcb_plot_params.h	2012-01-27 20:45:42.000000000 +0100
+@@ -86,6 +86,8 @@
+     // Only X and Y dimensions are adjusted: circles are plotted as circle, even if X and Y fine scale differ.
+     double      m_FineScaleAdjustX;     // fine scale adjust X axis
+     double      m_FineScaleAdjustY;     // dine scale adjust Y axis
++    // These width factor is intended to compensate plotters (and mainly printers) line width error.
++    double      m_FineWidthAdjust;
+ 
+ private:
+     long        layerSelection;
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/plotps.cpp kicad-2012.01.19-5.rev3256/pcbnew/plotps.cpp
+--- kicad-2012.01.19-4.rev3256/pcbnew/plotps.cpp	2012-01-27 14:42:34.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/plotps.cpp	2012-01-27 20:58:11.000000000 +0100
+@@ -101,6 +101,7 @@
+     plotter->set_paper_size( SheetPS );
+     plotter->set_scale_adjust( g_PcbPlotOptions.m_FineScaleAdjustX,
+                                g_PcbPlotOptions.m_FineScaleAdjustY );
++    plotter->set_plot_width_adj( g_PcbPlotOptions.m_FineWidthAdjust );
+     plotter->set_viewport( offset, scale, g_PcbPlotOptions.m_PlotMirror );
+     plotter->set_default_line_width( g_PcbPlotOptions.m_PlotLineWidth );
+     plotter->set_creator( wxT( "PCBNEW-PS" ) );
+diff -ru kicad-2012.01.19-4.rev3256/pcbnew/plot_rtn.cpp kicad-2012.01.19-5.rev3256/pcbnew/plot_rtn.cpp
+--- kicad-2012.01.19-4.rev3256/pcbnew/plot_rtn.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-5.rev3256/pcbnew/plot_rtn.cpp	2012-01-27 20:57:10.000000000 +0100
+@@ -32,6 +32,12 @@
+ static void PlotTextModule( PLOTTER* plotter, TEXTE_MODULE* pt_texte,
+                             GRTraceMode trace_mode );
+ 
++static int doIntValueFitToBand( int aInt, int aMin, int aMax )
++{
++    if( aInt < aMin ) return aMin;
++    if( aInt > aMax ) return aMax;
++    return aInt;
++}   
+ 
+ /* Creates the plot for silkscreen layers
+  */
+@@ -826,6 +832,12 @@
+             shape_pos = pad->ReturnShapePos();
+             pos = shape_pos;
+             wxSize margin;
++            double width_adj = 0;
++            
++            if( aLayerMask & ALL_CU_LAYERS )
++            {
++                width_adj =  aPlotter->get_plot_width_adj();
++            }
+ 
+             switch( aLayerMask &
+                    ( SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT |
+@@ -845,8 +857,8 @@
+                 break;
+             }
+ 
+-            size.x = pad->m_Size.x + ( 2 * margin.x );
+-            size.y = pad->m_Size.y + ( 2 * margin.y );
++            size.x = pad->m_Size.x + ( 2 * margin.x ) + width_adj;
++            size.y = pad->m_Size.y + ( 2 * margin.y ) + width_adj;
+ 
+             /* Don't draw a null size item : */
+             if( size.x <= 0 || size.y <= 0 )
+@@ -913,14 +925,20 @@
+                 continue;
+ 
+             int via_margin = 0;
++            double width_adj = 0;
+ 
+             // If the current layer is a solder mask, use the global mask
+             // clearance for vias
+             if( ( aLayerMask & ( SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT ) ) )
+                 via_margin = GetBoard()->GetBoardDesignSettings()->m_SolderMaskMargin;
++            
++            if( aLayerMask & ALL_CU_LAYERS )
++            {
++                width_adj =  aPlotter->get_plot_width_adj();
++            }
+ 
+             pos    = Via->m_Start;
+-            size.x = size.y = Via->m_Width + 2 * via_margin;
++            size.x = size.y = Via->m_Width + 2 * via_margin + width_adj;
+ 
+             /* Don't draw a null size item : */
+             if( size.x <= 0 )
+@@ -941,7 +959,7 @@
+         if( (g_TabOneLayerMask[track->GetLayer()] & aLayerMask) == 0 )
+             continue;
+ 
+-        size.x = size.y = track->m_Width;
++        size.x = size.y = track->m_Width + aPlotter->get_plot_width_adj();
+         pos    = track->m_Start;
+         end    = track->m_End;
+ 
+@@ -956,7 +974,7 @@
+         if( (g_TabOneLayerMask[track->GetLayer()] & aLayerMask) == 0 )
+             continue;
+ 
+-        size.x = size.y = track->m_Width;
++        size.x = size.y = track->m_Width + aPlotter->get_plot_width_adj();
+         pos    = track->m_Start;
+         end    = track->m_End;
+ 
+@@ -1008,12 +1026,15 @@
+             continue;
+ 
+         pos = pts->m_Start;
+-
++        
++        // It is quite possible that the real drill value is less then small drill value.
+         if( g_PcbPlotOptions.m_DrillShapeOpt == PCB_PLOT_PARAMS::SMALL_DRILL_SHAPE )
+-            diam.x = diam.y = SMALL_DRILL;
++            diam.x = diam.y = MIN( SMALL_DRILL, pts->GetDrillValue() );
+         else
+             diam.x = diam.y = pts->GetDrillValue();
+-
++        
++        diam.x -= aPlotter->get_plot_width_adj();
++        diam.x = doIntValueFitToBand( diam.x, 1, pts->m_Width - 1 );
+         aPlotter->flash_pad_circle( pos, diam.x, aTraceMode );
+     }
+ 
+@@ -1030,11 +1051,19 @@
+             if( PtPad->m_DrillShape == PAD_OVAL )
+             {
+                 diam = PtPad->m_Drill;
++                diam.x -= aPlotter->get_plot_width_adj();
++                diam.x = doIntValueFitToBand( diam.x, 1, PtPad->m_Size.x - 1 );
++                diam.y -= aPlotter->get_plot_width_adj();
++                diam.y = doIntValueFitToBand( diam.y, 1, PtPad->m_Size.y - 1 );
+                 aPlotter->flash_pad_oval( pos, diam, PtPad->m_Orient, aTraceMode );
+             }
+             else
+             {
+                 diam.x = aSmallDrillShape ? SMALL_DRILL : PtPad->m_Drill.x;
++                // It is quite possible that the real pad drill value is less then small drill value.
++                diam.x = aSmallDrillShape ? MIN( SMALL_DRILL, PtPad->m_Drill.x ) : PtPad->m_Drill.x;
++                diam.x -= aPlotter->get_plot_width_adj();
++                diam.x = doIntValueFitToBand( diam.x, 1, PtPad->m_Size.x - 1 );
+                 aPlotter->flash_pad_circle( pos, diam.x, aTraceMode );
+             }
+         }
diff --git a/kicad-2012.01.19-real-version.patch b/kicad-2012.01.19-real-version.patch
new file mode 100644
index 0000000..967a20b
--- /dev/null
+++ b/kicad-2012.01.19-real-version.patch
@@ -0,0 +1,14 @@
+--- common/build_version.cpp.orig	2012-01-22 17:23:37.000000000 +0100
++++ common/build_version.cpp	2012-01-23 21:44:15.000000000 +0100
+@@ -7,9 +7,9 @@
+ 
+ #ifndef KICAD_BUILD_VERSION
+ #if defined KICAD_GOST
+-#   define KICAD_BUILD_VERSION "(2012-jan-04 GOST)"
++#   define KICAD_BUILD_VERSION "(2012-01-19 BZR 3256 GOST)"
+ #else
+-#   define KICAD_BUILD_VERSION "(2012-jan-04)"
++#   define KICAD_BUILD_VERSION "(2012-01-19 BZR 3256)"
+ #endif
+ #endif
+ 
diff --git a/kicad-2012.01.19-thermal-relief.rev3281.patch b/kicad-2012.01.19-thermal-relief.rev3281.patch
new file mode 100644
index 0000000..d0a1947
--- /dev/null
+++ b/kicad-2012.01.19-thermal-relief.rev3281.patch
@@ -0,0 +1,13 @@
+--- pcbnew/board_items_to_polygon_shape_transform.cpp.orig	2012-01-26 23:50:21.000000000 +0100
++++ pcbnew/board_items_to_polygon_shape_transform.cpp	2012-01-27 00:50:23.000000000 +0100
+@@ -615,8 +615,8 @@
+         // The pattern roughtly is a 90 deg arc pie
+         std::vector <wxPoint> corners_buffer;
+ 
+-        // Radius of outer arcs of the shape:
+-        int outer_radius = dx + aThermalGap;     // The radius of the outer arc is pad radius + aThermalGap
++        // Radius of outer arcs of the shape corrected for arc approximation by lines
++        int outer_radius = (int) ( (dx + aThermalGap) * aCorrectionFactor );
+ 
+         // Crosspoint of thermal spoke sides, the first point of polygon buffer
+         corners_buffer.push_back( wxPoint( copper_thickness.x / 2, copper_thickness.y / 2 ) );
diff --git a/kicad-2012.01.19-undo-redo-auto.rev3297.patch b/kicad-2012.01.19-undo-redo-auto.rev3297.patch
new file mode 100644
index 0000000..df5ceea
--- /dev/null
+++ b/kicad-2012.01.19-undo-redo-auto.rev3297.patch
@@ -0,0 +1,177 @@
+diff -ru kicad-2012.01.19-2.rev3256/pcbnew/automove.cpp kicad-2012.01.19-3.rev3256/pcbnew/automove.cpp
+--- kicad-2012.01.19-2.rev3256/pcbnew/automove.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-3.rev3256/pcbnew/automove.cpp	2012-01-27 15:38:42.000000000 +0100
+@@ -17,7 +17,8 @@
+ #include "pcbnew_id.h"
+ #include "class_board.h"
+ #include "class_module.h"
+-
++ 
++extern BOARD_ITEM* DuplicateStruct( BOARD_ITEM* aItem );
+ 
+ typedef enum {
+     FIXE_MODULE,
+@@ -185,6 +186,11 @@
+     bool     edgesExists;
+     double   surface;
+ 
++    // Undo: init list
++    PICKED_ITEMS_LIST  newList;
++    newList.m_Status = UR_CHANGED;
++    ITEM_PICKER        picker( NULL, UR_CHANGED );
++
+     if( GetBoard()->m_Modules == NULL )
+     {
+         DisplayError( this, _( "No modules found!" ) );
+@@ -262,6 +268,10 @@
+                 continue;
+         }
+ 
++        // Undo: add copy of old Module to undo
++        picker.m_Link           = DuplicateStruct( Module );
++        picker.m_PickedItemType = Module->Type();
++
+         if( current.x > (Xsize_allowed + start.x) )
+         {
+             current.x  = start.x;
+@@ -276,9 +286,17 @@
+ 
+         PlaceModule( Module, NULL, true );
+ 
++        // Undo: add new Module to undo
++        picker.m_PickedItem = Module;
++        newList.PushItem( picker );
++
+         current.x += Module->m_BoundaryBox.GetWidth() + pas_grille;
+     }
+ 
++    // Undo: commit
++    if( newList.GetCount() )
++        SaveCopyInUndoList( newList, UR_CHANGED );
++
+     DrawPanel->Refresh();
+ }
+ 
+diff -ru kicad-2012.01.19-2.rev3256/pcbnew/autoplac.cpp kicad-2012.01.19-3.rev3256/pcbnew/autoplac.cpp
+--- kicad-2012.01.19-2.rev3256/pcbnew/autoplac.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-3.rev3256/pcbnew/autoplac.cpp	2012-01-27 15:49:37.000000000 +0100
+@@ -106,6 +106,11 @@
+     float    Pas;
+     int      lay_tmp_TOP, lay_tmp_BOTTOM;
+ 
++    // Undo: init list
++    PICKED_ITEMS_LIST  newList;
++    newList.m_Status = UR_CHANGED;
++    ITEM_PICKER        picker( NULL, UR_CHANGED );
++
+     if( GetBoard()->m_Modules == NULL )
+         return;
+ 
+@@ -172,7 +177,14 @@
+         {
+         case PLACE_1_MODULE:
+             if( ThisModule == Module )
++            {
++                // Module will be placed, add to undo.
++                picker.m_PickedItem     = ThisModule;
++                picker.m_PickedItemType = ThisModule->Type();
++                newList.PushItem( picker );
++
+                 Module->m_ModuleStatus |= MODULE_to_PLACE;
++            }
+ 
+             break;
+ 
+@@ -183,7 +195,14 @@
+                 break;
+ 
+             if( !GetBoard()->m_BoundaryBox.Contains( Module->m_Pos ) )
++            {
++                // Module will be placed, add to undo.
++                picker.m_PickedItem     = Module;
++                picker.m_PickedItemType = Module->Type();
++                newList.PushItem( picker );
++
+                 Module->m_ModuleStatus |= MODULE_to_PLACE;
++            }
+ 
+             break;
+ 
+@@ -193,6 +212,11 @@
+             if( Module->m_ModuleStatus & MODULE_is_LOCKED )
+                 break;
+ 
++            // Module will be placed, add to undo.
++            picker.m_PickedItem     = Module;
++            picker.m_PickedItemType = Module->Type();
++            newList.PushItem( picker );
++
+             Module->m_ModuleStatus |= MODULE_to_PLACE;
+             break;
+ 
+@@ -204,7 +228,14 @@
+             }
+ 
+             if( !(Module->m_ModuleStatus & MODULE_is_PLACED) )
++            {
++                // Module will be placed, add to undo.
++                picker.m_PickedItem     = Module;
++                picker.m_PickedItemType = Module->Type();
++                newList.PushItem( picker );
++
+                 Module->m_ModuleStatus |= MODULE_to_PLACE;
++            }
+ 
+             break;
+         }
+@@ -221,6 +252,10 @@
+         }
+     }
+ 
++    // Undo: commit
++    if( newList.GetCount() )
++        SaveCopyInUndoList( newList, UR_CHANGED );
++
+     activ = 0;
+     Pas   = 100.0;
+ 
+diff -ru kicad-2012.01.19-2.rev3256/pcbnew/solve.cpp kicad-2012.01.19-3.rev3256/pcbnew/solve.cpp
+--- kicad-2012.01.19-2.rev3256/pcbnew/solve.cpp	2012-01-22 17:23:38.000000000 +0100
++++ kicad-2012.01.19-3.rev3256/pcbnew/solve.cpp	2012-01-27 16:08:23.000000000 +0100
+@@ -79,6 +79,7 @@
+ static int            Ncurrent;     /* measures of progress */
+ static int            s_Clearance;  // Clearance value used in autorouter
+ 
++static PICKED_ITEMS_LIST s_ItemsListPicker;
+ 
+ #define NOSUCCESS       0
+ #define STOP_FROM_ESC   -1
+@@ -272,6 +273,9 @@
+ 
+     Ncurrent = 0;
+ 
++    // Prepare the undo command info
++    s_ItemsListPicker.ClearListAndDeleteItems();  // Should not be necessary, but...
++
+     /* go until no more work to do */
+     GetWork( &row_source, &col_source, &current_net_code,
+              &row_target, &col_target, &pt_cur_ch ); // First net to route.
+@@ -375,6 +379,9 @@
+ 
+     DrawPanel->m_AbortEnable = false;
+ 
++    SaveCopyInUndoList( s_ItemsListPicker, UR_UNSPECIFIED );
++    s_ItemsListPicker.ClearItemsList(); // s_ItemsListPicker is no more owner of picked items
++
+     return SUCCESS;
+ }
+ 
+@@ -1324,6 +1331,8 @@
+ 
+     while( ( track = g_CurrentTrackList.PopFront() ) != NULL )
+     {
++        ITEM_PICKER picker( track, UR_NEW );
++        s_ItemsListPicker.PushItem( picker );
+         pcbframe->GetBoard()->m_Track.Insert( track, insertBeforeMe );
+     }
+ 
diff --git a/kicad-bug-921553.patch b/kicad-bug-921553.patch
new file mode 100644
index 0000000..5b6acc2
--- /dev/null
+++ b/kicad-bug-921553.patch
@@ -0,0 +1,76 @@
+diff -uNr kicad.orig/3d-viewer/CMakeLists.txt kicad/3d-viewer/CMakeLists.txt
+--- kicad.orig/3d-viewer/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/3d-viewer/CMakeLists.txt	2012-02-07 22:56:39.427930449 +0100
+@@ -19,4 +19,4 @@
+     trackball.cpp
+     )
+ 
+-add_library(3d-viewer ${3D-VIEWER_SRCS})
++add_library(3d-viewer STATIC ${3D-VIEWER_SRCS})
+diff -uNr kicad.orig/bitmaps_png/CMakeLists.txt kicad/bitmaps_png/CMakeLists.txt
+--- kicad.orig/bitmaps_png/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/bitmaps_png/CMakeLists.txt	2012-02-07 22:56:56.861533429 +0100
+@@ -676,5 +676,5 @@
+ endforeach()
+ 
+ #add_library( bitmaps SHARED ${CPP_LIST} )
+-add_library( bitmaps ${CPP_LIST} )
++add_library( bitmaps STATIC ${CPP_LIST} )
+ 
+diff -uNr kicad.orig/bitmaps_xpm/CMakeLists.txt kicad/bitmaps_xpm/CMakeLists.txt
+--- kicad.orig/bitmaps_xpm/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/bitmaps_xpm/CMakeLists.txt	2012-02-07 22:57:15.545155677 +0100
+@@ -449,4 +449,4 @@
+     set_source_files_properties(${CPP_BITMAP} PROPERTIES COMPILE_FLAGS -DXPMMAIN)
+ endforeach(LOOP_VAR)
+ 
+-add_library(bitmaps ${CPP_BITMAPS})
++add_library(bitmaps STATIC ${CPP_BITMAPS})
+diff -uNr kicad.orig/common/CMakeLists.txt kicad/common/CMakeLists.txt
+--- kicad.orig/common/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/common/CMakeLists.txt	2012-02-07 22:57:43.145582514 +0100
+@@ -77,7 +77,7 @@
+     zoom.cpp
+     )
+ 
+-add_library(common ${COMMON_SRCS})
++add_library(common STATIC ${COMMON_SRCS})
+ 
+ set(PCB_COMMON_SRCS
+     base_screen.cpp
+@@ -125,7 +125,7 @@
+     COMPILE_DEFINITIONS "PCBNEW"
+     )
+ 
+-add_library(pcbcommon ${PCB_COMMON_SRCS})
++add_library(pcbcommon STATIC ${PCB_COMMON_SRCS})
+ 
+ 
+ # auto-generate netlist_lexer.h and netlist_keywords.cpp
+diff -uNr kicad.orig/polygon/CMakeLists.txt kicad/polygon/CMakeLists.txt
+--- kicad.orig/polygon/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/polygon/CMakeLists.txt	2012-02-07 22:57:06.361680317 +0100
+@@ -10,4 +10,4 @@
+     polygon_test_point_inside.cpp
+     )
+ 
+-add_library(polygon ${POLYGON_SRCS})
++add_library(polygon STATIC ${POLYGON_SRCS})
+diff -uNr kicad.orig/polygon/kbool/src/CMakeLists.txt kicad/polygon/kbool/src/CMakeLists.txt
+--- kicad.orig/polygon/kbool/src/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/polygon/kbool/src/CMakeLists.txt	2012-02-07 22:57:55.352437924 +0100
+@@ -18,4 +18,4 @@
+     record.cpp
+     scanbeam.cpp)
+ 
+-add_library(kbool ${KBOOL_SRCS})
++add_library(kbool STATIC ${KBOOL_SRCS})
+diff -uNr kicad.orig/potrace/CMakeLists.txt kicad/potrace/CMakeLists.txt
+--- kicad.orig/potrace/CMakeLists.txt	2012-01-31 08:43:32.000000000 +0100
++++ kicad/potrace/CMakeLists.txt	2012-02-07 22:57:23.878617863 +0100
+@@ -13,4 +13,4 @@
+     trace.cpp
+     )
+ 
+-add_library(potrace ${POTRACE_SRCS})
++add_library(potrace STATIC ${POTRACE_SRCS})
diff --git a/kicad.desktop b/kicad.desktop
deleted file mode 100644
index 2b608b9..0000000
--- a/kicad.desktop
+++ /dev/null
@@ -1,9 +0,0 @@
-[Desktop Entry]
-Name=kicad
-Comment=Generates schematic diagrams and PCB artwork
-Comment[pl]=Generowanie schematów i płytek drukowanych
-Exec=kicad
-Icon=kicad
-Type=Application
-Terminal=false
-Categories=Utility;Electronics;
diff --git a/pcbnew.desktop b/pcbnew.desktop
new file mode 100644
index 0000000..1ada4e7
--- /dev/null
+++ b/pcbnew.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Categories=Development;Electronics
+Comment=Design an printed circuit board
+Comment[fr]=Router un circuit imprimé
+Exec=pcbnew
+GenericName=PCB design
+GenericName[fr]=Routage de circuits imprimés
+Icon=pcbnew
+MimeType=application/x-kicad-pcbnew;
+Name=Pcbnew
+Type=Application
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kicad.git/commitdiff/74131d8463d7b89927c5ccf6f427c4d7022c5260



More information about the pld-cvs-commit mailing list