# textproc/fcitx5 fails to build with poudriere



## kceiw (Oct 20, 2022)

Hi,

When I tried to build with poudriere, textproc/fcitx5 fails to build. The logs seems indicate that the wayland client isn't found. But I explicitly disable wayland for fcitx5. It's built successfully if I run `make install` directly from /usr/ports/textproc/fcitx5 on the host. It only fails in poudriere. I don't use wayland and disable it system-wide (on the host).  Will anybody have any ideas where I can continue my investigation?

I attached the log. Below is the excerpt.

```
---Begin OPTIONS List---
===> The following configuration options are available for fcitx5-5.0.11_1:
     ENCHANT=on: Dictionary/spellchecking framework
     WAYLAND=off: Wayland (graphics) support
     X11=on: X11 (graphics) support
===> Use 'make config' to modify these settings
---End OPTIONS List---
```


```
-- Could NOT find Wayland_Client (missing: Wayland_Client_LIBRARY Wayland_Client_INCLUDE_DIR) (found version "")
-- Could NOT find Wayland_Egl (missing: Wayland_Egl_LIBRARY Wayland_Egl_INCLUDE_DIR Wayland_Client_FOUND) (found version "")
CMake Error at /usr/local/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Wayland (missing: Wayland_LIBRARIES Client Egl)
Call Stack (most recent call first):
  /usr/local/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/ECM/find-modules/FindWayland.cmake:110 (find_package_handle_standard_args)
  CMakeLists.txt:157 (find_package)


-- Configuring incomplete, errors occurred!
See also "/portworkdir/usr/ports/textproc/fcitx5/work/.build/CMakeFiles/CMakeOutput.log".
See also "/portworkdir/usr/ports/textproc/fcitx5/work/.build/CMakeFiles/CMakeError.log".
*** Error code 1

Stop.
make: stopped in /usr/ports/textproc/fcitx5
=>> Cleaning up wrkdir
===>  Cleaning for fcitx5-5.0.11_1
build of textproc/fcitx5 | fcitx5-5.0.11_1 ended at Thu Oct 20 08:46:38 PDT 2022
build time: 00:03:15
!!! build failure encountered !!!
```

I follow https://docs.freebsd.org/en/books/handbook/ports/#ports-poudriere to set up my poudriere environment except I'm using the same port in /usr/ports


```
$ poudriere jails -l
131amd64 13.1-RELEASE-p2 amd64 http   2022-09-22 13:48:44 /home/poudriere/jails/131amd64
$ poudriere ports -l
default   null   2022-09-23 16:26:57 /usr/ports
```

I'm building it with

```
poudriere bulk -j 131amd64 -f /home/poudriere/packages.lst
```

I also attach the make.conf that's used in my host and also poudriere.

I still don't know why in poudriere it's looking for wayland. Can anybody shed some light on it?

Thanks,


----------



## SirDice (Oct 21, 2022)

```
WITHOUT_X=YES
WITH_X=NO
```
This doesn't do what you think it does. The _value_ of those WITH_* and WITHOUT_* variables is irrelevant. It's the _existence_ of WITH_* or WITHOUT_ * that defines if an option is included or not. That said, you should really use OPTIONS_UNSET or OPTIONS_SET instead, WITH_ and WITHOUT_ was the 'old' way of setting options, it still works but you should move away from it. 

I would also be more careful about _globally_ setting or unsetting options. You can set options _per_ port:

```
# OPTIONS_SET                   - List of options to enable for all ports.
# OPTIONS_UNSET                 - List of options to disable for all ports.
# ${OPTIONS_NAME}_SET           - List of options to enable for a specific port.
# ${OPTIONS_NAME}_UNSET         - List of options to disable for a specific port.
```

Also note that any options you may have set with poudriere-options(8) or `make config` will overrule the OPTIONS_SET/UNSET and ${OPTIONS_NAME}_SET/UNSET. That's why a _FORCE exist:

```
# OPTIONS_SET_FORCE             - List of options to enable for all ports.
# OPTIONS_UNSET_FORCE           - List of options to disable for all ports.
# ${OPTIONS_NAME}_SET_FORCE     - List of options to enable for a specific port.
# ${OPTIONS_NAME}_UNSET_FORCE
#                               - List of options to disable for a specific port.
```


```
# These variables can be used in make.conf to configure options.  They are
# processed in the order listed below, i.e. later variables override the effects
# of previous variables.  Options saved using the options dialog are processed
# right before OPTIONS_SET_FORCE.  When building a port a dialog to configure
# options will only appear if there are new options, i.e. options which have not
# been configured before either using the option dialog in a previous build or
# using the variables below.  You can force the dialog to appear by running
# "make config".
```
See /usr/ports/Mk/bsd.options.mk



kceiw said:


> I don't use wayland and disable it system-wide (on the host).


Tried that too. But some ports just refuse to build correctly if it's switched off. But first make sure that setting isn't being overruled. Then open a PR if it still fails to build with the option turned off.


----------



## kceiw (Oct 22, 2022)

Thanks for your reply SirDice

> But first make sure that setting isn't being overruled.

How do I check if what the final options/settings are for the build? I check the build log and see that WAYLAND is set to off. If that's not suffice to say that WAYLAND is off, how can I tell?

If I set WAYLAND to on in textproc/fctix5's options, it builds. But I don't want to pull in wayland since I'm only using x11.

I have to correct myself in my original post. I said that it's built successfully on my host using `make install` from the directory /usr/ports/textproc/fcitx5. Actually, it's not always. there is the same error about using the Wayland sometimes. But sometimes it's built successfully.


----------



## SirDice (Oct 24, 2022)

kceiw said:


> Actually, it's not always. there is the same error about using the Wayland sometimes. But sometimes it's built successfully.


Sometimes configure options are just ignored if the ./configure scripts detects something is installed. You can 'disable' that option all you want but the ./configure script will just enable it when it detects it's installed. That's one of the reasons why Poudriere builds everything in 'clean' jail.


----------

