Skip to contentSkip to conversation

xlib_libpciaccess: Rename package to libpciaccess

PATCH Superseded Bernd Kuhls 3 participants 8 messages Oct 17, 2014 – Oct 19, 2014 1 message not in the archive

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/2 xlib_libpciaccess: Rename package to libpciaccess

While libpciaccess is part of the X libraries, it does not depend upon X11 or any other X library.

---
v2: fixed stupid typo in package/Config.in

 Config.in.legacy                                         |    9 +++++++++
 package/Config.in                                        |    1 +
 package/libdrm/Config.in                                 |    7 +------
 package/libdrm/libdrm.mk                                 |    2 +-
 .../{x11r7/xlib_libpciaccess => libpciaccess}/Config.in  |    2 +-
 package/libpciaccess/libpciaccess.mk                     |   14 ++++++++++++++
 package/x11r7/Config.in                                  |    1 -
 package/x11r7/xdriver_xf86-video-intel/Config.in         |    2 +-
 .../xdriver_xf86-video-intel/xdriver_xf86-video-intel.mk |    2 +-
 package/x11r7/xlib_libpciaccess/xlib_libpciaccess.mk     |   14 --------------
 package/x11r7/xserver_xorg-server/Config.in              |    2 +-
 package/x11r7/xserver_xorg-server/xserver_xorg-server.mk |    2 +-
 12 files changed, 31 insertions(+), 27 deletions(-)
 rename package/{x11r7/xlib_libpciaccess => libpciaccess}/Config.in (80%)
 create mode 100644 package/libpciaccess/libpciaccess.mk
 delete mode 100644 package/x11r7/xlib_libpciaccess/xlib_libpciaccess.mk
Config.in.legacy +9 -0
index 6e202fe..b441e67 100644
@@ -101,6 +101,15 @@ endif
 ###############################################################################
 comment "Legacy options removed in 2014.11"
 
+config BR2_PACKAGE_XLIB_LIBPCIACCESS
+	bool "xlib-libpciaccess option has been renamed"
+	depends on BR2_PACKAGE_XORG7
+	select BR2_LEGACY
+	select BR2_PACKAGE_LIBPCIACCESS
+	help
+	  libpciaccess neither depends on X11 nor Xlib. Thus the
+	  package has been renamed BR2_PACKAGE_LIBPCIACCESS
+
 config BR2_PACKAGE_LINUX_FIRMWARE_XC5000
 	bool "Xceive xc5000 option has been renamed"
 	select BR2_PACKAGE_LINUX_FIRMWARE_XCx000
package/Config.in +1 -0
index 93e148d..64e6254 100644
@@ -683,6 +683,7 @@ menu "Hardware handling"
 	source "package/libllcp/Config.in"
 	source "package/libmbim/Config.in"
 	source "package/libnfc/Config.in"
+	source "package/libpciaccess/Config.in"
 	source "package/libphidget/Config.in"
 	source "package/libqmi/Config.in"
 	source "package/libraw1394/Config.in"
package/libdrm/Config.in +1 -6
index a9c9171..8f70db5 100644
@@ -19,17 +19,12 @@ menu "DRM Drivers"
 
 config BR2_PACKAGE_LIBDRM_INTEL
 	bool "intel"
-	depends on BR2_PACKAGE_XORG7
 	select BR2_PACKAGE_LIBATOMIC_OPS
-	select BR2_PACKAGE_XLIB_LIBPCIACCESS
+	select BR2_PACKAGE_LIBPCIACCESS
 	depends on BR2_i386 || BR2_x86_64
 	help
 	  installs intel graphics driver
 
-comment "libdrm intel driver depends on X.org"
-	depends on BR2_i386 || BR2_x86_64
-	depends on !BR2_PACKAGE_XORG7
-
 config BR2_PACKAGE_LIBDRM_RADEON
 	bool "radeon"
 	help
package/libdrm/libdrm.mk +1 -1
index 108ecdd..28a801f 100644
@@ -21,7 +21,7 @@ LIBDRM_CONF_OPTS = \
 
 ifeq ($(BR2_PACKAGE_LIBDRM_INTEL),y)
 LIBDRM_CONF_OPTS += --enable-intel
-LIBDRM_DEPENDENCIES += libatomic_ops xlib_libpciaccess
+LIBDRM_DEPENDENCIES += libatomic_ops libpciaccess
 else
 LIBDRM_CONF_OPTS += --disable-intel
 endif
