[Libreoffice-commits] core.git: bin/gbuild-to-ide osx/jantest osx/janTestLib

jan Iversen jani at documentfoundation.org
Sun Jan 29 16:11:59 UTC 2017


 bin/gbuild-to-ide            |  209 ++++++++++++++++++++++---------------------
 osx/janTestLib/janTestLib.h  |   13 ++
 osx/janTestLib/janTestLib.m  |   13 ++
 osx/jantest/LibMain.cpp      |   15 +++
 osx/jantest/UnittestMain.cpp |   15 +++
 5 files changed, 167 insertions(+), 98 deletions(-)

New commits:
commit 05ce36d2e2bada48ee97d6a7c45e3bcf71dff29a
Author: jan Iversen <jani at documentfoundation.org>
Date:   Sun Jan 29 17:10:36 2017 +0100

    gbuild-to-ide xcode, added targets in menu
    
    First step in removing make as builder.
    
    Change-Id: I445627df5610a7d0b8bfbabddb66f1273e021b1a

diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide
index 4596222..42ba3b1 100755
--- a/bin/gbuild-to-ide
+++ b/bin/gbuild-to-ide
@@ -437,11 +437,18 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
     def __init__(self, gbuildparser, ide):
         IdeIntegrationGenerator.__init__(self, gbuildparser, ide)
 
-    counter = 16777216
+    typeCounter = {'PBXProject'           : 000000,
+                   'PBXGroup'             : 100000,
+                   'PBXFileReference'     : 200000,
+                   'PBXNativeTarget'      : 300000,
+                   'XCConfigurationList'  : 400000,
+                   'PBXSourcesBuildPhase' : 500000,
+                   'XCBuildConfiguration' : 600000,
+                   'PBXBuildFile'         : 700000}
 
     def emit(self):
-        rootId = 'X0000001'
-        mainGroupId = 'X0000002'
+        mainGroupId, mainGroup = self.generate_PBXGroup(None)
+        rootId = self.generate_id('PBXProject')
         self.rootObj = {'attributes': {'LastUpgradeCheck': '0820',
                                        'ORGANIZATIONNAME': 'LibreOffice',
                                        'TargetAttributes': {}},
@@ -455,7 +462,6 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
                         'projectRoot': '',
                         'buildConfigurationList': '',
                         'targets': []}
-        mainGroup = {'isa': 'PBXGroup', 'children': [], 'sourceTree': '<group>'}
         pbxproj = {'archiveVersion': 1,
                    'classes': {},
                    'objectVersion': 46,
@@ -465,27 +471,28 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
         for module in self.gbuildparser.modules:
             if module == 'include':
                 continue
-            sourceId, sourceObj = self.define_pbxgroup('Sources')
-            includeId, includeObj = self.define_pbxgroup('Headers')
-            moduleId, moduleObj = self.define_pbxgroup(module)
+            moduleId, moduleObj = self.generate_PBXGroup(module)
+            sourceId, sourceObj = self.generate_PBXGroup('Sources')
+            includeId, includeObj = self.generate_PBXGroup('Headers')
+            targetId, targetObj = self.generate_PBXGroup('Targets')
 
-            moduleObj['children'] = [sourceId, includeId]
+            moduleObj['children'] = [sourceId, includeId, targetId]
             pbxproj['objects'].update({sourceId:  sourceObj,
                                        includeId: includeObj,
-                                       moduleId: moduleObj})
+                                       moduleId: moduleObj,
+                                       targetId: targetObj})
             mainGroup['children'].append(moduleId)
 
             for i in self.gbuildparser.modules[module]['headers']:
-                ref = self.generate_id()
+                ref = self.generate_id('PBXFileReference')
                 pbxproj['objects'][ref] = self.generate_PBXFileReference(module, i)
                 includeObj['children'].append(ref)
             for i in self.gbuildparser.modules[module]['sources']:
-                ref = self.generate_id()
+                ref = self.generate_id('PBXFileReference')
                 pbxproj['objects'][ref] = self.generate_PBXFileReference(module, i)
                 sourceObj['children'].append(ref)
-
             for target in self.gbuildparser.modules[module]['targets']:
-                pbxproj['objects'].update(self.generate_project(target, module, sourceObj['children']))
+                pbxproj['objects'].update(self.generate_target(target, module, targetObj, sourceObj['children']))
 
         xcodeprojdir = './osx/libreoffice.xcodeproj'
         try:
@@ -496,13 +503,6 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
             f.write('// !$*UTF8*$!\n')
             self.write_object(pbxproj, f, 0)
 
