Needing help getting cad/kicad-devel compiled under FreeBSD-9

Dimitry Andric dim at FreeBSD.org
Wed Apr 20 21:33:57 UTC 2016


On 20 Apr 2016, at 10:28, mr <mr at freebsd.org> wrote:
> since the last update kicad seems to use GLM (math/glm) additionaly.
> Compiling under FreeBSD-10 works FreeBSD-9 not.
> 
> A bugreport ( https://bugs.launchpad.net/kicad/+bug/1571393 ) for kicad got
> closed because of:
> ...
> As reported this doesn't appear to be a Kicad bug, so i will close this
> bug, the problems are from GLM which may be better at providing support in
> this case.
> ...
> 
> Since GLM is the same in ports on FreeBSD-9/10 the Issue is probably due to
> the way FreeBSD handles the compiler/settings...
> 
> The difference seems to be that FreeBSD-10 chooses the base clang++ as
> compiler, FreeBSD-9 uses g++48 from ports as compiler.
> In the Makefile I have 'USES=...compiler:c++11-lib...'.
> Shouldn't this be sufficient to select the appropriate compiler/settings?

Yes, that looks about right.


> Compiling under FreeBSD-9 gives:
> ...
> 
> [ 34%] Building CXX object common/CMakeFiles/gal.dir/draw_panel_gal.cpp.o
> cd /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common &&
> /usr/local/bin/g++48 -DHAVE_STDINT_H -DKICAD_KEEPCASE -DUSE_OPENMP
> -DWXUSINGDLL -DWX_COMPATIBILITY -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE
> -D__WXGTK__ -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/include
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/. -isystem
> /usr/local/lib/wx/include/gtk2-unicode-3.0 -isystem
> /usr/local/include/wx-3.0
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/./dialogs
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/./widgets
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/./dialog_about
> -I/usr/local/include/cairo -I/usr/local/include
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/../3d-viewer
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/../pcbnew
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/../polygon
> -I/wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694 -I/usr/local/include
> -Wall -O2 -pipe -fstack-protector -Wl,-rpath=/usr/local/lib/gcc48
> -fno-strict-aliasing -Wl,-rpath=/usr/local/lib/gcc48
> -Wno-unused-local-typedefs -Wno-strict-aliasing -fopenmp -pthread -O2 -pipe
> -fstack-protector -Wl,-rpath=/usr/local/lib/gcc48 -fno-strict-aliasing
> -Wl,-rpath=/usr/local/lib/gcc48 -DNDEBUG -fPIC -fvisibility=hidden
> -fvisibility-inlines-hidden -std=gnu++11 -o
> CMakeFiles/gal.dir/draw_panel_gal.cpp.o -c
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/draw_panel_gal.cpp
> In file included from
> /usr/local/include/glm/detail/func_exponential.hpp:132:0,
>                 from /usr/local/include/glm/detail/func_geometric.inl:33,
>                 from /usr/local/include/glm/detail/func_geometric.hpp:142,
>                 from /usr/local/include/glm/geometric.hpp:35,
>                 from /usr/local/include/glm/gtc/matrix_transform.inl:33,
>                 from /usr/local/include/glm/gtc/matrix_transform.hpp:394,
>                 from
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/include/gal/opengl/vertex_manager.h:35,
>                 from
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/include/gal/opengl/opengl_gal.h:35,
>                 from
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/draw_panel_gal.cpp:40:
> /usr/local/include/glm/detail/func_exponential.inl:43:14: error:
> 'std::log2' has not been declared
>   using std::log2;
>              ^
> In file included from /usr/local/include/glm/detail/func_common.hpp:455:0,
>                 from /usr/local/include/glm/detail/func_geometric.inl:34,
>                 from /usr/local/include/glm/detail/func_geometric.hpp:142,
>                 from /usr/local/include/glm/geometric.hpp:35,
>                 from /usr/local/include/glm/gtc/matrix_transform.inl:33,
>                 from /usr/local/include/glm/gtc/matrix_transform.hpp:394,
>                 from
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/include/gal/opengl/vertex_manager.h:35,
>                 from
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/include/gal/opengl/opengl_gal.h:35,
>                 from
> /wrkdirs/usr/ports/cad/kicad-devel/work/kicad-r6694/common/draw_panel_gal.cpp:40:
> /usr/local/include/glm/detail/func_common.inl:229:16: error: 'std::trunc'
> has not been declared
>   using ::std::trunc;
>                ^
> /usr/local/include/glm/detail/func_common.inl:248:16: error: 'std::round'
> has not been declared
>   using ::std::round;
>                ^

This is because gcc48's <cmath> header does not define a whole bunch of
C99 math functions in the std:: namespace.

E.g., /usr/local/lib/gcc48/include/c++/cmath has:

   922  #if __cplusplus >= 201103L
   923
   924  #ifdef _GLIBCXX_USE_C99_MATH_TR1
...
   983  #undef log2
   984  #undef log2f
   985  #undef log2l
...
  1032  namespace std _GLIBCXX_VISIBILITY(default)
  1033  {
  1034  _GLIBCXX_BEGIN_NAMESPACE_VERSION
...
  1117    using ::log2;
  1118    using ::log2f;
  1119    using ::log2l;
...
  1678  _GLIBCXX_END_NAMESPACE_VERSION
  1679  } // namespace
  1680
  1681  #endif // _GLIBCXX_USE_C99_MATH_TR1
  1682
  1683  #endif // C++11

and /usr/local/lib/gcc48/include/c++/x86_64-portbld-freebsd9.3/bits/c++config.h
has:

/* Define if C99 functions or macros in <math.h> should be imported in
   <tr1/cmath> in namespace std::tr1. */
/* #undef _GLIBCXX_USE_C99_MATH_TR1 */

It looks like this file is generated at build time, so something in
gcc's configure scripts is turning off the "C99_MATH_TR1" support.

Then again, the name of the define is a bit strange, since this is not
about <tr1/cmath>, but the regular <cmath> header.  It is probably worth
reporting a bug for the gcc port.

I tried this quick hack to work around it:

--- /usr/local/lib/gcc48/include/c++/cmath.orig	2016-04-14 07:09:27.000000000 +0200
+++ /usr/local/lib/gcc48/include/c++/cmath	2016-04-20 23:21:19.847854000 +0200
@@ -921,7 +921,7 @@ _GLIBCXX_END_NAMESPACE_VERSION

 #if __cplusplus >= 201103L

-#ifdef _GLIBCXX_USE_C99_MATH_TR1
+#ifdef _GLIBCXX_USE_C99_MATH

 #undef acosh
 #undef acoshf
@@ -1678,7 +1678,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace

-#endif // _GLIBCXX_USE_C99_MATH_TR1
+#endif // _GLIBCXX_USE_C99_MATH

 #endif // C++11

You will also need to add -D_DECLARE_C99_LDBL_MATH to ${CXXFLAGS}, to
enable the declaration of a number of long double functions in math.h,
otherwise gcc's <cmath> fails to compile with:

/usr/local/lib/gcc48/include/c++/cmath:1043:11: error: '::acoshl' has not been declared
   using ::acoshl;
           ^

-Dimitry

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-ports/attachments/20160420/67dbbbd6/attachment.sig>


More information about the freebsd-ports mailing list