Skip to content

Commit 92a252b

Browse files
authored
Merge 93a9491 into f502062
2 parents f502062 + 93a9491 commit 92a252b

File tree

26 files changed

+744
-77
lines changed

26 files changed

+744
-77
lines changed

Makefile.am

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ all-libs-local/include:
221221
### (consume only one of these at a time!)
222222
### Delivers: libcommonversion.la (only version methods)
223223
### Delivers: libparseconf.la libnutconf.la libnutwincompat.la
224+
### May deliver: libnutprivate-$(SEMVER)-common-all.la and libnutprivate-$(SEMVER)-common-client.la for dynamic shared-object linking
224225
### Requires-ext: include/nut_version.h
225226
### Requires-int: libparseconf.la libcommonclient.la
226227
all-libs-local/common: all-libs-local/include
@@ -233,18 +234,21 @@ all-libs-local/common: all-libs-local/include
233234
### Requires-ext: common/libcommon.la common/libcommonclient.la
234235
### Requires-ext: common/libcommonversion.la
235236
### Requires-ext: common/libparseconf.la
237+
### For dynamic builds, alternately LIB-Requires-ext and Requires-ext: libnutprivate-$(SEMVER)-common*.la
236238
### Requires-int: libupsclient.la
237239
all-libs-local/clients: all-libs-local/common
238240
+@NUT_VERSION_H_GENERATED=true; export NUT_VERSION_H_GENERATED; \
239241
$(SUBDIR_TGT_RULE)
240242

241-
### Delivers: libdummy.la libdummy_serial.la libdummy_upsdrvquery.la
243+
### Delivers: libdummy_main.la libdummy_serial.la libdummy_upsdrvquery.la
242244
### Delivers: libdummy_mockdrv.la libserial-nutscan.la
243245
### LIB-Requires-ext: common/libcommon.la common/libparseconf.la
244246
### Requires-ext: common/libcommon.la common/libparseconf.la
245247
### Requires-ext: clients/libupsclient.la (dummy-ups only)
246-
### Requires-int: libdummy.la libdummy_upsdrvquery.la
248+
### Requires-int: libdummy_main.la libdummy_upsdrvquery.la
247249
### Requires-int: libdummy_serial.la
250+
### For dynamic builds, alternately LIB-Requires-ext and Requires-ext: libnutprivate-$(SEMVER)-common*.la
251+
### and may deliver: libnutprivate-$(SEMVER)-drivers-common.la and libnutprivate-$(SEMVER)-drivers-serial.la
248252
all-libs-local/drivers: all-libs-local/common
249253
+@NUT_VERSION_H_GENERATED=true; export NUT_VERSION_H_GENERATED; \
250254
$(SUBDIR_TGT_RULE)
@@ -269,6 +273,7 @@ all-libs-local/tools:
269273
### LIB-Requires-ext: drivers/libserial-nutscan.la
270274
### LIB-Requires-ext: common/libnutwincompat.la common/libcommonstr.la
271275
### LIB-Requires-ext: common/libcommonversion.la
276+
### For dynamic builds, alternately LIB-Requires-ext and Requires-ext: libnutprivate-$(SEMVER)-common*.la
272277
### HDR-Requires-ext: clients/libupsclient-version.h
273278
### HDR-Requires-ext: nut-scanner/nutscan-snmp.h nut-scanner/nutscan-usb.h
274279
### (generated by nut-scanner-deps/tools aliased as all-libs-local/tools)
@@ -357,7 +362,7 @@ all/clients: all/common all-libs-local/clients
357362
### Requires-ext: common/libcommon.la common/libparseconf.la
358363
### Requires-ext: common/libcommonversion.la
359364
### Requires-ext: clients/libupsclient.la (dummy-ups only)
360-
### Requires-int: libdummy.la libdummy_upsdrvquery.la
365+
### Requires-int: libdummy_main.la libdummy_upsdrvquery.la
361366
### Requires-int: libdummy_serial.la
362367

363368
# TODO in the future: propagate the knowledge of whether we are building