-    def define_pbxgroup(self, name):
-        return self.generate_id(), {'isa': 'PBXGroup', 'children': [], 'name': name, 'sourceTree': '<group>'}
-
-    def generate_id(self):
-        XcodeIntegrationGenerator.counter += 1
-        return str('X%07x' % XcodeIntegrationGenerator.counter)
-
     def indent(self, file, level):
         if level != 0:
             for i in range(0, level):
@@ -535,7 +535,34 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
                 file.write(',')
             file.write(')')
 
-    def generate_target(self, modulename):
+    def generate_id(self, id):
+        self.typeCounter[id] += 1
+        return str('X%06d' % self.typeCounter[id])
+
+    def generate_target(self, target, module, targetObj, sourceObj):
+        targetId = self.generate_id('PBXNativeTarget')
+        configurationListId = self.generate_id('XCConfigurationList')
+        configurationDebugId = self.generate_id('XCBuildConfiguration')
+        fileId = self.generate_id('XCBuildConfiguration')
+        objects = {targetId: self.generate_PBXLegacyTarget(target, configurationListId),
+                   configurationListId: self.generate_XCBuildConfiguration(target, configurationDebugId),
+                   configurationDebugId: self.generate_XCBuildConfiguration(target, configurationDebugId, debug=True),
+                   fileId : self.generate_PBXFileReference(module, target['LINKTARGET'], explicit=target['build_type'])
+                   }
+        self.rootObj['attributes']['TargetAttributes'].update({
+            targetId: {'CreatedOnToolsVersion': '8.2', 'ProvisioningStyle': 'Automatic'}})
+        self.rootObj['buildConfigurationList'] = configurationListId
+        self.rootObj['targets'].append(targetId)
+        targetObj['children'].append(fileId)
+        return objects
+
+    def generate_PBXGroup(self, name):
+        obj = {'isa': 'PBXGroup', 'children': [], 'sourceTree': '<group>'}
+        if not name is None:
+            obj['name'] = name
+        return self.generate_id('PBXGroup'), obj
+
+    def generate_PBXLegacyTarget(self, modulename, configurationListId):
         if modulename['build_type'] == 'Library':
             product = 'com.apple.product-type.library.dynamic'
         elif modulename['build_type'] == 'Executable':
@@ -545,8 +572,8 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
         else:
             product = 'com.apple.product-type.something'
 
