Skip to content

Commit f474b4b

Browse files
committed
Merge branch 'dreibh/netbsd'
2 parents 2e2d661 + 7b21119 commit f474b4b

3 files changed

Lines changed: 88 additions & 14 deletions

File tree

CMakeLists.txt

Lines changed: 73 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,28 +152,51 @@ INCLUDE(FindPackageHandleStandardArgs)
152152
# ###### IDN2 necessary to support IDN if not provided by libc ##############
153153
# NOTE: Linux provides IDN support directly in
154154
# getaddrinfo() and getnameinfo()!
155-
IF ( (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") OR
156-
(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") )
155+
IF ( (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") OR
156+
(CMAKE_SYSTEM_NAME MATCHES "NetBSD") OR
157+
(CMAKE_SYSTEM_NAME MATCHES "Darwin") )
157158
FIND_LIBRARY(LIBIDN2_LIBRARY NAMES idn2 PATHS /usr/local/lib)
158159
FIND_PATH(LIBIDN2_INCLUDE_DIR NAMES idn2.h PATHS /usr/local/include)
159160
IF ((LIBIDN2_LIBRARY) AND (LIBIDN2_INCLUDE_DIR))
160-
MESSAGE(STATUS "IDN2 library found.")
161+
MESSAGE(STATUS "IDN2 library found:")
162+
MESSAGE(STATUS " LIBIDN2_LIBRARY: ${LIBIDN2_LIBRARY}")
163+
MESSAGE(STATUS " LIBIDN2_INCLUDE_DIR: ${LIBIDN2_INCLUDE_DIR}")
161164
ELSE()
162165
MESSAGE(FATAL_ERROR
163166
" Cannot find IDN2 library! Try:\n"
164167
" * FreeBSD: sudo pkg install -y libidn2\n"
168+
" * NetBSD: sudo pkgin -y install libidn2\n"
165169
" * Apple: brew install libidn2\n")
166170
ENDIF()
167171
ENDIF()
168172

173+
# ###### Liberty ############################################################
174+
IF (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
175+
FIND_LIBRARY(LIBIBERTY_LIBRARY NAMES iberty PATHS /usr/pkg/lib)
176+
FIND_PATH(LIBIBERTY_INCLUDE_DIR NAMES libiberty.h PATHS /usr/pkg/include)
177+
IF ((LIBIBERTY_LIBRARY) AND (LIBIBERTY_INCLUDE_DIR))
178+
ADD_DEFINITIONS(-DHAVE_LIBIBERTY)
179+
MESSAGE(STATUS "Libiberty library found:")
180+
MESSAGE(STATUS " LIBIBERTY_LIBRARY: ${LIBIBERTY_LIBRARY}")
181+
MESSAGE(STATUS " LIBIBERTY_INCLUDE_DIR: ${LIBIBERTY_INCLUDE_DIR}")
182+
ELSE()
183+
MESSAGE(FATAL_ERROR
184+
" Cannot find Libiberty library! Try:\n"
185+
" * NetBSD: sudo pkgin -y install liberty")
186+
ENDIF()
187+
ENDIF()
188+
189+
169190
# ###### GeoIP ##############################################################
170191
IF (WITH_GEOIP)
171192
FIND_LIBRARY(MAXMINDDB_LIBRARY NAMES maxminddb)
172193
FIND_PATH(MAXMINDDB_INCLUDE_DIR NAMES maxminddb.h)
173194
IF ((MAXMINDDB_LIBRARY) AND (MAXMINDDB_INCLUDE_DIR))
174195
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GeoIP DEFAULT_MSG MAXMINDDB_LIBRARY MAXMINDDB_INCLUDE_DIR)
175196
ADD_DEFINITIONS(-DHAVE_MAXMINDDB)
176-
MESSAGE(STATUS "MaxMindDB library found.")
197+
MESSAGE(STATUS "MaxMindDB library found:")
198+
MESSAGE(STATUS " MAXMINDDB_LIBRARY: ${MAXMINDDB_LIBRARY}")
199+
MESSAGE(STATUS " MAXMINDDB_INCLUDE_DIR: ${MAXMINDDB_INCLUDE_DIR}")
177200
ELSE()
178201
MESSAGE(FATAL_ERROR
179202
" Cannot find MaxMindDB library! Try:\n"
@@ -182,6 +205,7 @@ IF (WITH_GEOIP)
182205
" * SuSE: sudo zypper install -y libmaxminddb-devel\n"
183206
" * Alpine: sudo apk add libmaxminddb-dev\n"
184207
" * FreeBSD: sudo pkg install -y libmaxminddb\n"
208+
" * NetBSD: sudo pkgin -y install libmaxminddb\n"
185209
" * Apple: brew install libmaxminddb")
186210
ENDIF()
187211
ENDIF()
@@ -206,12 +230,54 @@ IF (WITH_I18N)
206230
" * SuSE: sudo zypper install -y gettext-devel\n"
207231
" * Alpine: sudo apk add gettext-dev\n"
208232
" * FreeBSD: sudo pkg install -y gettext\n"
233+
" * NetBSD: sudo pkgin -y install gettext\n"
234+
" * OpenBSD: sudo pkg_add gettext-runtime gettext-tools\n"
209235
" * Apple: brew install gettext")
210236
ENDIF()
211237

212-
FIND_PROGRAM(XGETTEXT xgettext REQUIRED)
213-
FIND_PROGRAM(MSGMERGE msgmerge REQUIRED)
214-
FIND_PROGRAM(MSGFMT msgfmt REQUIRED)
238+
FIND_PROGRAM(XGETTEXT xgettext HINTS /usr/pkg/bin /opt/homebrew/opt/gettext/bin /usr/local/opt/gettext/bin)
239+
FIND_PROGRAM(MSGMERGE msgmerge HINTS /usr/pkg/bin /opt/homebrew/opt/gettext/bin /usr/local/opt/gettext/bin)
240+
FIND_PROGRAM(MSGFMT msgfmt HINTS /usr/pkg/bin /opt/homebrew/opt/gettext/bin /usr/local/opt/gettext/bin)
241+
242+
IF (XGETTEXT AND MSGMERGE AND MSGFMT)
243+
MESSAGE(STATUS "GNU gettext support found:")
244+
245+
EXECUTE_PROCESS(COMMAND ${XGETTEXT} --version
246+
OUTPUT_VARIABLE XGETTEXT_OUTPUT
247+
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
248+
STRING(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+|[0-9]+\\.[0-9]+)" XGETTEXT_VERSION "${XGETTEXT_OUTPUT}")
249+
250+
EXECUTE_PROCESS(COMMAND ${MSGMERGE} --version
251+
OUTPUT_VARIABLE MSGMERGE_OUTPUT
252+
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
253+
STRING(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+|[0-9]+\\.[0-9]+)" MSGMERGE_VERSION "${MSGMERGE_OUTPUT}")
254+
255+
EXECUTE_PROCESS(COMMAND ${MSGFMT} --version
256+
OUTPUT_VARIABLE MSGFMT_OUTPUT
257+
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
258+
STRING(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+|[0-9]+\\.[0-9]+)" MSGFMT_VERSION "${MSGFMT_OUTPUT}")
259+
260+
MESSAGE(STATUS " xgettext: ${XGETTEXT} (version ${XGETTEXT_VERSION})")
261+
MESSAGE(STATUS " msgmerge: ${MSGMERGE} (version ${MSGMERGE_VERSION})")
262+
MESSAGE(STATUS " msgfmt: ${MSGFMT} (version ${MSGFMT_VERSION})")
263+
ENDIF()
264+
265+
SET(GETTEXT_MIN_VERSION 0.19)
266+
IF ((NOT XGETTEXT) OR (NOT MSGMERGE) OR (NOT MSGFMT) OR
267+
(XGETTEXT_VERSION VERSION_LESS ${GETTEXT_MIN_VERSION}) OR
268+
(MSGMERGE_VERSION VERSION_LESS ${GETTEXT_MIN_VERSION}) OR
269+
(MSGFMT_VERSION VERSION_LESS ${GETTEXT_MIN_VERSION}))
270+
MESSAGE(FATAL_ERROR
271+
"Cannot find gettext tools >= ${GETTEXT_MIN_VERSION}! Try:\n"
272+
" * Ubuntu/Debian: sudo apt install -y gettext\n"
273+
" * Fedora: sudo dnf install -y gettext\n"
274+
" * SuSE: sudo zypper install -y gettext\n"
275+
" * Alpine: sudo apk add gettext-dev\n"
276+
" * FreeBSD: sudo pkg install -y gettext-tools\n"
277+
" * NetBSD: sudo pkgin -y install gettext-tools\n"
278+
" * OpenBSD: sudo pkg_add gettext-tools\n"
279+
" * Apple: brew install gettext")
280+
ENDIF()
215281

216282
ADD_DEFINITIONS(-DENABLE_NLS)
217283
ENDIF()

src/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
4444
#############################################################################
4545

4646
ADD_EXECUTABLE(subnetcalc subnetcalc.cc tools.cc)
47-
TARGET_INCLUDE_DIRECTORIES(subnetcalc PRIVATE ${Intl_INCLUDE_DIRS} ${MAXMINDDB_INCLUDE_DIR})
48-
TARGET_LINK_LIBRARIES(subnetcalc ${Intl_LIBRARIES} ${LIBIDN2_LIBRARY} ${MAXMINDDB_LIBRARY})
47+
TARGET_INCLUDE_DIRECTORIES(subnetcalc PRIVATE ${Intl_INCLUDE_DIRS} ${LIBIBERTY_INCLUDE_DIR} ${MAXMINDDB_INCLUDE_DIR})
48+
TARGET_LINK_LIBRARIES(subnetcalc ${Intl_LIBRARIES} ${LIBIBERTY_LIBRARY} ${LIBIDN2_LIBRARY} ${MAXMINDDB_LIBRARY})
4949
INSTALL(TARGETS subnetcalc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
5050
INSTALL(FILES subnetcalc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
5151
INSTALL(FILES subnetcalc.bash-completion

src/subnetcalc.cc

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,23 @@
4040
#include <netdb.h>
4141
#include <unistd.h>
4242
#include <vector>
43-
#ifndef NI_IDN
44-
#include <idn2.h>
43+
44+
#if defined(HAVE_LIBIBERTY)
45+
#include <libiberty.h>
46+
extern "C" {
47+
int getopt_long_only(int argc, char* const* argv, const char* optstring,
48+
const struct option* longopts, int* longindex);
49+
}
4550
#endif
4651

4752
#ifdef HAVE_MAXMINDDB
4853
#include <maxminddb.h>
4954
#endif
5055

56+
#if !defined(NI_IDN)
57+
#include <idn2.h>
58+
#endif
59+
5160
#ifdef ENABLE_NLS
5261
#include <libintl.h>
5362
#else
@@ -156,10 +165,9 @@ void generateUniqueLocal(sockaddr_union& address,
156165
exit(1);
157166
}
158167

159-
#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)
168+
#if 1
160169
// ====== Read random number from random device ==========================
161-
const char* randomFile = highQualityRng ? "/dev/random" : "/dev/urandom";
162-
170+
const char* randomFile = highQualityRng ? "/dev/random" : "/dev/urandom";
163171
std::ifstream randomStream(randomFile, std::ios::binary);
164172
if(randomStream) {
165173
std::cout << format(gettext("Generating Unique Local IPv6 address (using %s) ..."),

0 commit comments

Comments
 (0)