package/libpciaccess/Config.in renamed from package/x11r7/xlib_libpciaccess/Config.in +1 -1
similarity index 80%
rename from package/x11r7/xlib_libpciaccess/Config.in
rename to package/libpciaccess/Config.in
index 5f7d136..8b05ebf 100644
@@ -1,4 +1,4 @@
-config BR2_PACKAGE_XLIB_LIBPCIACCESS
+config BR2_PACKAGE_LIBPCIACCESS
 	bool "libpciaccess"
 	depends on BR2_LARGEFILE
 	help
package/libpciaccess/libpciaccess.mk new file +14 -0
new file mode 100644
index 0000000..010707e
@@ -0,0 +1,14 @@
+################################################################################
+#
+# libpciaccess
+#
+################################################################################
+
+LIBPCIACCESS_VERSION = 0.13.2
+LIBPCIACCESS_SOURCE = libpciaccess-$(LIBPCIACCESS_VERSION).tar.bz2
+LIBPCIACCESS_SITE = http://xorg.freedesktop.org/releases/individual/lib
+LIBPCIACCESS_LICENSE = MIT
+LIBPCIACCESS_LICENSE_FILES = COPYING
+LIBPCIACCESS_INSTALL_STAGING = YES
+
+$(eval $(autotools-package))
package/x11r7/Config.in +0 -1
index 1979a13..357d4b4 100644
@@ -52,7 +52,6 @@ if BR2_PACKAGE_XORG7
 		source package/x11r7/xlib_libxkbfile/Config.in
 		source package/x11r7/xlib_libxshmfence/Config.in
 		source package/x11r7/xlib_xtrans/Config.in
-		source package/x11r7/xlib_libpciaccess/Config.in
 	endmenu
 	menu "X11R7 Applications"
 		source package/x11r7/xapp_appres/Config.in
package/x11r7/xdriver_xf86-video-intel/Config.in +1 -1
index 0c04756..dc2fabf 100644
@@ -3,7 +3,7 @@ config BR2_PACKAGE_XDRIVER_XF86_VIDEO_INTEL
 	depends on (BR2_i386 || BR2_x86_64)
 	select BR2_PACKAGE_XPROTO_FONTSPROTO
 	select BR2_PACKAGE_XPROTO_XPROTO
-	select BR2_PACKAGE_XLIB_LIBPCIACCESS
+	select BR2_PACKAGE_LIBPCIACCESS
 	select BR2_PACKAGE_LIBDRM
 	select BR2_PACKAGE_LIBDRM_INTEL
 	select BR2_PACKAGE_XLIB_LIBXRANDR
package/x11r7/xdriver_xf86-video-intel/xdriver_xf86-video-intel.mk +1 -1
index 4e981c8..801cdae 100644
@@ -20,8 +20,8 @@ XDRIVER_XF86_VIDEO_INTEL_CONF_OPTS = \
 
 XDRIVER_XF86_VIDEO_INTEL_DEPENDENCIES = \
 	libdrm \
+	libpciaccess \
 	xlib_libXrandr \
-	xlib_libpciaccess \
 	xproto_fontsproto \
 	xproto_xproto \
 	xserver_xorg-server
package/x11r7/xlib_libpciaccess/xlib_libpciaccess.mk deleted +0 -14
deleted file mode 100644
index d065bf1..0000000
@@ -1,14 +0,0 @@
-################################################################################
-#
-# xlib_libpciaccess
-#
-################################################################################
-
-XLIB_LIBPCIACCESS_VERSION = 0.13.2
-XLIB_LIBPCIACCESS_SOURCE = libpciaccess-$(XLIB_LIBPCIACCESS_VERSION).tar.bz2
-XLIB_LIBPCIACCESS_SITE = http://xorg.freedesktop.org/releases/individual/lib
-XLIB_LIBPCIACCESS_LICENSE = MIT
-XLIB_LIBPCIACCESS_LICENSE_FILES = COPYING
-XLIB_LIBPCIACCESS_INSTALL_STAGING = YES
-
-$(eval $(autotools-package))
package/x11r7/xserver_xorg-server/Config.in +1 -1
index e191dce..4b90f3c 100644
@@ -4,12 +4,12 @@ config BR2_PACKAGE_XSERVER_XORG_SERVER
 	# We need a SHA1 implementation. If either openssl or
 	# libgcrypt are already part of the build, we'll use one of
 	# them, otherwise, use the small libsha1 library.
