Skip to content

Commit a5f1ee1

Browse files
committed
Initial commit
0 parents  commit a5f1ee1

File tree

9 files changed

+531
-0
lines changed

9 files changed

+531
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

CMakeLists.txt

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
cmake_minimum_required (VERSION 3.16)
2+
3+
function (SetCompilerOptions target)
4+
target_compile_features (${target} PUBLIC cxx_std_14)
5+
target_compile_options (${target} PUBLIC "$<$<CONFIG:Debug>:-DDEBUG>")
6+
if (WIN32)
7+
target_compile_options (${target} PUBLIC /W4 /WX /wd4996 /Zc:wchar_t-)
8+
else ()
9+
target_compile_options (${target} PUBLIC -Wall -Wextra -Werror -fvisibility=hidden
10+
-Wno-multichar
11+
-Wno-ctor-dtor-privacy
12+
-Wno-invalid-offsetof
13+
-Wno-ignored-qualifiers
14+
-Wno-reorder
15+
-Wno-overloaded-virtual
16+
-Wno-unused-parameter
17+
-Wno-missing-field-initializers
18+
-Wno-unknown-pragmas
19+
-Wno-missing-braces
20+
-Wno-unused-private-field
21+
-Wno-return-std-move
22+
-Wno-unused-value
23+
-Wno-switch)
24+
endif ()
25+
endfunction ()
26+
27+
function (SubDirList dirlist curdir)
28+
file (GLOB children RELATIVE "${curdir}" "${curdir}/*")
29+
set (result "")
30+
foreach (child ${children})
31+
if (IS_DIRECTORY "${curdir}/${child}")
32+
list (APPEND result ${child})
33+
endif ()
34+
endforeach ()
35+
set (${dirlist} ${result} PARENT_SCOPE)
36+
endfunction ()
37+
38+
function (GetModuleNameFromModuleFolderName module folder)
39+
set (result "")
40+
if (${folder} MATCHES "^.*Lib$")
41+
string (REGEX REPLACE "^(.*)Lib$" "\\1" result ${folder})
42+
elseif (WIN32 AND ${folder} MATCHES "^Communication.*$")
43+
string (REGEX REPLACE "^Communication(.*)$" "Communication.\\1" result ${folder})
44+
else ()
45+
set (result ${folder})
46+
endif ()
47+
set (${module} ${result} PARENT_SCOPE)
48+
endfunction ()
49+
50+
function (AddGSModule target folder)
51+
message (STATUS "AddGSModule ${folder}")
52+
target_include_directories (${target} PUBLIC "${AC_API_DEVKIT_DIR}/Support/Modules/${folder}")
53+
set (module "")
54+
GetModuleNameFromModuleFolderName (module ${folder})
55+
if (WIN32)
56+
set (ModuleLibPath "${AC_API_DEVKIT_DIR}/Support/Modules/${folder}/Win/${module}Imp.lib")
57+
else ()
58+
set (ModuleLibPath "${AC_API_DEVKIT_DIR}/Support/Frameworks/${module}.framework")
59+
endif ()
60+
if (EXISTS ${ModuleLibPath})
61+
target_link_libraries (${target} ${ModuleLibPath})
62+
endif ()
63+
endfunction ()
64+
65+
set_property (GLOBAL PROPERTY USE_FOLDERS ON)
66+
67+
get_filename_component (CMAKE_CURRENT_FOLDER_NAME "${CMAKE_CURRENT_LIST_DIR}" NAME)
68+
set (CMAKE_SUPPRESS_REGENERATION 1)
69+
set (CMAKE_CONFIGURATION_TYPES Debug;Release;RelWithDebInfo)
70+
set (AC_API_DEVKIT_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." CACHE PATH "API DevKit directory.")
71+
set (AC_ADDON_NAME "${CMAKE_CURRENT_FOLDER_NAME}" CACHE STRING "Add-On name.")
72+
set (AC_ADDON_LANGUAGE "INT" CACHE STRING "Add-On language code.")
73+
74+
message (STATUS "APIDevKit directory: ${AC_API_DEVKIT_DIR}")
75+
set (ACAPINC_FILE_LOCATION ${AC_API_DEVKIT_DIR}/Support/Inc/ACAPinc.h)
76+
if (EXISTS ${ACAPINC_FILE_LOCATION})
77+
file (READ ${ACAPINC_FILE_LOCATION} ACAPIncContent)
78+
string (REGEX MATCHALL "#define[ \t]+ServerMainVers_([0-9][0-9])" VersionList ${ACAPIncContent})
79+
set (ARCHICAD_VERSION ${CMAKE_MATCH_1})
80+
message (STATUS "Archicad Version: ${ARCHICAD_VERSION}")
81+
else ()
82+
message (FATAL_ERROR "Failed to detect Archicad version, please check the value of the AC_API_DEVKIT_DIR variable.")
83+
endif ()
84+
85+
if (WIN32)
86+
add_definitions (-DUNICODE -D_UNICODE)
87+
else ()
88+
add_definitions (-Dmacintosh=1)
89+
endif ()
90+
add_definitions (-DACExtension)
91+
92+
project (${AC_ADDON_NAME})
93+
94+
set (AddOnSourcesFolder ./Src)
95+
set (AddOnResourcesFolder .)
96+
97+
# AddOnResources
98+
99+
set (ResourceObjectsDir ${CMAKE_BINARY_DIR}/ResourceObjects)
100+
101+
file (GLOB AddOnImageFiles
102+
${AddOnResourcesFolder}/RFIX/Images/*.svg
103+
)
104+
if (WIN32)
105+
file (GLOB AddOnResourceFiles
106+
${AddOnResourcesFolder}/R${AC_ADDON_LANGUAGE}/*.grc
107+
${AddOnResourcesFolder}/RFIX/*.grc
108+
${AddOnResourcesFolder}/RFIX/*.grc
109+
${AddOnResourcesFolder}/RFIX.win/*.rc2
110+
)
111+
else ()
112+
file (GLOB AddOnResourceFiles
113+
${AddOnResourcesFolder}/R${AC_ADDON_LANGUAGE}/*.grc
114+
${AddOnResourcesFolder}/RFIX/*.grc
115+
${AddOnResourcesFolder}/RFIX.mac/*.plist
116+
)
117+
endif ()
118+
119+
source_group ("Images" FILES ${AddOnImageFiles})
120+
source_group ("Resources" FILES ${AddOnResourceFiles})
121+
add_custom_target (
122+
AddOnResources ALL
123+
DEPENDS "${ResourceObjectsDir}/AddOnResources.stamp"
124+
SOURCES ${AddOnResourceFiles} ${AddOnImageFiles}
125+
)
126+
127+
get_filename_component (AddOnSourcesFolderAbsolute "${CMAKE_CURRENT_LIST_DIR}/${AddOnSourcesFolder}" ABSOLUTE)
128+
get_filename_component (AddOnResourcesFolderAbsolute "${CMAKE_CURRENT_LIST_DIR}/${AddOnResourcesFolder}" ABSOLUTE)
129+
get_filename_component (APIDevKitToolsFolderAbsolute "${AC_API_DEVKIT_DIR}/Support/Tools" ABSOLUTE)
130+
if (WIN32)
131+
add_custom_command (
132+
OUTPUT "${ResourceObjectsDir}/AddOnResources.stamp"
133+
DEPENDS ${AddOnResourceFiles} ${AddOnImageFiles}
134+
COMMENT "Compiling resources..."
135+
COMMAND ${CMAKE_COMMAND} -E make_directory "${ResourceObjectsDir}"
136+
COMMAND python "${APIDevKitToolsFolderAbsolute}/CompileResources.py" "${AC_ADDON_LANGUAGE}" "${AC_API_DEVKIT_DIR}" "${AddOnSourcesFolderAbsolute}" "${AddOnResourcesFolderAbsolute}" "${ResourceObjectsDir}" "${ResourceObjectsDir}/${AC_ADDON_NAME}.res"
137+
COMMAND ${CMAKE_COMMAND} -E touch "${ResourceObjectsDir}/AddOnResources.stamp"
138+
)
139+
else ()
140+
add_custom_command (
141+
OUTPUT "${ResourceObjectsDir}/AddOnResources.stamp"
142+
DEPENDS ${AddOnResourceFiles} ${AddOnImageFiles}
143+
COMMENT "Compiling resources..."
144+
COMMAND ${CMAKE_COMMAND} -E make_directory "${ResourceObjectsDir}"
145+
COMMAND python "${APIDevKitToolsFolderAbsolute}/CompileResources.py" "${AC_ADDON_LANGUAGE}" "${AC_API_DEVKIT_DIR}" "${AddOnSourcesFolderAbsolute}" "${AddOnResourcesFolderAbsolute}" "${ResourceObjectsDir}" "${CMAKE_BINARY_DIR}/$<CONFIG>/${AC_ADDON_NAME}.bundle/Contents/Resources"
146+
COMMAND ${CMAKE_COMMAND} -E copy "${AC_API_DEVKIT_DIR}/Support/Inc/PkgInfo" "${CMAKE_BINARY_DIR}/$<CONFIG>/${AC_ADDON_NAME}.bundle/Contents/PkgInfo"
147+
COMMAND ${CMAKE_COMMAND} -E touch "${ResourceObjectsDir}/AddOnResources.stamp"
148+
)
149+
endif ()
150+
151+
# AddOn
152+
153+
file (GLOB AddOnHeaderFiles
154+
${AddOnSourcesFolder}/*.h
155+
${AddOnSourcesFolder}/*.hpp
156+
)
157+
file (GLOB AddOnSourceFiles
158+
${AddOnSourcesFolder}/*.c
159+
${AddOnSourcesFolder}/*.cpp
160+
)
161+
file (GLOB AllCFiles
162+
${AddOnSourcesFolder}/*.c
163+
)
164+
set_source_files_properties(${AllCFiles} PROPERTIES LANGUAGE CXX)
165+
set (
166+
AddOnFiles
167+
${AddOnHeaderFiles}
168+
${AddOnSourceFiles}
169+
)
170+
source_group ("Sources" FILES ${AddOnFiles})
171+
if (WIN32)
172+
add_library (AddOn SHARED ${AddOnFiles})
173+
else ()
174+
add_library (AddOn MODULE ${AddOnFiles})
175+
endif ()
176+
177+
set_target_properties (AddOn PROPERTIES OUTPUT_NAME ${AC_ADDON_NAME})
178+
if (WIN32)
179+
set_target_properties (AddOn PROPERTIES SUFFIX ".apx")
180+
else ()
181+
set_target_properties (AddOn PROPERTIES BUNDLE TRUE)
182+
set_target_properties (AddOn PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_LIST_DIR}/${AddOnResourcesFolder}/RFIX.mac/Info.plist")
183+
set_target_properties (AddOn PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIG>")
184+
endif ()
185+
186+
if (WIN32)
187+
target_link_options (AddOn PUBLIC "${ResourceObjectsDir}/${AC_ADDON_NAME}.res")
188+
target_link_options (AddOn PUBLIC /export:GetExportedFuncAddrs,@1 /export:SetImportedFuncAddrs,@2)
189+
endif ()
190+
191+
target_include_directories (AddOn PUBLIC
192+
${AddOnSourcesFolder}
193+
${AC_API_DEVKIT_DIR}/Support/Inc
194+
)
195+
196+
if (WIN32)
197+
target_link_libraries (AddOn
198+
"$<$<CONFIG:Debug>:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STATD.lib>"
199+
"$<$<CONFIG:Release>:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STAT.lib>"
200+
"$<$<CONFIG:RelWithDebInfo>:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STAT.lib>"
201+
)
202+
else ()
203+
find_library (CocoaFramework Cocoa)
204+
target_link_libraries (AddOn
205+
"${AC_API_DEVKIT_DIR}/Support/Lib/Mactel/libACAP_STAT.a"
206+
${CocoaFramework}
207+
)
208+
endif ()
209+
210+
SetCompilerOptions (AddOn)
211+
add_dependencies (AddOn AddOnResources)
212+
213+
get_filename_component (APIDevKitModulesDir "${AC_API_DEVKIT_DIR}/Support/Modules" ABSOLUTE)
214+
set (GSModules "")
215+
SubDirList (GSModules "${APIDevKitModulesDir}")
216+
foreach (gsModule ${GSModules})
217+
AddGSModule (AddOn ${gsModule})
218+
endforeach ()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include "AdditionalJSONCommands.grc.rc2"
2+
#include "AdditionalJSONCommandsFix.grc.rc2"
3+
4+
5+
1 ICON LOADONCALL MOVEABLE IMPURE ACAP.ico

RFIX/AdditionalJSONCommandsFix.grc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'MDID' 32500 "Add-On Identifier" {
2+
628121456
3+
1482304358
4+
}

RINT/AdditionalJSONCommands.grc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'STR#' 32000 "Add-on Name and Description" {
2+
/* [ 1] */ "Additional JSON/Python Commands"
3+
/* [ 2] */ "This Add-On implements additional JSON/Python commands."
4+
}

Src/APIEnvir.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// *****************************************************************************
2+
// General settings for AddOn developments
3+
// *****************************************************************************
4+
5+
#ifndef _APIENVIR_H_
6+
#define _APIENVIR_H_
7+
8+
9+
#if defined (_MSC_VER)
10+
#if !defined (WINDOWS)
11+
#define WINDOWS
12+
#endif
13+
#endif
14+
15+
#if defined (WINDOWS)
16+
#include "Win32Interface.hpp"
17+
#endif
18+
19+
#if defined (macintosh)
20+
#include <CoreServices/CoreServices.h>
21+
#endif
22+
23+
#if !defined (ACExtension)
24+
#define ACExtension
25+
#endif
26+
27+
28+
#endif

0 commit comments

Comments
 (0)