Skip to content

Commit dcaaee9

Browse files
author
Boris Brodski
committed
Rework CMake files and build scripts
Rename variables Add better support for custom runtime libraries Add clean separation between Windows 32 and 64 bit Add new BAT build scripts for Win64-Build
1 parent b9cef60 commit dcaaee9

11 files changed

+743
-702
lines changed

CMakeLists.txt

+48-52
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
1-
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
1+
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
22
PROJECT(SevenZipJBinding)
33

44
# Compile on Mac OS https://bug477945.bugzilla.mozilla.org/attachment.cgi?id=376115
55
# 64 bit java: /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java
66
# CC="gcc-4.2 -arch i386"
77
# CXX="g++-4.2 -arch i386"
88

9+
SET(CMAKE_BUILD_TYPE Release CACHE STRING "Build target: Release or Debug")
910

10-
# Uncomment to build in debug mode
11-
# SET(CMAKE_BUILD_TYPE Debug)
11+
SET(MINGW32 No CACHE BOOL "Use MinGW toolchain (32 bit)")
12+
SET(MINGW64 No CACHE BOOL "Use MinGW toolchain (64 bit)")
13+
SET(RUNTIME_LIB CACHE BOOL "Compiler runtime library to package and load before 7-Zip-JBinding")
1214

13-
# Uncomment to build Windows 64 version
14-
# SET(USE_MINGW_W64 Yes)
15+
SET(JAVA_TMP CACHE PATH "Path to tmp directory")
1516

16-
IF (NOT CMAKE_BUILD_TYPE)
17-
SET(CMAKE_BUILD_TYPE Release)
17+
IF (MINGW32 OR MINGW64)
18+
SET(MINGW Yes)
19+
ELSE()
20+
SET(MINGW No)
21+
ENDIF()
22+
23+
SET(WINDOWS ${CMAKE_HOST_WIN32}) #true also for win64
24+
25+
26+
IF(CMAKE_SYSTEM_NAME MATCHES "Windows.*")
27+
SET(WINDOWS Yes)
1828
ENDIF()
1929

20-
SET(JAVA_TMP CACHE PATH "Path to tmp directory (optional)")
30+
IF(WINDOWS AND NOT MINGW)
31+
MESSAGE(FATAL_ERROR "On Windows only MinGW build is supported")
32+
ENDIF()
2133

2234
INCLUDE(cmake/FindJavaExtended.cmake)
2335
#INCLUDE(cmake/CheckGCC.cmake)
@@ -37,31 +49,21 @@ IF("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") # TODO Switch to JAVA_SYSTEM
3749
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch ${JAVA_ARCH}")
3850
ENDIF()
3951

40-
#IF(USE_MINGW_W64)
4152
SET(PLATFORM ${JAVA_SYSTEM}-${JAVA_ARCH})
42-
#ELSE()
43-
# SET(PLATFORM ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
44-
#ENDIF()
4553

4654
SET(SEVENZIPJBINDING_LIB_JAR ${PROJECT_BINARY_DIR}/sevenzipjbinding-${PLATFORM}.jar)
4755
SET(SEVENZIPJBINDING_FILENAME sevenzipjbinding${SEVENZIPJBINDING_VERSON_POSTFIX}-${PLATFORM})
4856
SET(SEVENZIPJBINDING_SOURCE_FILENAME sevenzipjbinding${SEVENZIPJBINDING_VERSON_POSTFIX}-src)
49-
#SET(SEVENZIPJBINDING_ZIP ${RELEASE_PATH}/${SEVENZIPJBINDING_FILENAME}.zip)
50-
51-
# ------------------- Java -------------------
52-
53-
# Variables:
54-
#
55-
# JAVA_SOURCE_DIR - path to java source code
56-
# SEVENZIP_JBINDING_JAR - (global) target JAR file
5757

5858
SET(JAVA_SOURCE_DIR ${PROJECT_SOURCE_DIR}/jbinding-java/src)
5959
SET(SEVENZIP_JBINDING_JAR ${PROJECT_BINARY_DIR}/jbinding-java/sevenzipjbinding.jar)
6060

