{"id":1657,"date":"2015-07-30T17:58:20","date_gmt":"2015-07-30T17:58:20","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=1657"},"modified":"2015-07-30T17:58:20","modified_gmt":"2015-07-30T17:58:20","slug":"peleandome-con-python-3-4","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=1657","title":{"rendered":"Peleandome con Python 3.4"},"content":{"rendered":"<p>Dado que quiero tener soporte para <em>gnutls<\/em>, tuve que cambiar el USE de mi distribuci\u00f3n a:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">USE=\"${ARCH} -pam -fortran -sanitize -iptables -static -systemd -mdev gnutls internal-glib -caps -filecaps -X -gtk -qt -tk\"<\/pre>\n<\/div>\n<p>Las siete \u00faltimas adiciones fueron para no a\u00f1adir nada de entorno gr\u00e1fico (pues no tiene sentido en el WebTV) y para asegurar de que las nuevas bibliotecas necesarias para incluir <em>gnutls<\/em> se puedan compilar. Hubo varios problemillas, pero uno a uno los fui resolviendo.<\/p>\n<p>Por desgracia, el \u00faltimo escollo estaba en python. Cuando compil\u00e9 el sistema la versi\u00f3n estable era la 3.3, pero ahora ya sali\u00f3 la 3.4. El problema es que se negaba a compilar, dando un error raro:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">Python build finished successfully!\nThe necessary bits to build these optional modules were not found:\n    _tkinter\nTo find the necessary bits, look in setup.py in detect_modules() for the module's name.\nFailed to build these modules:\n    _socket \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _ssl<\/pre>\n<\/div>\n<p>Dec\u00eda que se hab\u00eda compilado correctamente, pero <em>emerge<\/em> devolv\u00eda un error. Al principio pensaba que el problema estaba en <em>tkinter<\/em>, el m\u00f3dulo gr\u00e1fico de python, pero no ten\u00eda sentido porque hab\u00eda especificado que no quer\u00eda ni <em>tk<\/em>, ni <em>X<\/em> ni nada relacionado con un entorno gr\u00e1fico. Entonces, revisando el log, vi que en medio de la compilaci\u00f3n hab\u00eda este error:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.o\n\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.c: In function 'makesockaddr':\n\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.c:1175:14: error: dereferencing pointer to incomplete type\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (a-&gt;can_ifindex) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ^\n\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.c:1176:32: error: dereferencing pointer to incomplete type\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ifr.ifr_ifindex = a-&gt;can_ifindex;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ^\n\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.c:1183:38: error: dereferencing pointer to incomplete type\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0a-&gt;can_family);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ^\n\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.c: In function 'getsockaddrlen':\n\/tmp\/portage\/dev-lang\/python-3.4.3\/work\/Python-3.4.3\/Modules\/socketmodule.c:1802:28: error: invalid application of 'sizeof' to incomplete type 'struct sockaddr_can'\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0*len_ret = sizeof (struct sockaddr_can);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ^\nbuilding '_ssl' extension<\/pre>\n<\/div>\n<p>\u00bfCAN? \u00bfEn el m\u00f3dulo de <em>sockets<\/em>? Bastante raro. Rebuscando encontr\u00e9 que, efectivamente, desde el <a href=\"https:\/\/en.wikipedia.org\/wiki\/SocketCAN\" target=\"_blank\">n\u00facleo 2.6.25 hay soporte para el bus CAN<\/a>; sin embargo, mi n\u00facleo (y sus cabeceras) es el 2.6.22. \u00bfPor qu\u00e9 se empe\u00f1aba en incluir soporte? Por otro lado, python 3.3 tambi\u00e9n trae de serie soporte para bus CAN, pero esa versi\u00f3n s\u00ed compilaba bien. \u00bfQu\u00e9 estaba pasando?<\/p>\n<p>Al final descubr\u00ed que el n\u00facleo 2.6.22 tiene <em>algo<\/em> de soporte del bus CAN, pero parece que no el suficiente, y eso l\u00eda a python 3.4.<\/p>\n<p>La soluci\u00f3n que encontr\u00e9 fue editar el fichero <em>\/usr\/include\/bits\/socket.h<\/em>, y comentar la l\u00ednea donde se define <strong>AF_CAN<\/strong>:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">\/\/#define AF_CAN PF_CAN<\/pre>\n<\/div>\n<p>Y con eso, por fin, pude compilar absolutamente todo, listo para empezar a preparar el sistema que va a llevar definitivamente.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dado que quiero tener soporte para gnutls, tuve que cambiar el USE de mi distribuci\u00f3n a: USE=\u00bb${ARCH} -pam -fortran -sanitize -iptables -static -systemd -mdev gnutls internal-glib -caps -filecaps -X -gtk -qt -tk\u00bb Las siete \u00faltimas adiciones fueron para no a\u00f1adir nada de entorno gr\u00e1fico (pues no tiene sentido en el WebTV) y para asegurar de &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=1657\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Peleandome con Python 3.4<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5,6],"tags":[],"class_list":["post-1657","post","type-post","status-publish","format-standard","hentry","category-cacharreo","category-programacion","category-trucos"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1657"}],"version-history":[{"count":0,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1657\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}