New Ticket     Tickets     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #19350 (closed defect: fixed)

Opened 4 years ago

Last modified 4 years ago

gtk2 variant dependecy

Reported by: frankalahan@… Owned by: nox@…
Priority: Normal Milestone:
Component: ports Version: 1.7.1
Keywords: no_x11 quartz Cc:
Port: gtk2

Description (last modified by macsforever2000@…) (diff)

To install gtk2 +no_x11 its library dependencies pango and cairo must be compiled with the variant "+quartz" or it will fail to compile:

port install cairo +no_x11 +quartz
port install pango +no_x11 +quartz

It seems the "+quartz" was not passed when I did

port install gtk2 +no_x11

The installation failed with:

 /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I. -I../.. -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION -I../.. -I../../gdk -I../../gdk -DG_DISABLE_CAST_CHECKS -D_REENTRANT -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/pango-1.0 -I/opt/local/include/cairo -I/opt/local/include/pixman-1 -I/opt/local/include/freetype2 -I/opt/local/include/libpng12 -xobjective-c -I/opt/local/include -DX_LOCALE -DG_DISABLE_SINGLE_INCLUDES -DATK_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_DEPRECATED -O2 -fstrict-aliasing -Wall -MT gdkdrawable-quartz.lo -MD -MP -MF .deps/gdkdrawable-quartz.Tpo -c gdkdrawable-quartz.c  -fno-common -DPIC -o .libs/gdkdrawable-quartz.o
gdkdrawable-quartz.c:22:26: error: cairo-quartz.h: No such file or directory
gdkdrawable-quartz.c: In function 'gdk_quartz_ref_cairo_surface':
gdkdrawable-quartz.c:69: warning: implicit declaration of function 'cairo_quartz_surface_create_for_cg_context'
gdkdrawable-quartz.c:69: warning: assignment makes pointer from integer without a cast
make[4]: *** [gdkdrawable-quartz.lo] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

However I solved that reinstalling pango and cairo with "+quartz"

Change History

comment:1 Changed 4 years ago by macsforever2000@…

  • Owner changed from macports-tickets@… to nox@…
  • Description modified (diff)
  • Port set to gtk2

comment:2 follow-up: ↓ 4 Changed 4 years ago by devans@…

  • Keywords no_x11 quartz added

This is really an issue/misunderstanding about the port command itself rather than gtk2

First, if you want to build gtk2 with quartz rendering then you need to use

port install gtk2 +no_x11 +quartz

as +no_x11 just says no X11 rendering and doesn't imply what you're going to use instead, +quartz says use quartz.

Second, if you want to build gtk+ ports/applications using quartz rendering then you have to ensure that the port in question AND all of its dependencies are built with +no_x11 +quartz too. Additionally, because +x11 and +quartz versions of ports may have common dependents, you cannot successfully mix ports built with +quartz and ports built with +x11 (the defacto default for most ports) in the same instance of MacPorts.

You have to decide before installing any ports whether you are going use X11 rendering or quartz rendering in the instance of MacPorts that you are installing. If you need both types of apps then you must install separate instances of MacPorts for each with different prefixes such as /opt/local for X11 and /opt/quartz for quartz rendering.

Installing multiple instances of MacPorts is described in the MacPorts Guide.

Assuming you are installing a new +quartz instance from scratch, the easiest way to make sure that all ports are built +no_x11 +quartz is to add

+no_x11 +quartz

to the configuration file ${prefix}/etc/macports/variants.conf where ${prefix} is the installation prefix for your MacPorts quartz instance.

Then you can install gtk2 by using

sudo port install gtk2

and gtk2 and all its dependents will be built with +no_x11 +quartz and you should be in business.

If you have already mixed +x11 and +quartz ports in the same instance, then you are in trouble and the only clean and certain way to recover is to remove all installed ports and start over as described above.

sudo port -f uninstall installed

I hope this helps.

comment:3 Changed 4 years ago by devans@…

Please substitute the word "dependencies" for "dependents" above. We really need a way to edit comments after they have been submitted! Or I do anyway.

comment:4 in reply to: ↑ 2 Changed 4 years ago by frankalahan@…

Hi, I think I still have a problem!

when I do port install gtk2 +no_x11

I see cariro and pango being, installed and then gtk2 starts building, which fails. To fix this I have to do:

port uninstall pango port uninstall cairo

port install pango +no_x11 +quartz port install cairo +no_x11 +quartz

port install gtk2 +no_x11

... and then this works!

The problem is, that port install gtk2 +no_x11 will not work from a fresh install (whith no other ports installed)

Replying to devans@…:

This is really an issue/misunderstanding about the port command itself rather than gtk2

First, if you want to build gtk2 with quartz rendering then you need to use

port install gtk2 +no_x11 +quartz

as +no_x11 just says no X11 rendering and doesn't imply what you're going to use instead, +quartz says use quartz.

Second, if you want to build gtk+ ports/applications using quartz rendering then you have to ensure that the port in question AND all of its dependencies are built with +no_x11 +quartz too. Additionally, because +x11 and +quartz versions of ports may have common dependents, you cannot successfully mix ports built with +quartz and ports built with +x11 (the defacto default for most ports) in the same instance of MacPorts.

You have to decide before installing any ports whether you are going use X11 rendering or quartz rendering in the instance of MacPorts that you are installing. If you need both types of apps then you must install separate instances of MacPorts for each with different prefixes such as /opt/local for X11 and /opt/quartz for quartz rendering.

Installing multiple instances of MacPorts is described in the MacPorts Guide.

Assuming you are installing a new +quartz instance from scratch, the easiest way to make sure that all ports are built +no_x11 +quartz is to add

+no_x11 +quartz

to the configuration file ${prefix}/etc/macports/variants.conf where ${prefix} is the installation prefix for your MacPorts quartz instance.

Then you can install gtk2 by using

sudo port install gtk2

and gtk2 and all its dependents will be built with +no_x11 +quartz and you should be in business.

If you have already mixed +x11 and +quartz ports in the same instance, then you are in trouble and the only clean and certain way to recover is to remove all installed ports and start over as described above.

sudo port -f uninstall installed

I hope this helps.

comment:5 Changed 4 years ago by devans@…

Yes, that is consistent with what I said above. You need to build gtk2 and its dependencies with both +no_x11 and +quartz. And this is true for any other ports you want to build that way. So put +no_x11 +quartz in ${prefix}/etc/macports/variants.conf and MacPorts will do it automatically for you for each port that is built.

comment:6 Changed 4 years ago by nox@…

  • Status changed from new to assigned

comment:7 Changed 4 years ago by nox@…

  • Status changed from assigned to closed
  • Resolution set to fixed

cairo variants are now checked in r49818.

comment:8 Changed 4 years ago by anonymous

  • Milestone Port Bugs deleted

Milestone Port Bugs deleted

Note: See TracTickets for help on using tickets.