In Mac OS X 10.10, `launch_activate_socket` was introduced.
So whenever the port is requested, the `launchd` can launch the program
dynamically. A possible plist may like this:
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.github.shadowsocks</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/ss-local</string>
<string>-s</string>
<string>server host</string>
<string>-p</string>
<string>server port</string>
<!-- the -l and -b can be ommited, as launchd takes over it -->
<string>-k</string>
<string>password</string>
<string>-m</string>
<string>method</string>
<string>-t</string>
<string>timeout</string>
<string>-A</string>
</array>
<key>Sockets</key>
<dict>
<!-- the name is hard coded in ss-local -->
<key>Listeners</key>
<dict>
<key>SockNodeName</key>
<string>127.0.0.1</string>
<key>SockServiceName</key>
<string>socks</string>
</dict>
</dict>
</dict>
</plist>
```
The magic is `launchd` will listen to the `SockServiceName`, when the port
is requested, the `ss-local` will be launched.
- GNU treats void* as char* when doing pointer arithmetic, so let's make it clear
- Fix memory leak, save copy from malloc() and pass the original pointer to free()
- minor type mismatches
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
Tests show that EL6 is too old to support `%elif` statement (which is very stupid).
And revert dependency `openssl-libs` to `openssl` because of
inconsistent names in EL6.
The following error will occur when configuring with --enable-system-shared-lib:
```
/usr/bin/rm: cannot remove 'libtoolT': No such file or directory
```
This issue is caused by overwriting gnu make variable `RM` with `rm`,
whose default value is `rm -f` (https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html).