61-
FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/jbinding-java)
6261
SET_PROPERTY(GLOBAL PROPERTY SEVENZIP_JBINDING_JAR ${SEVENZIP_JBINDING_JAR})
62+
SET_PROPERTY(GLOBAL PROPERTY MINGW ${MINGW})
63+
SET_PROPERTY(GLOBAL PROPERTY WINDOWS ${WINDOWS})
6364

64-
IF(CMAKE_HOST_WIN32) #true for win64 also
65+
FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/jbinding-java)
66+
IF(WINDOWS)
6567
SET(PATH_SEP ";")
6668
ELSE()
6769
SET(PATH_SEP ":")
@@ -123,32 +125,27 @@ ENDIF()
123125

124126
ADD_DEPENDENCIES(7-Zip-JBinding sevenzipjbinding-jar)
125127

126-
GET_PROPERTY(USE_MINGW GLOBAL PROPERTY USE_MINGW)
127-
GET_PROPERTY(USE_MINGW_W64 GLOBAL PROPERTY USE_MINGW_W64)
128128
GET_TARGET_PROPERTY(SEVENZIP_JBINDING_LIB 7-Zip-JBinding LOCATION)
129129
GET_FILENAME_COMPONENT(SEVENZIP_JBINDING_LIB_FILENAME "${SEVENZIP_JBINDING_LIB}" NAME)
130130

131131
FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${PLATFORM})
132132
SET(SEVENZIP_JBINDING_LIB_PROPERTY_FILE ${PROJECT_BINARY_DIR}/${PLATFORM}/sevenzipjbinding-lib.properties)
133133
FILE(WRITE ${SEVENZIP_JBINDING_LIB_PROPERTY_FILE} "sevenzipjbinding.libname.1=${SEVENZIP_JBINDING_LIB_FILENAME}\n")
134-
IF(USE_MINGW_W64)
135-
IF (MINGW_RUNTIME_DLL_FILENAME MATCHES "/.*" AND USE_CYGWIN)
136-
IF(NOT CYGPATH_EXE_FILENAME)
137-
MESSAGE(FATAL_ERROR "cygpath.exe wasn't found")
138-
ENDIF(NOT CYGPATH_EXE_FILENAME)
139-
EXECUTE_PROCESS(COMMAND cygpath.exe -m ${MINGW_RUNTIME_DLL_FILENAME} OUTPUT_VARIABLE MINGW_RUNTIME_DLL_FILENAME)
140-
ENDIF()
141-
# !!! TODO
142-
# GET_FILENAME_COMPONENT(MINGW_RUNTIME_DLL_DIR ${MINGW_RUNTIME_DLL_FILENAME} PATH)
143-
GET_FILENAME_COMPONENT(MINGW_RUNTIME_DLL_NAME ${MINGW_RUNTIME_DLL_FILENAME} NAME)
144-
FILE(APPEND ${SEVENZIP_JBINDING_LIB_PROPERTY_FILE} "sevenzipjbinding.libname.2=${MINGW_RUNTIME_DLL_NAME}\n")
145-
ENDIF(USE_MINGW_W64)
146-
STRING(RANDOM BUILD_REF)
134+
IF(RUNTIME_LIB)
135+
FILE(APPEND ${SEVENZIP_JBINDING_LIB_PROPERTY_FILE} "sevenzipjbinding.libname.2=${RUNTIME_LIB}\n")
136+
ENDIF(RUNTIME_LIB)
137+
STRING(RANDOM LENGTH 12 BUILD_REF)
147138
FILE(APPEND ${SEVENZIP_JBINDING_LIB_PROPERTY_FILE} "build.ref=${BUILD_REF}\n")
148139

149140
SET(SEVENZIPJBINDING_PLATFORMS_PROPERTY_FILE sevenzipjbinding-platforms.properties)
150141
FILE(WRITE ${PROJECT_BINARY_DIR}/${SEVENZIPJBINDING_PLATFORMS_PROPERTY_FILE} "platform.1=${PLATFORM}\n")
151142