+	select BR2_PACKAGE_LIBPCIACCESS if BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
 	select BR2_PACKAGE_LIBSHA1 if (!BR2_PACKAGE_OPENSSL && !BR2_PACKAGE_LIBGCRYPT)
 	select BR2_PACKAGE_PIXMAN
 	select BR2_PACKAGE_XFONT_FONT_ALIAS if !BR2_PACKAGE_XSERVER_XORG_SERVER_BUILTIN_FONTS
 	select BR2_PACKAGE_XFONT_FONT_MISC_MISC if !BR2_PACKAGE_XSERVER_XORG_SERVER_BUILTIN_FONTS
 	select BR2_PACKAGE_XFONT_FONT_CURSOR_MISC if !BR2_PACKAGE_XSERVER_XORG_SERVER_BUILTIN_FONTS
-	select BR2_PACKAGE_XLIB_LIBPCIACCESS if BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
 	select BR2_PACKAGE_XLIB_LIBX11
 	select BR2_PACKAGE_XLIB_LIBXAU
 	select BR2_PACKAGE_XLIB_LIBXCURSOR
package/x11r7/xserver_xorg-server/xserver_xorg-server.mk +1 -1
index c27dd80..7f71a0b 100644
@@ -63,7 +63,7 @@ XSERVER_XORG_SERVER_CONF_OPTS = --disable-config-hal \
 
 ifeq ($(BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR),y)
 XSERVER_XORG_SERVER_CONF_OPTS += --enable-xorg
-XSERVER_XORG_SERVER_DEPENDENCIES += xlib_libpciaccess libdrm
+XSERVER_XORG_SERVER_DEPENDENCIES += libpciaccess libdrm
 else
 XSERVER_XORG_SERVER_CONF_OPTS += --disable-xorg
 endif
Signature · 1 line
1.7.10.4
#1 lore raw

PATCH v2 2/2 package/libva-intel-driver: Do not depend on xorg

This patch reverts
http://git.buildroot.net/buildroot/commit/package/libva-intel-driver/Config.in?id=062bacfa67688b2747412a30ddeb996449d1c6df

By removing the xorg dependency of libpciaccess the libdrm package, and therefore also libva-intel-driver, does not depend on xorg any longer.

---
v2: no changes

 package/libva-intel-driver/Config.in |   11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)
package/libva-intel-driver/Config.in +3 -8
index cac2fed..a0f397b 100644
@@ -3,11 +3,10 @@ config BR2_PACKAGE_LIBVA_INTEL_DRIVER
 	select BR2_PACKAGE_LIBVA
 	select BR2_PACKAGE_LIBDRM
 	select BR2_PACKAGE_LIBDRM_INTEL
-	select BR2_PACKAGE_XLIB_LIBX11
-	select BR2_PACKAGE_XLIB_LIBXEXT
-	select BR2_PACKAGE_XLIB_LIBXFIXES
+	select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7
+	select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7
+	select BR2_PACKAGE_XLIB_LIBXFIXES if BR2_PACKAGE_XORG7
 	depends on BR2_i386 || BR2_x86_64
-	depends on BR2_PACKAGE_XORG7 # libdrm intel
 	depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm/libpthread-stubs
 	depends on BR2_LARGEFILE # libdrm
 	depends on !BR2_PREFER_STATIC_LIB # libva
@@ -20,7 +19,3 @@ comment "libva intel driver needs a toolchain w/ largefile, threads, dynamic lib
 	depends on !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || \
 		BR2_PREFER_STATIC_LIB
 	depends on BR2_i386 || BR2_x86_64
-
-comment "libva intel driver needs X.org"
-	depends on BR2_i386 || BR2_x86_64
-	depends on !BR2_PACKAGE_XORG7
Signature · 1 line
1.7.10.4
#2 lore raw

PATCH v2 2/2 package/libva-intel-driver: Do not depend on xorg

Quoted 7 lines · Bernd Kuhls

This patch reverts
http://git.buildroot.net/buildroot/commit/package/libva-intel-driver/Config.in?id=062bacfa67688b2747412a30ddeb996449d1c6df

By removing the xorg dependency of libpciaccess the libdrm package, and therefore also libva-intel-driver, does not depend on xorg any longer.

Regards,
Arnout

Quoted 34 lines

---
v2: no changes

 package/libva-intel-driver/Config.in |   11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)
package/libva-intel-driver/Config.in +3 -8
index cac2fed..a0f397b 100644
@@ -3,11 +3,10 @@ config BR2_PACKAGE_LIBVA_INTEL_DRIVER
 	select BR2_PACKAGE_LIBVA
 	select BR2_PACKAGE_LIBDRM
 	select BR2_PACKAGE_LIBDRM_INTEL