NEWS.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,11 @@ several `FSD` notifications into one executed action. [PR #3097]
276276
and have a consistent look. Revised some typos along the way. [issue #3194]
277277

278278
- `configure` script options:
279+
* Added an option to `--enable-shared-private-libs` to deliver NUT common
280+
libraries as shared objects used by different NUT binaries, rather than
281+
linking just the used bits into each binary. This has some potential
282+
both for mayhem (so disabled by default) and for significant reduction
283+
of installation footprint. [issue #2800]
279284
* For ages, most recipes for building NUT had customized the `sysconfdir` to
280285
be `/etc/nut`, which is not exactly the *system* configuration directory.
281286
This is finally deprecated, with new `--with-confdir` configuration option

UPGRADING.adoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ Changes from 2.8.4 to 2.8.5
2626

2727
- PLANNED: Keep track of any further API clean-up?
2828
29+
- Added a `configure` script option to `--enable-shared-private-libs` which
30+
allows to deliver NUT common libraries as shared objects used by different
31+
NUT binaries, rather than linking just the used bits into each binary.
32+
This has some potential both for mayhem (so disabled by default) and
33+
for significant reduction of installation footprint. If enabled with
34+
a NUT packaging build, note there would be several more NUT shared
35+
library files to deliver with the packages (formally versioned and
36+
named by NUT release semantic version triplet). [issue #2800]
37+
2938
- For ages, most recipes for building NUT had customized the `sysconfdir` to
3039
be `/etc/nut`, which is not exactly the *system* configuration directory.
3140
This is finally deprecated, with new `--with-confdir` configuration option

ci_build.sh

Lines changed: 129 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ if [ "$BUILD_TYPE" = fightwarn ]; then
109109
# Similarly for testing builds with and without "unmapped" values
110110
# (normally hidden by #ifdef blocks) in certain evolving drivers
111111
#[ -n "$NUT_UNMAPPED_VARIANTS" ] || NUT_UNMAPPED_VARIANTS=auto
112+
113+
#[ -n "$NUT_LIBNUTPRIVATE_VARIANTS" ] || NUT_LIBNUTPRIVATE_VARIANTS=auto
112114
fi
113115

114116
# configure default is "no"; an "auto" value is "yes unless CFLAGS say something"
@@ -1605,6 +1607,13 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
16051607
CONFIG_OPTS+=("--without-unmapped-data-points") ;;
16061608
*) ;; # Keep built-in default
16071609
esac
1610+
case x"${WITH_LIBNUTPRIVATE-}" in
1611+
[Tt][Rr][Uu][Ee]|[Yy][Ee][Ss])
1612+
CONFIG_OPTS+=("--enable-shared-pivate-libs") ;;
1613+
[Ff][Aa][Ll][Ss][Ee]|[Nn][Oo])
1614+
CONFIG_OPTS+=("--disable-shared-pivate-libs") ;;
1615+
*) ;; # Keep built-in default
1616+
esac
16081617
;;
16091618
esac
16101619
@@ -2137,15 +2146,35 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
21372146
done
21382147
fi
21392148
2149+
if [ -z "$NUT_LIBNUTPRIVATE_VARIANTS" ] || [ "$NUT_LIBNUTPRIVATE_VARIANTS" = auto ] || [ "$NUT_LIBNUTPRIVATE_VARIANTS" = default ] ; then
2150+
# Handle similarly to NUT_UNMAPPED_VARIANTS
2151+
NUT_LIBNUTPRIVATE_VARIANTS=()
2152+
case x"${WITH_LIBNUTPRIVATE-}" in
2153+
[Tt][Rr][Uu][Ee]|[Yy][Ee][Ss])
2154+
NUT_LIBNUTPRIVATE_VARIANTS+=("yes") ;;
2155+
[Ff][Aa][Ll][Ss][Ee]|[Nn][Oo])
2156+
NUT_LIBNUTPRIVATE_VARIANTS+=("no") ;;
2157+
*)
2158+
NUT_LIBNUTPRIVATE_VARIANTS+=("yes" "no") ;;
2159+
esac
2160+
else
2161+
TMP="$NUT_LIBNUTPRIVATE_VARIANTS"
2162+
NUT_LIBNUTPRIVATE_VARIANTS=()
2163+
for VAL in $TMP ; do
2164+
NUT_LIBNUTPRIVATE_VARIANTS+=("$VAL")
2165+
done
2166+
fi
2167+
21402168
# TODO: Similar loops for other variations like TESTING,
21412169
# MGE SHUT vs. other serial protocols...
21422170
21432171
BUILDSTODO_SSL="${#NUT_SSL_VARIANTS[@]}"
21442172
BUILDSTODO_USB="${#NUT_USB_VARIANTS[@]}"
21452173
BUILDSTODO_UNMAPPED="${#NUT_UNMAPPED_VARIANTS[@]}"
2174+
BUILDSTODO_LIBNUTPRIVATE="${#NUT_LIBNUTPRIVATE_VARIANTS[@]}"
21462175
2147-
echo "=== Found ${BUILDSTODO_SSL} SSL (${NUT_SSL_VARIANTS[*]}) and ${BUILDSTODO_USB} USB (${NUT_USB_VARIANTS[*]}) and ${BUILDSTODO_UNMAPPED} UNMAPPED (${NUT_UNMAPPED_VARIANTS[*]}) variations..."
2148-
if [ x"${BUILDSTODO_SSL}${BUILDSTODO_USB}${BUILDSTODO_UNMAPPED}" = x"000" ] ; then
2176+
echo "=== Found ${BUILDSTODO_SSL} SSL (${NUT_SSL_VARIANTS[*]}) and ${BUILDSTODO_USB} USB (${NUT_USB_VARIANTS[*]}) and ${BUILDSTODO_UNMAPPED} UNMAPPED (${NUT_UNMAPPED_VARIANTS[*]}) and ${BUILDSTODO_LIBNUTPRIVATE} LIBNUTPRIVATE (${NUT_LIBNUTPRIVATE_VARIANTS[*]}) variations..."
2177+
if [ x"${BUILDSTODO_SSL}${BUILDSTODO_USB}${BUILDSTODO_UNMAPPED}${BUILDSTODO_LIBNUTPRIVATE}" = x"0000" ] ; then
21492178
echo "=== ERROR: BUILD_TYPE='${BUILD_TYPE}' got no builds to run!" >&2
21502179
exit 1
21512180
fi
@@ -2168,10 +2197,14 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
21682197
if [ "$BUILDSTODO_UNMAPPED" = 1 ]; then
21692198
BUILDSTODO_ALWAYS="NUT_UNMAPPED_VARIANT=${NUT_UNMAPPED_VARIANTS[*]};${BUILDSTODO_ALWAYS}"
21702199
fi
2200+
if [ "$BUILDSTODO_LIBNUTPRIVATE" = 1 ]; then
2201+
BUILDSTODO_ALWAYS="NUT_LIBNUTPRIVATE_VARIANT=${NUT_LIBNUTPRIVATE_VARIANTS[*]};${BUILDSTODO_ALWAYS}"
2202+
fi
21712203
21722204
if [ "$BUILDSTODO_SSL" -le 1 ] \
21732205
&& [ "$BUILDSTODO_USB" -le 1 ] \
21742206
&& [ "$BUILDSTODO_UNMAPPED" -le 1 ] \
2207+
&& [ "$BUILDSTODO_LIBNUTPRIVATE" -le 1 ] \
21752208
; then
21762209
echo "=== NOTE: Considering at most one variant in each category, will do them all at once"
21772210
BUILDSTODO_LIST+=("${BUILDSTODO_ALWAYS}")
@@ -2205,6 +2238,12 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
22052238
BUILDSTODO_LIST+=("NUT_UNMAPPED_VARIANT=${VAL};${BUILDSTODO_ALWAYS}")
22062239
done
22072240
fi
2241+
if [ "$BUILDSTODO_LIBNUTPRIVATE" -gt 1 ]; then
2242+
for VAL in "${NUT_LIBNUTPRIVATE_VARIANTS[@]}" ; do
2243+
if [ "$VAL" = no ] ; then continue ; fi # Default setting for other builds
2244+
BUILDSTODO_LIST+=("NUT_LIBNUTPRIVATE_VARIANT=${VAL};${BUILDSTODO_ALWAYS}")
2245+
done
2246+
fi
22082247
else
22092248
# Try to mix into the smallest amount of builds (randomize
22102249
# the mix so we can cover many scenarios as different CI
@@ -2221,6 +2260,9 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
22212260
[ "$BUILDSTODO_MAX" -ge "$BUILDSTODO_UNMAPPED" ] \
22222261
|| { BUILDSTODO_MAX="$BUILDSTODO_UNMAPPED"; BUILDSTODO_MAX_TYPE="BUILDSTODO_UNMAPPED" ; }
22232262
2263+
[ "$BUILDSTODO_MAX" -ge "$BUILDSTODO_LIBNUTPRIVATE" ] \
2264+
|| { BUILDSTODO_MAX="$BUILDSTODO_LIBNUTPRIVATE"; BUILDSTODO_MAX_TYPE="BUILDSTODO_LIBNUTPRIVATE" ; }
2265+
22242266
# FIXME: Can this be eval'ed?
22252267
# First populate the longer set of variants:
22262268
case "${BUILDSTODO_MAX_TYPE}" in
@@ -2239,6 +2281,11 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
22392281
BUILDSTODO_LIST+=("NUT_UNMAPPED_VARIANT=${VAL};${BUILDSTODO_ALWAYS}")
22402282
done
22412283
;;
2284+
BUILDSTODO_LIBNUTPRIVATE)
2285+
for VAL in "${NUT_LIBNUTPRIVATE_VARIANTS[@]}" ; do
2286+
BUILDSTODO_LIST+=("NUT_LIBNUTPRIVATE_VARIANT=${VAL};${BUILDSTODO_ALWAYS}")
2287+
done
2288+
;;
22422289
esac
22432290
22442291
case "${BUILDSTODO_MAX_TYPE}" in
@@ -2256,6 +2303,13 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
22562303
BUILDSTODO_LIST[$i]="NUT_UNMAPPED_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
22572304
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
22582305
done
2306+
2307+
i=$(($RANDOM % $BUILDSTODO_MAX))
2308+
[ "$BUILDSTODO_LIBNUTPRIVATE" -le 1 ] || \
2309+
for VAL in "${NUT_LIBNUTPRIVATE_VARIANTS[@]}" ; do
2310+
BUILDSTODO_LIST[$i]="NUT_LIBNUTPRIVATE_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
2311+
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
2312+
done
22592313
;;
22602314
BUILDSTODO_USB)
22612315
i=$(($RANDOM % $BUILDSTODO_MAX))
@@ -2271,6 +2325,13 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
22712325
BUILDSTODO_LIST[$i]="NUT_UNMAPPED_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
22722326
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
22732327
done
2328+
2329+
i=$(($RANDOM % $BUILDSTODO_MAX))
2330+
[ "$BUILDSTODO_LIBNUTPRIVATE" -le 1 ] || \
2331+
for VAL in "${NUT_LIBNUTPRIVATE_VARIANTS[@]}" ; do
2332+
BUILDSTODO_LIST[$i]="NUT_LIBNUTPRIVATE_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
2333+
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
2334+
done
22742335
;;
22752336
BUILDSTODO_UNMAPPED)
22762337
i=$(($RANDOM % $BUILDSTODO_MAX))
@@ -2286,6 +2347,35 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
22862347
BUILDSTODO_LIST[$i]="NUT_USB_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
22872348
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
22882349
done
2350+
2351+
i=$(($RANDOM % $BUILDSTODO_MAX))
2352+
[ "$BUILDSTODO_LIBNUTPRIVATE" -le 1 ] || \
2353+
for VAL in "${NUT_LIBNUTPRIVATE_VARIANTS[@]}" ; do
2354+
BUILDSTODO_LIST[$i]="NUT_LIBNUTPRIVATE_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
2355+
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
2356+
done
2357+
;;
2358+
BUILDSTODO_LIBNUTPRIVATE)
2359+
i=$(($RANDOM % $BUILDSTODO_MAX))
2360+
[ "$BUILDSTODO_SSL" -le 1 ] || \
2361+
for VAL in "${NUT_SSL_VARIANTS[@]}" ; do
2362+
BUILDSTODO_LIST[$i]="NUT_SSL_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
2363+
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
2364+
done
2365+
2366+
i=$(($RANDOM % $BUILDSTODO_MAX))
2367+
[ "$BUILDSTODO_USB" -le 1 ] || \
2368+
for VAL in "${NUT_USB_VARIANTS[@]}" ; do
2369+
BUILDSTODO_LIST[$i]="NUT_USB_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
2370+
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
2371+
done
2372+
2373+
i=$(($RANDOM % $BUILDSTODO_MAX))
2374+
[ "$BUILDSTODO_UNMAPPED" -le 1 ] || \
2375+
for VAL in "${NUT_UNMAPPED_VARIANTS[@]}" ; do
2376+
BUILDSTODO_LIST[$i]="NUT_UNMAPPED_VARIANT=${VAL};${BUILDSTODO_LIST[$i]}"
2377+
i=$(( $(($i + 1)) % $BUILDSTODO_MAX))
2378+
done
22892379
;;
22902380
esac
22912381
fi
@@ -2306,6 +2396,7 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
23062396
NUT_SSL_VARIANT=""
23072397
NUT_USB_VARIANT=""
23082398
NUT_UNMAPPED_VARIANT=""
2399+
NUT_LIBNUTPRIVATE_VARIANT=""
23092400
eval $TESTCOMBO
23102401
23112402
echo "=== Starting 'TESTCOMBO=${TESTCOMBO}', ${BUILDSTODO} build variants remaining..."
@@ -2395,6 +2486,26 @@ default|default-alldrv|default-alldrv:no-distcheck|default-all-errors|default-al
23952486
;;
23962487
esac
23972488
2489+
case "${NUT_LIBNUTPRIVATE_VARIANT}" in
2490+
"") ;;
2491+
yes|no) # Try this variant
2492+
echo "=== Building with 'NUT_LIBNUTPRIVATE_VARIANT=${NUT_LIBNUTPRIVATE_VARIANT}' ..."
2493+
if [ "${NUT_SSL_VARIANTS[*]}" != "auto" ] && [ x"${NUT_SSL_VARIANT}" = x ] ; then
2494+
CONFIG_OPTS+=("--without-all")
2495+
CONFIG_OPTS+=("--without-ssl")
2496+
fi
2497+
CONFIG_OPTS+=("--with-serial=auto")
2498+
if [ "${NUT_USB_VARIANTS[*]}" != "no" ] && [ x"${NUT_USB_VARIANT}" = x ] ; then
2499+
CONFIG_OPTS+=("--with-usb=auto")
2500+
fi
2501+
CONFIG_OPTS+=("--enable-shared-private-libs=${NUT_LIBNUTPRIVATE_VARIANT}")
2502+
;;
2503+
*) # Potentially something new? Unknown values can fail in the configure script.
2504+
echo "=== Building with 'NUT_LIBNUTPRIVATE_VARIANT=${NUT_LIBNUTPRIVATE_VARIANT}' (WARNING: may be not supported)..."
2505+
CONFIG_OPTS+=("--enable-shared-private-libs=${NUT_LIBNUTPRIVATE_VARIANT}")
2506+
;;
2507+
esac
2508+
23982509
# Snippet from autogen.sh: restore files required by autoconf
23992510
# for non-"foreign" projects that a deep clean in other loops
24002511
# could have destroyed:
@@ -2727,6 +2838,21 @@ bindings)
27272838
CONFIG_OPTS+=("--with-unmapped-data-points")
27282839
fi
27292840
2841+
if [ -z "${WITH_LIBNUTPRIVATE-}" ] ; then
2842+
if [ x"${INPLACE_RUNTIME-}" = xtrue ]; then
2843+
WITH_LIBNUTPRIVATE=false
2844+
else
2845+
WITH_LIBNUTPRIVATE=true
2846+
fi
2847+
fi
2848+
2849+
if [ x"${WITH_LIBNUTPRIVATE-}" = xtrue ] ; then
2850+
# This is assumed for non-production builds to avoid confusion
2851+
# for end-users (not dev/testers).
2852+
# See above for defaulting of this vs. inplace builds.
2853+
CONFIG_OPTS+=("--enable-shared-private-libs")
2854+
fi
2855+
27302856
if [ -n "${BUILD_DEBUGINFO-}" ]; then
27312857
CONFIG_OPTS+=("--with-debuginfo=${BUILD_DEBUGINFO}")
27322858
else
@@ -2868,6 +2994,7 @@ cross-windows-mingw*)
28682994
SOURCEMODE="out-of-tree" \
28692995
MAKEFLAGS="$PARMAKE_FLAGS" \
28702996
KEEP_NUT_REPORT_FEATURE="true" \
2997+
ENABLE_NUT_SHARED_PRIVATE_LIBS_FLAG="true" \
28712998
./build-mingw-nut.sh $cmd
28722999
;;
28733000

0 commit comments

Comments
 (0)