143+
IF(MINGW)
144+
SET(MAKE_COMMAND "mingw32-make")
145+
ELSE()
146+
SET(MAKE_COMMAND "make")
147+
ENDIF()
148+
152149
MESSAGE("")
153150
MESSAGE("Build type: ${CMAKE_BUILD_TYPE}, platform: ${PLATFORM}")
154151
MESSAGE("")
@@ -157,19 +154,18 @@ MESSAGE("Java compiler: ${JAVA_COMPILE}")
157154
MESSAGE("Java header compiler: ${JAVA_HEADER_COMPILE}")
158155
MESSAGE("Java documentation tool: ${JAVA_DOC}")
159156
MESSAGE("Java archiver: ${JAVA_ARCHIVE}")
160-
IF(USE_MINGW_W64)
161-
MESSAGE("libgcc_s_sjlj-1.dll to use: ${MINGW_RUNTIME_DLL_FILENAME}")
157+
MESSAGE("MinGW: ${MINGW}")
158+
MESSAGE("MinGW-32: ${MINGW32}")
159+
MESSAGE("MinGW-64: ${MINGW64}")
160+
IF(RUNTIME_LIB)
161+
MESSAGE("Runtime libaray to use: ${RUNTIME_LIB_FILENAME}")
162162
ENDIF()
163163
MESSAGE("Output package: ./${SEVENZIPJBINDING_FILENAME}.zip")
164164
MESSAGE("")
165165
MESSAGE("")
166-
IF(USE_MINGW)
167-
MESSAGE("Type 'mingw32-make' to compile")
168-
ELSE()
169-
MESSAGE("Type 'make' to compile")
170-
ENDIF()
166+
MESSAGE("Type '${MAKE_COMMAND}' to compile")
171167
MESSAGE("Type 'ctest' to run tests (it could take up to 30 minutes on a slow CPU)")
172-
MESSAGE("Type 'make package' to build a distribution package")
168+
MESSAGE("Type '${MAKE_COMMAND} package' to build a distribution package")
173169
MESSAGE("")
174170