-	select BR2_PACKAGE_XLIB_LIBX11
-	select BR2_PACKAGE_XLIB_LIBXEXT
-	select BR2_PACKAGE_XLIB_LIBXFIXES
+	select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_XORG7
+	select BR2_PACKAGE_XLIB_LIBXEXT if BR2_PACKAGE_XORG7
+	select BR2_PACKAGE_XLIB_LIBXFIXES if BR2_PACKAGE_XORG7
 	depends on BR2_i386 || BR2_x86_64
-	depends on BR2_PACKAGE_XORG7 # libdrm intel
 	depends on BR2_TOOLCHAIN_HAS_THREADS # libdrm/libpthread-stubs
 	depends on BR2_LARGEFILE # libdrm
 	depends on !BR2_PREFER_STATIC_LIB # libva
@@ -20,7 +19,3 @@ comment "libva intel driver needs a toolchain w/ largefile, threads, dynamic lib
 	depends on !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || \
 		BR2_PREFER_STATIC_LIB
 	depends on BR2_i386 || BR2_x86_64
-
-comment "libva intel driver needs X.org"
-	depends on BR2_i386 || BR2_x86_64
-	depends on !BR2_PACKAGE_XORG7
Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#3 lore raw

PATCH v2 1/2 xlib_libpciaccess: Rename package to libpciaccess

In reply to Bernd Kuhls
Quoted 6 lines · Bernd Kuhls

While libpciaccess is part of the X libraries, it does not depend upon X11 or any other X library.

---
v2: fixed stupid typo in package/Config.in

One more stupid mistake...

[snip]

package/x11r7/xserver_xorg-server/Config.in config BR2_PACKAGE_XSERVER_XORG_SERVER · line 8

Quoted 10 lines
package/x11r7/xserver_xorg-server/Config.in +1 -0
index e191dce..4b90f3c 100644
@@ -4,12 +4,12 @@ config BR2_PACKAGE_XSERVER_XORG_SERVER
 	# We need a SHA1 implementation. If either openssl or
 	# libgcrypt are already part of the build, we'll use one of
 	# them, otherwise, use the small libsha1 library.
+	select BR2_PACKAGE_LIBPCIACCESS if BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
 	select BR2_PACKAGE_LIBSHA1 if (!BR2_PACKAGE_OPENSSL && !BR2_PACKAGE_LIBGCRYPT)

You put the libpciaccess between the comment about libsha1 and its select
line... Probably better to put it above the comment.

With that, it gets my

Regards,
Arnout

Quoted 8 lines
package/x11r7/xserver_xorg-server/Config.in +0 -1
 	select BR2_PACKAGE_PIXMAN
 	select BR2_PACKAGE_XFONT_FONT_ALIAS if !BR2_PACKAGE_XSERVER_XORG_SERVER_BUILTIN_FONTS
 	select BR2_PACKAGE_XFONT_FONT_MISC_MISC if !BR2_PACKAGE_XSERVER_XORG_SERVER_BUILTIN_FONTS
 	select BR2_PACKAGE_XFONT_FONT_CURSOR_MISC if !BR2_PACKAGE_XSERVER_XORG_SERVER_BUILTIN_FONTS
-	select BR2_PACKAGE_XLIB_LIBPCIACCESS if BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
 	select BR2_PACKAGE_XLIB_LIBX11
 	select BR2_PACKAGE_XLIB_LIBXAU
 	select BR2_PACKAGE_XLIB_LIBXCURSOR

[snip]

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#4 lore raw

PATCH v2 1/2 xlib_libpciaccess: Rename package to libpciaccess

In reply to Bernd Kuhls

Dear Bernd Kuhls,

Quoted 6 lines · Bernd Kuhls

While libpciaccess is part of the X libraries, it does not depend upon X11 or any other X library.

---
v2: fixed stupid typo in package/Config.in

Patch applied. I just have one comment/question below.

package/x11r7/xserver_xorg-server/Config.in config BR2_PACKAGE_XSERVER_XORG_SERVER · line 7

Quoted 10 lines

-$(eval $(autotools-package))

package/x11r7/xserver_xorg-server/Config.in +1 -0
index e191dce..4b90f3c 100644
@@ -4,12 +4,12 @@ config BR2_PACKAGE_XSERVER_XORG_SERVER
 	# We need a SHA1 implementation. If either openssl or
 	# libgcrypt are already part of the build, we'll use one of
 	# them, otherwise, use the small libsha1 library.
+	select BR2_PACKAGE_LIBPCIACCESS if BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR

