Polishing a few hickups - help welcome

My current project is to package mjpg-streamer for openSUSE. With quite some effort and a lot of help from Malcolm I got it building ok. The package lacks a desktop icon to start/stop it which I added. The actual commands are coded in a bash script running without a terminal and doing all communication using kdialog. Unfortunately GNOME users will have to use the CLI until I find a better solution.

I should mention that I found a document giving a good introduction into packaging and hands-on exercises for writing and debugging spec files. I recommend it for everyone new to building packages: GURULABS-RPM-GUIDE.

The package now builds well and works when installed, at least for me. It is at Software.openSUSE.org. Before going on to bite another brick I would like to polish some remaining issues. Please allow me a few more questions regarding output in the build-log:

  1. In the log, after “booting XEN kernel …”, I see messages like:
PCI: Fatal: No config space access function found
FATAL: Module ext4 not found.

Q1: Can I ignore these?

  1. There is a warning regarding make:
make -C plugins/input_uvc all
make[1]: Entering directory `/usr/src/packages/BUILD/mjpg-streamer-2.0/plugins/input_uvc'
make[1]: warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.
gcc -c -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -o v4l2uvc.lo v4l2uvc.c

Q2: What does this mean? Should I use ‘make -j 4’ instead of ‘make’. Or is there a macro for ‘make’ to be used?

  1. There are three warnings about missing files in the rpm macro directory. I have seen them in many other posts on this forum but could not find any explanation:
+ /usr/lib/rpm/brp-desktop
WARNING: '/usr/lib/rpm/brp-desktop.data/suse-screensavers.menu' does not exist
WARNING: '/usr/lib/rpm/brp-desktop.data/preferences-gnome.menu' does not exist
WARNING: '/usr/lib/rpm/brp-desktop.data/applications-kmenuedit.menu' does not exist
+ /usr/lib/rpm/brp-rpath

Q3: Ignore or take steps to avoid?

Thanks in advance.

Yes AFAIK (I ignore…)

I normally use;

%{__make} %{?jobs:-j%jobs}

Yes, ignore…

Cheers Malcolm °¿° (Linux Counter #276890)
SUSE Linux Enterprise Desktop 11 (x86_64) Kernel
up 12:00, 2 users, load average: 0.33, 0.33, 0.38
GPU GeForce 8600 GTS Silent - CUDA Driver Version: 190.53

(smile) Your answers to Q1 and Q3 make me happy.

@Q2: I have made my spec file to read:

%{__make} %{?jobs:-j%jobs} RPM_OPT_FLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}

but the warning still remains the same:

make[1]: warning: jobserver unavailable: using -j1. Add `+’ to parent make rule.

The Makefile asks for:

all: application plugins

application: $(APP_BINARY)

plugins: $(PLUGINS)

$(APP_BINARY): mjpg_streamer.c mjpg_streamer.h mjpg_streamer.o utils.c utils.h
        $(CC) $(CFLAGS) $(OBJECTS) -o $(APP_BINARY) $(LFLAGS)
        chmod 755 $(APP_BINARY)

output_autofocus.so: mjpg_streamer.h utils.h
        make -C plugins/output_autofocus all
        cp plugins/output_autofocus/output_autofocus.so .

where output_autofocus.so is one of several plugins all listed in $(PLUGINS).

Heureka! Answering my own question here, possibly for the benefit of others …

The solution can be found in the very fine documentation of make: Appendix B Errors Generated by Make:

warning: jobserver unavailable: using -j1. Add '+' to parent make rule.

In order for make processes to communicate, the parent will pass information to the child. Since this could result in problems if the child process isn’t actually a make, the parent will only do this if it thinks the child is a make. The parent uses the normal algorithms to determine this (see How the MAKE Variable Works). If the makefile is constructed such that the parent doesn’t know the child is a make process, then the child will receive only part of the information necessary. In this case, the child will generate this warning message and proceed with its build in a sequential manner.

Thus the relevant line in the Makefile should read:

$(MAKE) -C plugins/output_autofocus all

and the warning goes away. :slight_smile: