First of all: you should write a core plugin, not an external plugin.
If you absolutely can't avoid writing an external plugin, you have two choices: a native puplug plugin or a fungw engine plugin. This page is about the puplug plugin method. Pro: have full access to all APIs. Con: more boilerplate code.
Please refer to the example/template plugin. After make and make install, starting pcb-rnd should auto-load the plugin. The stderr message from init should appear. The ExtFoo action should be available.
To start your external plugin, copy it to new directory and rename ext_foo both in file names and file content. Make sure to fill in the fields in the pup file. Please preserve the ext_ prefix.
Other than some naming conventions and the #includes, which are either "src/*.h" or you need an extra -I for src/, everything is as documented for core plugins.
For that you need to use scconfig to configure your external plugin. Once you do that, you can use the --import=$(TRUNK)/scconfig/config.cache argument, which will get scconfig to read everything cached during pcb-rnd's configuration. This will save running some detections that are already done for pcb-rnd and will also import the exact results of CC, CFLAGS, LDFLAGS, etc.
After that, you should get your hooks.c to generate a conf file you can include from your Makefile.
Note: we generally do not support having external plugins, so please do not make requests for pcb-rnd's Makefile.conf to contain whatever nodes your external plugin may need.
No idea, at pcb-rnd we don't use those - we don't provide support for those tools.
We told you so. Please consider restarting your plugin from scratch as a core plugin. If you can't, you will have to live with frequent API changes. pcb-rnd is not a lib, but an application, we do not promote developing external plugins, so we don't feel obliged to keep internal API backward compatibility.