I know it's not a change you've made, but why do we need libpciaccess whenever the X.org modular server is enabled? I can imagine using the X.org modular server on ARM platforms that don't have any PCI hardware.

Thanks,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#5 lore raw

PATCH v2 1/2 xlib_libpciaccess: Rename package to libpciaccess

Hello,

Of course, I applied version 3, not version 2. I only replied to the version 2 patch by mistake.

Thomas

Quoted 30 lines · Thomas Petazzoni

Dear Bernd Kuhls,

Quoted 6 lines · Bernd Kuhls

While libpciaccess is part of the X libraries, it does not depend upon X11 or any other X library.

---
v2: fixed stupid typo in package/Config.in

Patch applied. I just have one comment/question below.

package/x11r7/xserver_xorg-server/Config.in config BR2_PACKAGE_XSERVER_XORG_SERVER · line 7

Quoted 10 lines

-$(eval $(autotools-package))

package/x11r7/xserver_xorg-server/Config.in +1 -0
index e191dce..4b90f3c 100644
@@ -4,12 +4,12 @@ config BR2_PACKAGE_XSERVER_XORG_SERVER
 	# We need a SHA1 implementation. If either openssl or
 	# libgcrypt are already part of the build, we'll use one of
 	# them, otherwise, use the small libsha1 library.
+	select BR2_PACKAGE_LIBPCIACCESS if BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR

I know it's not a change you've made, but why do we need libpciaccess whenever the X.org modular server is enabled? I can imagine using the X.org modular server on ARM platforms that don't have any PCI hardware.

Thanks,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#6 lore raw

PATCH v2 1/2 xlib_libpciaccess: Rename package to libpciaccess

In reply to Thomas Petazzoni

[posted and mailed]

Thomas Petazzoni <thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8 @public.gmane.org> wrote in news:20141019121141.5098a140 at free-electrons.com:

Quoted 5 lines

Dear Bernd Kuhls,

I know it's not a change you've made, but why do we need libpciaccess whenever the X.org modular server is enabled? I can imagine using the X.org modular server on ARM platforms that don't have any PCI hardware.

Hi,

ARM and PCI do not exclude each other, I found this after a short search:
http://www.embeddedarm.com/products/arm-sbc.php#ts-7800-500mhz-series

The X.org modular server can be build without libpciaccess in certain configurations, but it is a hard dependency in other cases, see until line 1911: http://cgit.freedesktop.org/xorg/xserver/tree/configure.ac#n1906

Since libpciaccess seems not to have any hardware-related dependencies I would to keep its dependency in xserver_xorg-server for simplicity.

Btw, how often do the autobuilder build the X.org modular server since BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE is the default value for BR2_PACKAGE_XSERVER_XORG_SERVER?

Regards, Bernd

A message that is not in the archive (sent off-list or not yet received): [email protected]

#8 lore raw

PATCH v2 1/2 xlib_libpciaccess: Rename package to libpciaccess

Dear Bernd Kuhls,

Not sure why you're replying to me with a weird gmane address. I'm replying with the Buildroot list Cc'ed instead.

Quoted 6 lines · Bernd Kuhls
Quoted 3 lines

I know it's not a change you've made, but why do we need libpciaccess whenever the X.org modular server is enabled? I can imagine using the X.org modular server on ARM platforms that don't have any PCI hardware.

ARM and PCI do not exclude each other, I found this after a short search:
http://www.embeddedarm.com/products/arm-sbc.php#ts-7800-500mhz-series

I certainly now that ARM and PCI do not exclude each other, as I've myself written the PCIe support for one ARM platform, and I'm the maintainer of it in the Linux kernel:

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/MAINTAINERS#n7003

But while *some* ARM platforms do have PCI, a number of them don't have access to it.

Quoted 6 lines

The X.org modular server can be build without libpciaccess in certain configurations, but it is a hard dependency in other cases, see until line 1911: http://cgit.freedesktop.org/xorg/xserver/tree/configure.ac#n1906

Since libpciaccess seems not to have any hardware-related dependencies I would to keep its dependency in xserver_xorg-server for simplicity.

Ok, fair enough, makes sense.

Quoted 3 lines

Btw, how often do the autobuilder build the X.org modular server since BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE is the default value for BR2_PACKAGE_XSERVER_XORG_SERVER?

Basically: never, because choices are not randomized.

However, with the "preseed" stuff that Yann and Arnout have posted, we might be able to preseed the random package select with certain options, and therefore the autobuild-run script could be improved to sometimes select the modular variant of the X.org server. I've added Yann and Arnout in Cc so that they can comment on this.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com