175171
ADD_CUSTOM_TARGET(sevenzipjbinding-lib-jar ALL
@@ -192,10 +188,10 @@ ADD_CUSTOM_COMMAND(OUTPUT ${SEVENZIPJBINDING_LIB_JAR}
192188
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
193189
COMMENT Building Platformdependend jar)
194190

195-
IF(USE_MINGW_W64)
191+
IF(RUNTIME_LIB)
196192
ADD_CUSTOM_COMMAND(TARGET sevenzipjbinding-lib-jar POST_BUILD
197193
COMMAND ${CMAKE_COMMAND} -E copy
198-
${MINGW_RUNTIME_DLL_FILENAME}
194+
${RUNTIME_LIB_FILENAME}
199195
${PLATFORM}
200196
COMMAND ${JAVA_ARCHIVE} uf ${SEVENZIPJBINDING_LIB_JAR}
201197
-C ${PROJECT_BINARY_DIR}
@@ -241,7 +237,7 @@ SET(PREPACKAGE_ACTIONS
241237
ENDMACRO()
242238
243239
FILE(MAKE_DIRECTORY \"${JAVADOC_DIR}\")
244-
EXECUTE_PROCESS(COMMAND ${JAVA_DOC}
240+
EXECUTE_PROCESS(COMMAND \"${JAVA_DOC}\"
245241
-public -version -author -quiet
246242
-sourcepath ${PROJECT_SOURCE_DIR}/jbinding-java/src
247243
-subpackages net.sf.sevenzipjbinding
@@ -251,13 +247,13 @@ SET(PREPACKAGE_ACTIONS
251247
COPY_FROM_SRC(\"${PROJECT_SOURCE_DIR}/jbinding-java/src\" \"${PREPACKAGE_TMP}/java-src/\" \"\")
252248
COPY_FROM_SRC(\"${PROJECT_SOURCE_DIR}/jbinding-cpp\" \"${PREPACKAGE_TMP}/cpp-src/\" CMakeLists.txt)
253249
254-
EXECUTE_PROCESS(COMMAND ${JAVA_ARCHIVE} cMf ${PREPACKAGE_TMP}/java-src.zip .
250+
EXECUTE_PROCESS(COMMAND \"${JAVA_ARCHIVE}\" cMf ${PREPACKAGE_TMP}/java-src.zip .
255251
WORKING_DIRECTORY ${PREPACKAGE_TMP}/java-src/)
256252
257-
EXECUTE_PROCESS(COMMAND ${JAVA_ARCHIVE} cMf ${PREPACKAGE_TMP}/cpp-src.zip .
253+
EXECUTE_PROCESS(COMMAND \"${JAVA_ARCHIVE}\" cMf ${PREPACKAGE_TMP}/cpp-src.zip .
258254
WORKING_DIRECTORY ${PREPACKAGE_TMP}/cpp-src/)
259255
260-
EXECUTE_PROCESS(COMMAND ${JAVA_ARCHIVE} cMf ${PREPACKAGE_TMP}/javadoc.zip .
256+
EXECUTE_PROCESS(COMMAND \"${JAVA_ARCHIVE}\" cMf ${PREPACKAGE_TMP}/javadoc.zip .
261257
WORKING_DIRECTORY ${JAVADOC_DIR})"
262258
)
263259

@@ -314,7 +310,7 @@ IF(BUILD_TESTING)
314310
SET(JUNIT_TEST_RUNNER ${PROJECT_BINARY_DIR}/JUnitRunner.cmake)
315311
FILE(WRITE ${JUNIT_TEST_RUNNER} "STRING(REPLACE \"%3D\" \"=\" JAVA_OPT_TO_USE \"\${JAVA_OPT}\")
316312
EXECUTE_PROCESS(COMMAND
317-
${JAVA_RUNTIME} -cp \"${JUNIT_LIB}${PATH_SEP}${TESTS_JAR}${PATH_SEP}${SEVENZIP_JBINDING_JAR}${PATH_SEP}${SEVENZIPJBINDING_LIB_JAR}\"
313+
\"${JAVA_RUNTIME}\" -cp \"${JUNIT_LIB}${PATH_SEP}${TESTS_JAR}${PATH_SEP}${SEVENZIP_JBINDING_JAR}${PATH_SEP}${SEVENZIPJBINDING_LIB_JAR}\"
318314
\"-DSINGLEBUNDLE=\${SINGLEBUNDLE}\" \${JAVA_OPT_TO_USE} ")
319315
IF(JAVA_TMP)
320316
FILE(APPEND ${JUNIT_TEST_RUNNER} "\"-Djava.io.tmpdir=${JAVA_TMP}\" ")

cmake/FindMinGWm10-DLL.cmake

-33
This file was deleted.

cmake/FindRuntimeLibrary.cmake

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
IF(WINDOWS) #true for win64 also
2+
IF(NOT RUNTIME_LIB)
3+
MESSAGE(FATAL_ERROR "No runtime library provided. Use -DRUNTIME_LIB=<filename> to specify it")
4+
ENDIF()
5+
6+
MESSAGE("-- Looking for ${RUNTIME_LIB}")
7+
8+
GET_FILENAME_COMPONENT(COMPILER_BIN_DIR "${CMAKE_CXX_COMPILER}" PATH)
9+
10+
FIND_FILE(RUNTIME_LIB_FILENAME "${RUNTIME_LIB}" "$ENV{PATH}" "${COMPILER_BIN_DIR}")
11+
12+
MARK_AS_ADVANCED(RUNTIME_LIB_FILENAME)
13+
14+
IF(RUNTIME_LIB_FILENAME)
15+
MESSAGE("-- Looking for ${RUNTIME_LIB} - found: ${RUNTIME_LIB_FILENAME}")
16+
ELSE()
17+
MESSAGE(FATAL_ERROR "${RUNTIME_LIB} not found. Please point cmake to ${RUNTIME_LIB} using GUI or -DRUNTIME_LIB_FILENAME=<path-to-lib> option.")
18+
ENDIF()
19+
ENDIF(WINDOWS)

0 commit comments

Comments
 (0)