-        result = {'isa': 'PBXLegacyTarget',
-                  'buildConfigurationList': self.configurationListId,
+        return {'isa': 'PBXLegacyTarget',
+                  'buildConfigurationList': configurationListId,
                   'buildArgumentsString': modulename['target_name'],
                   'buildPhases': [],
                   'dependencies': [],
@@ -555,88 +582,74 @@ class XcodeIntegrationGenerator(IdeIntegrationGenerator):
                   'name': modulename['target_name'],
                   'productName': modulename['name'],
                   'passBuildSettingsEnvironment': 1}
-        return result
-
-    def generate_configuration_debug(self, modulename):
-        result = {'isa': 'XCBuildConfiguration',
-                  'buildSettings': {
-                      'ALWAYS_SEARCH_USER_PATHS': 'NO',
-                      'CLANG_ANALYZER_NONNULL': 'YES',
-                      'CLANG_CXX_LANGUAGE_STANDARD': 'gnu++0x',
-                      'CLANG_CXX_LIBRARY': 'libc++',
-                      'CLANG_ENABLE_MODULES': 'YES',
-                      'CLANG_ENABLE_OBJC_ARC': 'YES',
-                      'CLANG_WARN_BOOL_CONVERSION': 'YES',
-                      'CLANG_WARN_CONSTANT_CONVERSION': 'YES',
-                      'CLANG_WARN_DIRECT_OBJC_ISA_USAGE': 'YES_ERROR',
-                      'CLANG_WARN_DOCUMENTATION_COMMENTS': 'YES',
-                      'CLANG_WARN_EMPTY_BODY': 'YES',
-                      'CLANG_WARN_ENUM_CONVERSION': 'YES',
-                      'CLANG_WARN_INFINITE_RECURSION': 'YES',
-                      'CLANG_WARN_INT_CONVERSION': 'YES',
-                      'CLANG_WARN_OBJC_ROOT_CLASS': 'YES_ERROR',
-                      'CLANG_WARN_SUSPICIOUS_MOVE': 'YES',
-                      'CLANG_WARN_UNREACHABLE_CODE': 'YES',
-                      'CLANG_WARN__DUPLICATE_METHOD_MATCH': 'YES',
-                      'CODE_SIGN_IDENTITY': '-',
-                      'COPY_PHASE_STRIP': 'NO',
-                      'DEBUG_INFORMATION_FORMAT': 'dwarf',
-                      'ENABLE_STRICT_OBJC_MSGSEND': 'YES',
-                      'ENABLE_TESTABILITY': 'YES',
-                      'GCC_C_LANGUAGE_STANDARD': 'gnu99',
-                      'GCC_DYNAMIC_NO_PIC': 'NO',
-                      'GCC_NO_COMMON_BLOCKS': 'YES',
-                      'GCC_OPTIMIZATION_LEVEL': 0,
-                      'GCC_PREPROCESSOR_DEFINITIONS': [
-                          'DEBUG=1',
-                          '$(inherited)'],
-                      'GCC_WARN_64_TO_32_BIT_CONVERSION': 'YES',
-                      'GCC_WARN_ABOUT_RETURN_TYPE': 'YES_ERROR',
-                      'GCC_WARN_UNDECLARED_SELECTOR': 'YES',
-                      'GCC_WARN_UNINITIALIZED_AUTOS': 'YES_AGGRESSIVE',
-                      'GCC_WARN_UNUSED_FUNCTION': 'YES',
-                      'GCC_WARN_UNUSED_VARIABLE': 'YES',
-                      'MACOSX_DEPLOYMENT_TARGET': '10.12',
-                      'MTL_ENABLE_DEBUG_INFO': 'YES',
-                      'ONLY_ACTIVE_ARCH': 'YES',
-                      'PRODUCT_NAME': '$(TARGET_NAME)',
-                      'SDKROOT': 'macosx',
-                      'HEADER_SEARCH_PATHS': modulename['include']},
-                  'name': 'Debug'}
-        return result
 
-    def generate_configuration_list(self, modulename):
-        result = {'isa': 'XCConfigurationList',
-                  'buildConfigurations': [self.configurationDebugId],
-                  'defaultConfigurationIsVisible': 0,
-                  'defaultConfigurationName': 'Debug'}
+    def generate_XCBuildConfiguration(self, modulename, configurationDebugId, debug=False):
+        if debug:
+            result = {'isa': 'XCBuildConfiguration',
+                      'buildSettings': {
+                            'ALWAYS_SEARCH_USER_PATHS': 'NO',
+                            'CLANG_ANALYZER_NONNULL': 'YES',
+                            'CLANG_CXX_LANGUAGE_STANDARD': 'gnu++0x',
+                            'CLANG_CXX_LIBRARY': 'libc++',
+                            'CLANG_ENABLE_MODULES': 'YES',
+                            'CLANG_ENABLE_OBJC_ARC': 'YES',
+                            'CLANG_WARN_BOOL_CONVERSION': 'YES',
+                            'CLANG_WARN_CONSTANT_CONVERSION': 'YES',
+                            'CLANG_WARN_DIRECT_OBJC_ISA_USAGE': 'YES_ERROR',
+                            'CLANG_WARN_DOCUMENTATION_COMMENTS': 'YES',
+                            'CLANG_WARN_EMPTY_BODY': 'YES',
+                            'CLANG_WARN_ENUM_CONVERSION': 'YES',
+                            'CLANG_WARN_INFINITE_RECURSION': 'YES',
+                            'CLANG_WARN_INT_CONVERSION': 'YES',
+                            'CLANG_WARN_OBJC_ROOT_CLASS': 'YES_ERROR',
+                            'CLANG_WARN_SUSPICIOUS_MOVE': 'YES',
+                            'CLANG_WARN_UNREACHABLE_CODE': 'YES',
+                            'CLANG_WARN__DUPLICATE_METHOD_MATCH': 'YES',
+                            'CODE_SIGN_IDENTITY': '-',
+                            'COPY_PHASE_STRIP': 'NO',
+                            'DEBUG_INFORMATION_FORMAT': 'dwarf',
+                            'ENABLE_STRICT_OBJC_MSGSEND': 'YES',
+                            'ENABLE_TESTABILITY': 'YES',
+                            'GCC_C_LANGUAGE_STANDARD': 'gnu99',
+                            'GCC_DYNAMIC_NO_PIC': 'NO',
+                            'GCC_NO_COMMON_BLOCKS': 'YES',
+                            'GCC_OPTIMIZATION_LEVEL': 0,
+                            'GCC_PREPROCESSOR_DEFINITIONS': ['DEBUG=1', '$(inherited)'],
+                            'GCC_WARN_64_TO_32_BIT_CONVERSION': 'YES',
+                            'GCC_WARN_ABOUT_RETURN_TYPE': 'YES_ERROR',
+                            'GCC_WARN_UNDECLARED_SELECTOR': 'YES',
+                            'GCC_WARN_UNINITIALIZED_AUTOS': 'YES_AGGRESSIVE',
+                            'GCC_WARN_UNUSED_FUNCTION': 'YES',
+                            'GCC_WARN_UNUSED_VARIABLE': 'YES',
+                            'MACOSX_DEPLOYMENT_TARGET': '10.12',
+                            'MTL_ENABLE_DEBUG_INFO': 'YES',
+                            'ONLY_ACTIVE_ARCH': 'YES',
+                            'PRODUCT_NAME': '$(TARGET_NAME)',
+                            'SDKROOT': 'macosx',
+                            'HEADER_SEARCH_PATHS': modulename['include']},
+                      'name': 'Debug'}
+        else:
+            result = {'isa': 'XCConfigurationList',
+                      'buildConfigurations': [configurationDebugId],
+                      'defaultConfigurationIsVisible': 0,
+                      'defaultConfigurationName': 'Debug'}
         return result
 
-
-    def generate_PBXFileReference(self, module, filepath):
-        return {'isa': 'PBXFileReference',
+    def generate_PBXFileReference(self, module, filepath, explicit=None):
+        obj =  {'isa': 'PBXFileReference',
                 'path': module + '/' + filepath,
                 'name': filepath,
                 'fileEncoding': 4,
                 'sourceTree': '<group>'}
-
-
-    def generate_project(self, target, module, sourceObj):
-        self.targetId = self.generate_id()
-        self.configurationListId = self.generate_id()
-        self.configurationDebugId = self.generate_id()
-        self.productReferenceId = self.generate_id()
-        self.productGroupId = self.generate_id()
-        self.rootObj['attributes']['TargetAttributes'].update({
-            self.targetId: {'CreatedOnToolsVersion': '8.2',
-                            'ProvisioningStyle': 'Automatic'}})
-        self.rootObj['buildConfigurationList'] = self.configurationListId
-        self.rootObj['targets'].append(self.targetId)
-        objects = {self.targetId: self.generate_target(target),
-                   self.configurationListId: self.generate_configuration_list(target),
-                   self.configurationDebugId: self.generate_configuration_debug(target)
-                   }
-        return objects
+        if not explicit is None:
+            if explicit == 'Library':
+                obj['explicitFileType'] = 'compiled.mach-o.dylib'
+            else:
+                obj['explicitFileType'] = 'compiled.executable'
+            obj['path'] = filepath
+        else:
+            obj['path'] = module + '/' + filepath
+        return obj
 
 
 
diff --git a/osx/janTestLib/janTestLib.h b/osx/janTestLib/janTestLib.h
new file mode 100644
index 0000000..ecd1309
--- /dev/null
+++ b/osx/janTestLib/janTestLib.h
@@ -0,0 +1,13 @@
+//
+//  janTestLib.h
+//  janTestLib
+//
+//  Created by Jan Iversen on 29/01/2017.
+//  Copyright © 2017 Jan Iversen. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+ at interface janTestLib : NSObject
+
+ at end
diff --git a/osx/janTestLib/janTestLib.m b/osx/janTestLib/janTestLib.m
new file mode 100644
index 0000000..365103e
--- /dev/null
+++ b/osx/janTestLib/janTestLib.m
@@ -0,0 +1,13 @@
+//
+//  janTestLib.m
+//  janTestLib
+//
+//  Created by Jan Iversen on 29/01/2017.
+//  Copyright © 2017 Jan Iversen. All rights reserved.
+//
+
+#import "janTestLib.h"
+
+ at implementation janTestLib
+
+ at end
diff --git a/osx/jantest/LibMain.cpp b/osx/jantest/LibMain.cpp
new file mode 100644
index 0000000..20a59c3
--- /dev/null
+++ b/osx/jantest/LibMain.cpp
@@ -0,0 +1,15 @@
+//
+//  main.cpp
+//  jantest
+//
+//  Created by Jan Iversen on 29/01/2017.
+//  Copyright © 2017 Jan Iversen. All rights reserved.
+//
+
+#include <iostream>
+
+int main(int argc, const char * argv[]) {
+    // insert code here...
+    std::cout << "Hello, World!\n";
+    return 0;
+}
diff --git a/osx/jantest/UnittestMain.cpp b/osx/jantest/UnittestMain.cpp
new file mode 100644
index 0000000..20a59c3
--- /dev/null
+++ b/osx/jantest/UnittestMain.cpp
@@ -0,0 +1,15 @@
+//
+//  main.cpp
+//  jantest
+//
+//  Created by Jan Iversen on 29/01/2017.
+//  Copyright © 2017 Jan Iversen. All rights reserved.
+//
+
+#include <iostream>
+
+int main(int argc, const char * argv[]) {
+    // insert code here...
+    std::cout << "Hello, World!\n";
+    return 0;
+}


More information about the Libreoffice-commits mailing list